mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-04 04:33:23 +00:00
Refactor test.cpp (#7487)
* Add timing command to cmakelist * Start to split test.cpp. Move flexbuffers tests * Move monster related tests to own file * Move parser related tests to own file * Move json related tests to own file * Move proto related tests to own file * moved more functions to parser test * moved more functions to parser test2 * move monster extra tests to monster test * move evolution tests to own file * move reflection tests to own file * move util tests to own file * rehomed various tests * move optional scalars test to own file: * rehome more tests * move fuzz tests. Got rid of global test_data_path * fixes for CI failures * add bazel files
This commit is contained in:
167
tests/util_test.cpp
Normal file
167
tests/util_test.cpp
Normal file
@@ -0,0 +1,167 @@
|
||||
#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_12345fox" });
|
||||
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" });
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user