🚧 bug fixes and more tests
This commit is contained in:
parent
bc238124ee
commit
ee0f23fdc6
4 changed files with 98 additions and 68 deletions
|
@ -6490,8 +6490,8 @@ class basic_json
|
|||
v.push_back(0x3b);
|
||||
add_to_vector(v, 8, positive_number);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case value_t::number_unsigned:
|
||||
|
|
|
@ -6490,8 +6490,8 @@ class basic_json
|
|||
v.push_back(0x3b);
|
||||
add_to_vector(v, 8, positive_number);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case value_t::number_unsigned:
|
||||
|
|
|
@ -77,4 +77,4 @@ test-%: src/unit-%.cpp ../src/json.hpp src/catch.hpp
|
|||
TEST_PATTERN = "*"
|
||||
TEST_PREFIX = ""
|
||||
check: $(TESTCASES)
|
||||
@cd .. ; for testcase in $(TESTCASES); do echo "Executing $$testcase..."; $(TEST_PREFIX)test/$$testcase $(TEST_PATTERN); done
|
||||
@cd .. ; for testcase in $(TESTCASES); do echo "Executing $$testcase..."; $(TEST_PREFIX)test/$$testcase $(TEST_PATTERN) || exit 1; done
|
||||
|
|
|
@ -77,66 +77,20 @@ TEST_CASE("CBOR")
|
|||
{
|
||||
SECTION("signed")
|
||||
{
|
||||
SECTION("-24..-1")
|
||||
SECTION("-9263 (int 16)")
|
||||
{
|
||||
for (auto i = -24; i <= -1; ++i)
|
||||
{
|
||||
CAPTURE(i);
|
||||
json j = -9263;
|
||||
std::vector<uint8_t> expected = {0x39, 0x24, 0x2e};
|
||||
|
||||
// create JSON value with integer number
|
||||
json j = i;
|
||||
|
||||
// check type
|
||||
CHECK(j.is_number_integer());
|
||||
|
||||
// create expected byte vector
|
||||
std::vector<uint8_t> expected;
|
||||
expected.push_back(0x20 - 1 - static_cast<uint8_t>(i));
|
||||
|
||||
// compare result + size
|
||||
const auto result = json::to_cbor(j);
|
||||
CHECK(result == expected);
|
||||
CHECK(result.size() == 1);
|
||||
|
||||
// check individual bytes
|
||||
CHECK(static_cast<int8_t>(0x20 - 1 - result[0]) == i);
|
||||
int16_t restored = -1 - ((result[1] << 8) + result[2]);
|
||||
CHECK(restored == -9263);
|
||||
|
||||
// roundtrip
|
||||
CHECK(json::from_cbor(result) == j);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
SECTION("0..127 (positive fixnum)")
|
||||
{
|
||||
for (size_t i = 0; i <= 255; ++i)
|
||||
{
|
||||
CAPTURE(i);
|
||||
|
||||
// create JSON value with integer number
|
||||
json j = -1;
|
||||
j.get_ref<json::number_integer_t&>() = static_cast<json::number_integer_t>(i);
|
||||
|
||||
// check type
|
||||
CHECK(j.is_number_integer());
|
||||
|
||||
// create expected byte vector
|
||||
std::vector<uint8_t> expected;
|
||||
expected.push_back(static_cast<uint8_t>(i));
|
||||
|
||||
// compare result + size
|
||||
const auto result = json::to_msgpack(j);
|
||||
CHECK(result == expected);
|
||||
CHECK(result.size() == 1);
|
||||
|
||||
// check individual bytes
|
||||
CHECK(result[0] == i);
|
||||
|
||||
// roundtrip
|
||||
CHECK(json::from_msgpack(result) == j);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
SECTION("-256..-24")
|
||||
{
|
||||
|
@ -169,20 +123,96 @@ TEST_CASE("CBOR")
|
|||
}
|
||||
}
|
||||
|
||||
SECTION("-9263 (int 16)")
|
||||
SECTION("-24..-1")
|
||||
{
|
||||
json j = -9263;
|
||||
std::vector<uint8_t> expected = {0x39, 0x24, 0x2e};
|
||||
for (auto i = -24; i <= -1; ++i)
|
||||
{
|
||||
CAPTURE(i);
|
||||
|
||||
// create JSON value with integer number
|
||||
json j = i;
|
||||
|
||||
// check type
|
||||
CHECK(j.is_number_integer());
|
||||
|
||||
// create expected byte vector
|
||||
std::vector<uint8_t> expected;
|
||||
expected.push_back(0x20 - 1 - static_cast<uint8_t>(i));
|
||||
|
||||
// compare result + size
|
||||
const auto result = json::to_cbor(j);
|
||||
CHECK(result == expected);
|
||||
CHECK(result.size() == 1);
|
||||
|
||||
int16_t restored = -1 - ((result[1] << 8) + result[2]);
|
||||
CHECK(restored == -9263);
|
||||
// check individual bytes
|
||||
CHECK(static_cast<int8_t>(0x20 - 1 - result[0]) == i);
|
||||
|
||||
// roundtrip
|
||||
CHECK(json::from_cbor(result) == j);
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("0..22")
|
||||
{
|
||||
for (size_t i = 0; i <= 22; ++i)
|
||||
{
|
||||
CAPTURE(i);
|
||||
|
||||
// create JSON value with integer number
|
||||
json j = -1;
|
||||
j.get_ref<json::number_integer_t&>() = static_cast<json::number_integer_t>(i);
|
||||
|
||||
// check type
|
||||
CHECK(j.is_number_integer());
|
||||
|
||||
// create expected byte vector
|
||||
std::vector<uint8_t> expected;
|
||||
expected.push_back(static_cast<uint8_t>(i));
|
||||
|
||||
// compare result + size
|
||||
const auto result = json::to_cbor(j);
|
||||
CHECK(result == expected);
|
||||
CHECK(result.size() == 1);
|
||||
|
||||
// check individual bytes
|
||||
CHECK(result[0] == i);
|
||||
|
||||
// roundtrip
|
||||
CHECK(json::from_cbor(result) == j);
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("23..255")
|
||||
{
|
||||
for (size_t i = 23; i <= 255; ++i)
|
||||
{
|
||||
CAPTURE(i);
|
||||
|
||||
// create JSON value with integer number
|
||||
json j = -1;
|
||||
j.get_ref<json::number_integer_t&>() = static_cast<json::number_integer_t>(i);
|
||||
|
||||
// check type
|
||||
CHECK(j.is_number_integer());
|
||||
|
||||
// create expected byte vector
|
||||
std::vector<uint8_t> expected;
|
||||
expected.push_back(static_cast<uint8_t>(0x18));
|
||||
expected.push_back(static_cast<uint8_t>(i));
|
||||
|
||||
// compare result + size
|
||||
const auto result = json::to_cbor(j);
|
||||
CHECK(result == expected);
|
||||
CHECK(result.size() == 2);
|
||||
|
||||
// check individual bytes
|
||||
CHECK(result[0] == 0x18);
|
||||
CHECK(result[1] == i);
|
||||
|
||||
// roundtrip
|
||||
CHECK(json::from_cbor(result) == j);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
SECTION("-32768..-129 (int 16)")
|
||||
|
|
Loading…
Reference in a new issue