#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