simdjson/tests/ondemand/ondemand_active_tests.cpp

72 lines
1.8 KiB
C++

#include "simdjson.h"
#include "test_ondemand.h"
using namespace simdjson;
namespace active_tests {
#if SIMDJSON_EXCEPTIONS
bool parser_child() {
TEST_START();
ondemand::parser parser;
const padded_string json = R"({ "parent": {"child1": {"name": "John"} , "child2": {"name": "Daniel"}} })"_padded;
auto doc = parser.iterate(json);
ondemand::object parent = doc["parent"];
{
ondemand::object c1 = parent["child1"];
if(std::string_view(c1["name"]) != "John") { return false; }
}
{
ondemand::object c2 = parent["child2"];
if(std::string_view(c2["name"]) != "Daniel") { return false; }
}
return true;
}
bool parser_doc_correct() {
TEST_START();
ondemand::parser parser;
const padded_string json = R"({ "key1": 1, "key2":2, "key3": 3 })"_padded;
auto doc = parser.iterate(json);
ondemand::object root_object = doc.get_object();
int64_t k1 = root_object["key1"];
int64_t k2 = root_object["key2"];
int64_t k3 = root_object["key3"];
return (k1 == 1) && (k2 == 2) && (k3 == 3);
}
bool parser_doc_limits() {
TEST_START();
ondemand::parser parser;
const padded_string json = R"({ "key1": 1, "key2":2, "key3": 3 })"_padded;
auto doc = parser.iterate(json);
int64_t k1 = doc["key1"];
try {
int64_t k2 = doc["key2"];
(void) k2;
} catch (simdjson::simdjson_error &) {
return true; // we expect to fail.
}
(void) k1;
return false;
}
#endif // SIMDJSON_EXCEPTIONS
bool run() {
return
#if SIMDJSON_EXCEPTIONS
parser_child() &&
parser_doc_correct() &&
// parser_doc_limits() && // Failure is dependent on build type here ...
#endif // SIMDJSON_EXCEPTIONS
true;
}
} // namespace active_tests
int main(int argc, char *argv[]) {
return test_main(argc, argv, active_tests::run);
}