#include "util_test.h" #include "flatbuffers/util.h" #include "test_assert.h" namespace flatbuffers { namespace tests { namespace { template void NumericUtilsTestInteger(const char* lower, const char* upper) { T x; TEST_EQ(flatbuffers::StringToNumber("1q", &x), false); TEST_EQ(x, 0); TEST_EQ(flatbuffers::StringToNumber(upper, &x), false); TEST_EQ(x, flatbuffers::numeric_limits::max()); TEST_EQ(flatbuffers::StringToNumber(lower, &x), false); auto expval = flatbuffers::is_unsigned::value ? flatbuffers::numeric_limits::max() : flatbuffers::numeric_limits::lowest(); TEST_EQ(x, expval); } template void NumericUtilsTestFloat(const char* lower, const char* upper) { T f; TEST_EQ(flatbuffers::StringToNumber("", &f), false); TEST_EQ(flatbuffers::StringToNumber("1q", &f), false); TEST_EQ(f, 0); TEST_EQ(flatbuffers::StringToNumber(upper, &f), true); TEST_EQ(f, +flatbuffers::numeric_limits::infinity()); TEST_EQ(flatbuffers::StringToNumber(lower, &f), true); TEST_EQ(f, -flatbuffers::numeric_limits::infinity()); } } // namespace void NumericUtilsTest() { NumericUtilsTestInteger("-1", "18446744073709551616"); NumericUtilsTestInteger("-1", "256"); NumericUtilsTestInteger("-9223372036854775809", "9223372036854775808"); NumericUtilsTestInteger("-129", "128"); NumericUtilsTestFloat("-3.4029e+38", "+3.4029e+38"); NumericUtilsTestFloat("-1.7977e+308", "+1.7977e+308"); } void IsAsciiUtilsTest() { char c = -128; for (int cnt = 0; cnt < 256; cnt++) { auto alpha = (('a' <= c) && (c <= 'z')) || (('A' <= c) && (c <= 'Z')); auto dec = (('0' <= c) && (c <= '9')); auto hex = (('a' <= c) && (c <= 'f')) || (('A' <= c) && (c <= 'F')); TEST_EQ(flatbuffers::is_alpha(c), alpha); TEST_EQ(flatbuffers::is_alnum(c), alpha || dec); TEST_EQ(flatbuffers::is_digit(c), dec); TEST_EQ(flatbuffers::is_xdigit(c), dec || hex); c += 1; } } void UtilConvertCase() { { struct TestCase { std::string input; flatbuffers::Case output_case; std::string expected_output; }; std::vector cases; // Tests for the common cases cases.push_back({"the_quick_brown_fox", flatbuffers::Case::kUpperCamel, "TheQuickBrownFox"}); cases.push_back({"the_quick_brown_fox", flatbuffers::Case::kLowerCamel, "theQuickBrownFox"}); cases.push_back({"the_quick_brown_fox", flatbuffers::Case::kSnake, "the_quick_brown_fox"}); cases.push_back({"the_quick_brown_fox", flatbuffers::Case::kScreamingSnake, "THE_QUICK_BROWN_FOX"}); cases.push_back({"the_quick_brown_fox", flatbuffers::Case::kAllLower, "the_quick_brown_fox"}); cases.push_back({"the_quick_brown_fox", flatbuffers::Case::kAllUpper, "THE_QUICK_BROWN_FOX"}); cases.push_back({"the_quick_brown_fox", flatbuffers::Case::kUnknown, "the_quick_brown_fox"}); cases.push_back({"the_quick_brown_fox", flatbuffers::Case::kKeep, "the_quick_brown_fox"}); cases.push_back({"the_quick_brown_fox", flatbuffers::Case::kSnake2, "the_quick_brown_fox"}); // Tests for some snake_cases where the _ is oddly placed or // missing. cases.push_back({"single", flatbuffers::Case::kUpperCamel, "Single"}); cases.push_back({"Single", flatbuffers::Case::kUpperCamel, "Single"}); cases.push_back({"_leading", flatbuffers::Case::kUpperCamel, "_Leading"}); cases.push_back({"trailing_", flatbuffers::Case::kUpperCamel, "Trailing_"}); cases.push_back({"double__underscore", flatbuffers::Case::kUpperCamel, "Double_underscore"}); cases.push_back({"single", flatbuffers::Case::kLowerCamel, "single"}); cases.push_back({"Single", flatbuffers::Case::kLowerCamel, "single"}); cases.push_back({"_leading", flatbuffers::Case::kLowerCamel, "_Leading"}); cases.push_back({"trailing_", flatbuffers::Case::kLowerCamel, "trailing_"}); cases.push_back({"double__underscore", flatbuffers::Case::kLowerCamel, "double_underscore"}); // Tests for some output snake_cases cases.push_back({"single", flatbuffers::Case::kSnake, "single"}); cases.push_back({"single", flatbuffers::Case::kScreamingSnake, "SINGLE"}); cases.push_back( {"_leading", flatbuffers::Case::kScreamingSnake, "_LEADING"}); cases.push_back( {"trailing_", flatbuffers::Case::kScreamingSnake, "TRAILING_"}); cases.push_back({"double__underscore", flatbuffers::Case::kScreamingSnake, "DOUBLE__UNDERSCORE"}); for (auto& test_case : cases) { TEST_EQ(test_case.expected_output, flatbuffers::ConvertCase(test_case.input, test_case.output_case)); } } // Tests for the non snake_case inputs. { struct TestCase { flatbuffers::Case input_case; std::string input; flatbuffers::Case output_case; std::string expected_output; }; std::vector cases; cases.push_back({flatbuffers::Case::kUpperCamel, "TheQuickBrownFox", flatbuffers::Case::kSnake, "the_quick_brown_fox"}); cases.push_back({flatbuffers::Case::kLowerCamel, "theQuickBrownFox", flatbuffers::Case::kSnake, "the_quick_brown_fox"}); cases.push_back({flatbuffers::Case::kSnake, "the_quick_brown_fox", flatbuffers::Case::kSnake, "the_quick_brown_fox"}); cases.push_back({flatbuffers::Case::kScreamingSnake, "THE_QUICK_BROWN_FOX", flatbuffers::Case::kSnake, "THE_QUICK_BROWN_FOX"}); cases.push_back({flatbuffers::Case::kAllUpper, "SINGLE", flatbuffers::Case::kSnake, "SINGLE"}); cases.push_back({flatbuffers::Case::kAllLower, "single", flatbuffers::Case::kSnake, "single"}); cases.push_back({flatbuffers::Case::kUpperCamel, "ABCtest", flatbuffers::Case::kSnake, "abctest"}); cases.push_back({flatbuffers::Case::kUpperCamel, "tHe_qUiCk_BrOwN_fOx", flatbuffers::Case::kKeep, "tHe_qUiCk_BrOwN_fOx"}); cases.push_back({flatbuffers::Case::kLowerCamel, "theQuick12345Fox", flatbuffers::Case::kSnake, "the_quick_12345_fox"}); cases.push_back({flatbuffers::Case::kLowerCamel, "a12b34c45", flatbuffers::Case::kSnake, "a_12b_34c_45"}); cases.push_back({flatbuffers::Case::kLowerCamel, "a12b34c45", flatbuffers::Case::kSnake2, "a12_b34_c45"}); cases.push_back({flatbuffers::Case::kUpperCamel, "Int32Stamped", flatbuffers::Case::kSnake, "int_32_stamped"}); cases.push_back({flatbuffers::Case::kUpperCamel, "101DogsTest", flatbuffers::Case::kSnake, "101_dogs_test"}); cases.push_back({flatbuffers::Case::kUpperCamel, "Int32Stamped", flatbuffers::Case::kScreamingSnake, "INT_32_STAMPED"}); cases.push_back({flatbuffers::Case::kUpperCamel, "101DogsTest", flatbuffers::Case::kScreamingSnake, "101_DOGS_TEST"}); for (auto& test_case : cases) { TEST_EQ(test_case.expected_output, flatbuffers::ConvertCase(test_case.input, test_case.output_case, test_case.input_case)); } } } } // namespace tests } // namespace flatbuffers