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
|
#include "simdjson.h"
#include "test_ondemand.h"
using namespace simdjson;
namespace unknown_tests {
using namespace std;
bool root_value_type() {
TEST_START();
padded_string json = "NaN"_padded;
ASSERT_TRUE(test_ondemand_doc(json, [&](auto doc_result) {
simdjson::ondemand::json_type type;
ASSERT_SUCCESS( doc_result.type().get(type) );
ASSERT_EQUAL( type, simdjson::ondemand::json_type::unknown );
std::string_view str;
ASSERT_SUCCESS( doc_result.raw_json_token().get(str) );
ASSERT_EQUAL( str, "NaN");
return true;
}));
TEST_SUCCEED();
}
bool object_value_type() {
TEST_START();
padded_string json = "{\"key\": NaN}"_padded;
ASSERT_TRUE(test_ondemand_doc(json, [&](auto doc_result) {
simdjson::ondemand::object object;
ASSERT_SUCCESS( doc_result.get_object().get(object) );
simdjson::ondemand::json_type type;
auto val = object["key"];
ASSERT_SUCCESS( val.type().get(type) );
ASSERT_EQUAL( type, simdjson::ondemand::json_type::unknown );
double num;
ASSERT_EQUAL( val.get(num), simdjson::error_code::INCORRECT_TYPE);
std::string_view str;
ASSERT_SUCCESS( val.raw_json_token().get(str) );
ASSERT_EQUAL( str, "NaN");
return true;
}));
TEST_SUCCEED();
}
#if SIMDJSON_EXCEPTIONS
bool object_value_type_exception() {
TEST_START();
padded_string json = "{\"key\": NaN}"_padded;
simdjson::ondemand::parser parser;
simdjson::ondemand::document doc = parser.iterate(json);
simdjson::ondemand::object object = doc.get_object();
simdjson::ondemand::value val = object["key"];
simdjson::ondemand::json_type type = val.type();
ASSERT_EQUAL( type, simdjson::ondemand::json_type::unknown);
try {
double num = val.get_double();
(void)num;
} catch (const simdjson::simdjson_error& e) {
ASSERT_EQUAL( e.error(), simdjson::error_code::INCORRECT_TYPE);
}
std::string_view str = val.raw_json_token();
ASSERT_EQUAL( str, "NaN");
TEST_SUCCEED();
}
#endif
bool run() {
return
root_value_type() &&
object_value_type() &&
#if SIMDJSON_EXCEPTIONS
object_value_type_exception() &&
#endif
true;
}
} // namespace unknown_tests
int main(int argc, char *argv[]) {
return test_main(argc, argv, unknown_tests::run);
}
|