176 lines
7.5 KiB
C++
176 lines
7.5 KiB
C++
#include "util_test.h"
|
|
|
|
#include "flatbuffers/util.h"
|
|
#include "test_assert.h"
|
|
|
|
namespace flatbuffers {
|
|
namespace tests {
|
|
namespace {
|
|
|
|
template<typename T>
|
|
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<T>::max());
|
|
TEST_EQ(flatbuffers::StringToNumber(lower, &x), false);
|
|
auto expval = flatbuffers::is_unsigned<T>::value
|
|
? flatbuffers::numeric_limits<T>::max()
|
|
: flatbuffers::numeric_limits<T>::lowest();
|
|
TEST_EQ(x, expval);
|
|
}
|
|
|
|
template<typename T>
|
|
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<T>::infinity());
|
|
TEST_EQ(flatbuffers::StringToNumber(lower, &f), true);
|
|
TEST_EQ(f, -flatbuffers::numeric_limits<T>::infinity());
|
|
}
|
|
} // namespace
|
|
|
|
void NumericUtilsTest() {
|
|
NumericUtilsTestInteger<uint64_t>("-1", "18446744073709551616");
|
|
NumericUtilsTestInteger<uint8_t>("-1", "256");
|
|
NumericUtilsTestInteger<int64_t>("-9223372036854775809",
|
|
"9223372036854775808");
|
|
NumericUtilsTestInteger<int8_t>("-129", "128");
|
|
NumericUtilsTestFloat<float>("-3.4029e+38", "+3.4029e+38");
|
|
NumericUtilsTestFloat<float>("-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<TestCase> 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<TestCase> 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
|