mirror of
https://github.com/simdjson/simdjson
synced 2026-06-08 17:27:07 +00:00
179 lines
4.5 KiB
C++
179 lines
4.5 KiB
C++
#include "simdjson.h"
|
|
#include "test_builder.h"
|
|
#include <string_view>
|
|
|
|
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);
|
|
}
|