72 lines
1.8 KiB
C++
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);
|
|
}
|