#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;
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
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");
}
//------------------------------------------------------
{"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
testStdConstruction();
testInitList();
testEquality();
+ testHash();
}
};