Blame view

3rdparty/boost_1_81_0/libs/json/test/visit.cpp 2.84 KB
73ef4ff3   Hu Chunming   提交三方库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  //
  // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
  //
  // Distributed under the Boost Software License, Version 1.0. (See accompanying
  // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  //
  // Official repository: https://github.com/boostorg/json
  //
  
  // Test that header file is self-contained.
  #include <boost/json/visit.hpp>
  
  #include "test_suite.hpp"
  
  BOOST_JSON_NS_BEGIN
  
  class visit_test
  {
  public:
      template<class T>
      void
      check_const(kind k, T t)
      {
          struct f
          {
              kind k;
              bool operator()(std::nullptr_t) { return k == kind::null; }
              bool operator()(bool) { return k == kind::bool_; }
              bool operator()(std::int64_t) { return k == kind::int64; }
              bool operator()(std::uint64_t) { return k == kind::uint64; }
              bool operator()(double) { return k == kind::double_; }
              bool operator()(string const&) { return k == kind::string; }
              bool operator()(array const&) { return k == kind::array; }
              bool operator()(object const&) { return k == kind::object; }
              bool operator()(...) { return false; }
          };
          value const v(t);
          BOOST_TEST(visit(f{k}, v));
      }
  
      template<class T>
      void
      check_mutable(kind k, T t)
      {
          struct f
          {
              kind k;
              bool operator()(std::nullptr_t) { return k == kind::null; }
              bool operator()(bool&) { return k == kind::bool_; }
              bool operator()(std::int64_t&) { return k == kind::int64; }
              bool operator()(std::uint64_t&) { return k == kind::uint64; }
              bool operator()(double&) { return k == kind::double_; }
              bool operator()(string&) { return k == kind::string; }
              bool operator()(array&) { return k == kind::array; }
              bool operator()(object&) { return k == kind::object; }
              bool operator()(...) { return false; }
          };
          value v(t);
          BOOST_TEST(visit(f{k}, v));
      }
  
      void
      testVisit()
      {
          check_const(kind::null,    nullptr);
          check_const(kind::bool_,   true);
          check_const(kind::int64,   -1);
          check_const(kind::uint64,  1U);
          check_const(kind::double_, 3.14);
          check_const(kind::string,  string_kind);
          check_const(kind::array,   array_kind);
          check_const(kind::object,  object_kind);
  
          check_mutable(kind::null,    nullptr);
          check_mutable(kind::bool_,   true);
          check_mutable(kind::int64,   -1);
          check_mutable(kind::uint64,  1U);
          check_mutable(kind::double_, 3.14);
          check_mutable(kind::string,  string_kind);
          check_mutable(kind::array,   array_kind);
          check_mutable(kind::object,  object_kind);
      }
  
      void run()
      {
          testVisit();
      }
  };
  
  TEST_SUITE(visit_test, "boost.json.visit");
  
  BOOST_JSON_NS_END