]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/json/test/value.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / json / test / value.cpp
index 9966fb75c7f43e511690aeb36494e0f6ecd3b1b0..52684fe251e3a7d56cf1787143a59e63887b2f0d 100644 (file)
@@ -1400,25 +1400,25 @@ public:
 #define EQAL(T) BOOST_TEST(jv.to_number<T>() == V)
 #define EQUS(T) BOOST_TEST((V >= 0) && jv.to_number<T>() == static_cast<std::uint64_t>(V))
 #define EQUF(T) BOOST_TEST(static_cast<float>(V) == static_cast<float>(jv.to_number<T>()))
-#define THRO(T) BOOST_TEST_THROWS(jv.to_number<T>(), system_error)
+#define THRO(T) BOOST_TEST_THROWS_WITH_LOCATION(jv.to_number<T>());
 
-        BOOST_TEST_THROWS(value(nullptr).to_number<int>(), system_error);
-        BOOST_TEST_THROWS(value(false).to_number<int>(), system_error);
-        BOOST_TEST_THROWS(value(string_kind).to_number<int>(), system_error);
-        BOOST_TEST_THROWS(value(array_kind).to_number<int>(), system_error);
-        BOOST_TEST_THROWS(value(object_kind).to_number<int>(), system_error);
+        BOOST_TEST_THROWS_WITH_LOCATION(value(nullptr).to_number<int>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(false).to_number<int>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(string_kind).to_number<int>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(array_kind).to_number<int>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(object_kind).to_number<int>());
 
-        BOOST_TEST_THROWS(value(nullptr).to_number<unsigned>(), system_error);
-        BOOST_TEST_THROWS(value(false).to_number<unsigned>(), system_error);
-        BOOST_TEST_THROWS(value(string_kind).to_number<unsigned>(), system_error);
-        BOOST_TEST_THROWS(value(array_kind).to_number<unsigned>(), system_error);
-        BOOST_TEST_THROWS(value(object_kind).to_number<unsigned>(), system_error);
+        BOOST_TEST_THROWS_WITH_LOCATION(value(nullptr).to_number<unsigned>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(false).to_number<unsigned>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(string_kind).to_number<unsigned>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(array_kind).to_number<unsigned>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(object_kind).to_number<unsigned>());
 
-        BOOST_TEST_THROWS(value(nullptr).to_number<double>(), system_error);
-        BOOST_TEST_THROWS(value(false).to_number<double>(), system_error);
-        BOOST_TEST_THROWS(value(string_kind).to_number<double>(), system_error);
-        BOOST_TEST_THROWS(value(array_kind).to_number<double>(), system_error);
-        BOOST_TEST_THROWS(value(object_kind).to_number<double>(), system_error);
+        BOOST_TEST_THROWS_WITH_LOCATION(value(nullptr).to_number<double>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(false).to_number<double>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(string_kind).to_number<double>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(array_kind).to_number<double>());
+        BOOST_TEST_THROWS_WITH_LOCATION(value(object_kind).to_number<double>());
 
         {
             unsigned char V = 0;
@@ -1647,6 +1647,19 @@ public:
             EQAL(float);
             EQAL(double);
         }
+
+        {
+            error_code ec;
+            value(nullptr).to_number<double>(ec);
+            BOOST_TEST(ec == error::not_number);
+            BOOST_TEST(ec.has_location());
+        }
+
+        {
+            std::error_code ec;
+            value(nullptr).to_number<double>(ec);
+            BOOST_TEST(error::not_number == ec);
+        }
     }
 
     void
@@ -2026,7 +2039,7 @@ public:
         check_array(value{false,2},             false, 2);
         check_array(value{false,2,"3",nullptr}, false, 2, "3", nullptr);
         check_array(value{2,false,"3"},         2, false, "3");
-        check_array(value{true,2,"3"},          true, 2, "3");    
+        check_array(value{true,2,"3"},          true, 2, "3");
     }
 
     //------------------------------------------------------
@@ -2087,6 +2100,62 @@ public:
             {"a",1}, {"b",2}, {"c",3} }) != value(nullptr));
     }
 
+    void
+    testHash()
+    {
+        BOOST_TEST(check_hash_equal(value(nullptr), value(nullptr)));
+        BOOST_TEST(check_hash_equal(value(nullptr), value()));
+        BOOST_TEST(check_hash_equal(value(nullptr), value{}));
+        BOOST_TEST(expect_hash_not_equal(value(nullptr), value({})));
+        BOOST_TEST(expect_hash_not_equal(value(nullptr), value({object()})));
+        BOOST_TEST(expect_hash_not_equal(value(nullptr), value(true)));
+        BOOST_TEST(expect_hash_not_equal(value(nullptr), value(false)));
+        BOOST_TEST(expect_hash_not_equal(value(nullptr), value(0)));
+        BOOST_TEST(expect_hash_not_equal(value(nullptr), value(0UL)));
+        BOOST_TEST(expect_hash_not_equal(value(nullptr), value(0.0)));
+        BOOST_TEST(expect_hash_not_equal(value(nullptr), value("")));
+
+        BOOST_TEST(check_hash_equal(value(true), value(true)));
+        BOOST_TEST(check_hash_equal(value(false), value(false)));
+        BOOST_TEST(expect_hash_not_equal(value(false), value(true)));
+        BOOST_TEST(expect_hash_not_equal(value(false), value(0)));
+        BOOST_TEST(expect_hash_not_equal(value(false), value(0UL)));
+        BOOST_TEST(expect_hash_not_equal(value(false), value(0.0)));
+        BOOST_TEST(expect_hash_not_equal(value(true), value(1)));
+        BOOST_TEST(expect_hash_not_equal(value(true), value(1UL)));
+        BOOST_TEST(expect_hash_not_equal(value(true), value(1.0)));
+
+        BOOST_TEST(check_hash_equal(value(2021), value(2021UL)));
+        BOOST_TEST(expect_hash_not_equal(value(2021U), value(-2021)));
+        BOOST_TEST(expect_hash_not_equal(value(2021UL), value(2021.0)));
+
+        BOOST_TEST(expect_hash_not_equal(value({}), value({object()})));
+        BOOST_TEST(expect_hash_not_equal(value({}), value("")));
+        BOOST_TEST(expect_hash_not_equal(value({object()}), value("")));
+
+        BOOST_TEST(check_hash_equal(
+            value({{"a",1}, {"b",2}, {"c",3}}),
+            value({{"b",2}, {"c",3}, {"a",1}})));
+        BOOST_TEST(expect_hash_not_equal(
+            value({{"a",1}, {"b",2}, {"c",3}}),
+            object({{"b",2}, {"c",3}, {"a",1}})));
+        BOOST_TEST(expect_hash_not_equal(
+            value({{"a",1}, {"b",2}, {"c",3}}),
+            value({{"b",2}, {"c",3}})));
+        BOOST_TEST(check_hash_equal(
+            value({"a", "b", 17}),
+            value({"a", "b", 17U})));
+        BOOST_TEST(expect_hash_not_equal(
+            value({"a", "b", 17}),
+            array({"a", "b", 17})));
+        BOOST_TEST(expect_hash_not_equal(
+            value({"a", "b", 17}),
+            value({17, "a", "b"})));
+        BOOST_TEST(expect_hash_not_equal(
+            value({"a", "b"}),
+            value({{"a", "b"}})));
+    }
+
     //------------------------------------------------------
 
     void
@@ -2108,6 +2177,7 @@ public:
         testStdConstruction();
         testInitList();
         testEquality();
+        testHash();
     }
 };