| 1431 | } |
| 1432 | |
| 1433 | void |
| 1434 | testToNumber() |
| 1435 | { |
| 1436 | #define EQAL(T) BOOST_TEST(jv.to_number<T>() == V) |
| 1437 | #define EQUS(T) BOOST_TEST((V >= 0) && jv.to_number<T>() == static_cast<std::uint64_t>(V)) |
| 1438 | #define EQUF(T) BOOST_TEST(static_cast<float>(V) == static_cast<float>(jv.to_number<T>())) |
| 1439 | #define THRO(T) BOOST_TEST_THROWS_WITH_LOCATION(jv.to_number<T>()); |
| 1440 | |
| 1441 | BOOST_TEST_THROWS_WITH_LOCATION(value(nullptr).to_number<int>()); |
| 1442 | BOOST_TEST_THROWS_WITH_LOCATION(value(false).to_number<int>()); |
| 1443 | BOOST_TEST_THROWS_WITH_LOCATION(value(string_kind).to_number<int>()); |
| 1444 | BOOST_TEST_THROWS_WITH_LOCATION(value(array_kind).to_number<int>()); |
| 1445 | BOOST_TEST_THROWS_WITH_LOCATION(value(object_kind).to_number<int>()); |
| 1446 | |
| 1447 | BOOST_TEST_THROWS_WITH_LOCATION(value(nullptr).to_number<unsigned>()); |
| 1448 | BOOST_TEST_THROWS_WITH_LOCATION(value(false).to_number<unsigned>()); |
| 1449 | BOOST_TEST_THROWS_WITH_LOCATION(value(string_kind).to_number<unsigned>()); |
| 1450 | BOOST_TEST_THROWS_WITH_LOCATION(value(array_kind).to_number<unsigned>()); |
| 1451 | BOOST_TEST_THROWS_WITH_LOCATION(value(object_kind).to_number<unsigned>()); |
| 1452 | |
| 1453 | BOOST_TEST_THROWS_WITH_LOCATION(value(nullptr).to_number<double>()); |
| 1454 | BOOST_TEST_THROWS_WITH_LOCATION(value(false).to_number<double>()); |
| 1455 | BOOST_TEST_THROWS_WITH_LOCATION(value(string_kind).to_number<double>()); |
| 1456 | BOOST_TEST_THROWS_WITH_LOCATION(value(array_kind).to_number<double>()); |
| 1457 | BOOST_TEST_THROWS_WITH_LOCATION(value(object_kind).to_number<double>()); |
| 1458 | |
| 1459 | { |
| 1460 | unsigned char V = 0; |
| 1461 | value const jv(V); |
| 1462 | EQAL(std::int8_t); |
| 1463 | EQAL(std::int16_t); |
| 1464 | EQAL(std::int32_t); |
| 1465 | EQAL(std::int64_t); |
| 1466 | EQAL(std::uint8_t); |
| 1467 | EQAL(std::uint16_t); |
| 1468 | EQAL(std::uint32_t); |
| 1469 | EQAL(std::uint64_t); |
| 1470 | EQAL(float); |
| 1471 | EQAL(double); |
| 1472 | } |
| 1473 | { |
| 1474 | auto V = max_of<std::int8_t>(); |
| 1475 | value const jv(V); |
| 1476 | EQAL(std::int8_t); |
| 1477 | EQAL(std::int16_t); |
| 1478 | EQAL(std::int32_t); |
| 1479 | EQAL(std::int64_t); |
| 1480 | EQAL(std::uint8_t); |
| 1481 | EQAL(std::uint16_t); |
| 1482 | EQUS(std::uint32_t); |
| 1483 | EQUS(std::uint64_t); |
| 1484 | EQAL(float); |
| 1485 | EQAL(double); |
| 1486 | } |
| 1487 | { |
| 1488 | auto V = max_of<std::int16_t>(); |
| 1489 | value const jv(V); |
| 1490 | THRO(std::int8_t); |