#include "simdjson.h" #include "test_builder.h" #include using namespace simdjson; namespace builder_tests { using namespace std; #if SIMDJSON_EXCEPTIONS bool string_convertion_except() { TEST_START(); simdjson::ondemand::parser p; simdjson::builder::string_builder sb; sb.append('a'); std::string r(sb); ASSERT_EQUAL(r, "a"); TEST_SUCCEED(); } #endif bool append_char() { TEST_START(); simdjson::builder::string_builder sb; sb.append('a'); ASSERT_EQUAL(sb.size(), 1); std::string_view p; auto result = sb.view().get(p); ASSERT_EQUAL(result, SUCCESS); ASSERT_EQUAL(p, "a"); TEST_SUCCEED(); } bool append_integer() { TEST_START(); simdjson::builder::string_builder sb; sb.append(42); ASSERT_EQUAL(sb.size(), 2); std::string_view p; auto result = sb.view().get(p); ASSERT_EQUAL(result, SUCCESS); ASSERT_EQUAL(p, "42"); TEST_SUCCEED(); } bool append_float() { TEST_START(); simdjson::builder::string_builder sb; sb.append(1.1); ASSERT_EQUAL(sb.size(), 3); std::string_view p; auto result = sb.view().get(p); ASSERT_EQUAL(result, SUCCESS); ASSERT_EQUAL(p, "1.1"); TEST_SUCCEED(); } bool append_null() { TEST_START(); simdjson::builder::string_builder sb; sb.append_null(); ASSERT_EQUAL(sb.size(), 4); std::string_view p; auto result = sb.view().get(p); ASSERT_EQUAL(result, SUCCESS); ASSERT_EQUAL(p, "null"); TEST_SUCCEED(); } bool clear() { TEST_START(); simdjson::builder::string_builder sb; sb.append('a'); sb.clear(); ASSERT_EQUAL(sb.size(), 0); TEST_SUCCEED(); } bool escape_and_append() { TEST_START(); simdjson::builder::string_builder sb; sb.escape_and_append("Hello, \"world\"!"); std::string_view p; auto result = sb.view().get(p); ASSERT_EQUAL(result, SUCCESS); ASSERT_EQUAL(p, "Hello, \"world\"!"); TEST_SUCCEED(); } bool escape_and_append_with_quotes() { TEST_START(); simdjson::builder::string_builder sb; sb.escape_and_append_with_quotes("Hello, \"world\"!"); std::string_view p; auto result = sb.view().get(p); ASSERT_EQUAL(result, SUCCESS); ASSERT_EQUAL(p, "\"Hello, \\\"world\\\"!\""); TEST_SUCCEED(); } bool append_raw() { TEST_START(); simdjson::builder::string_builder sb; sb.append_raw("Test"); std::string_view p; auto result = sb.view().get(p); ASSERT_EQUAL(result, SUCCESS); ASSERT_EQUAL(p, "Test"); TEST_SUCCEED(); } bool raw_with_length() { TEST_START(); simdjson::builder::string_builder sb; sb.append_raw("Test String", 4); std::string_view p; auto result = sb.view().get(p); ASSERT_EQUAL(result, SUCCESS); ASSERT_EQUAL(p, "Test"); TEST_SUCCEED(); } bool string_convertion() { TEST_START(); simdjson::builder::string_builder sb; sb.append('a'); std::string_view p; auto result = sb.view().get(p); ASSERT_EQUAL(result, SUCCESS); ASSERT_EQUAL(p, "a"); TEST_SUCCEED(); } bool unicode_validation() { TEST_START(); simdjson::builder::string_builder sb; sb.append('a'); ASSERT_TRUE(sb.validate_unicode()); TEST_SUCCEED(); } bool buffer_growth() { TEST_START(); simdjson::builder::string_builder sb; for(int i = 0; i < 3; ++i) { sb.append('a'); } ASSERT_EQUAL(sb.size(), 3); TEST_SUCCEED(); } bool run() { return #if SIMDJSON_EXCEPTIONS string_convertion_except() && #endif append_char() && append_integer() && append_float() && append_null() && clear() && escape_and_append() && escape_and_append_with_quotes() && append_raw() && raw_with_length() && string_convertion() && buffer_growth() && unicode_validation() && true; } } // namespace twitter_tests int main(int argc, char *argv[]) { return test_main(argc, argv, builder_tests::run); }