...

Text file src/github.com/google/flatbuffers/tests/util_test.cpp

Documentation: github.com/google/flatbuffers/tests

     1#include "util_test.h"
     2
     3#include "flatbuffers/util.h"
     4#include "test_assert.h"
     5
     6namespace flatbuffers {
     7namespace tests {
     8namespace {
     9
    10template<typename T>
    11void NumericUtilsTestInteger(const char *lower, const char *upper) {
    12  T x;
    13  TEST_EQ(flatbuffers::StringToNumber("1q", &x), false);
    14  TEST_EQ(x, 0);
    15  TEST_EQ(flatbuffers::StringToNumber(upper, &x), false);
    16  TEST_EQ(x, flatbuffers::numeric_limits<T>::max());
    17  TEST_EQ(flatbuffers::StringToNumber(lower, &x), false);
    18  auto expval = flatbuffers::is_unsigned<T>::value
    19                    ? flatbuffers::numeric_limits<T>::max()
    20                    : flatbuffers::numeric_limits<T>::lowest();
    21  TEST_EQ(x, expval);
    22}
    23
    24template<typename T>
    25void NumericUtilsTestFloat(const char *lower, const char *upper) {
    26  T f;
    27  TEST_EQ(flatbuffers::StringToNumber("", &f), false);
    28  TEST_EQ(flatbuffers::StringToNumber("1q", &f), false);
    29  TEST_EQ(f, 0);
    30  TEST_EQ(flatbuffers::StringToNumber(upper, &f), true);
    31  TEST_EQ(f, +flatbuffers::numeric_limits<T>::infinity());
    32  TEST_EQ(flatbuffers::StringToNumber(lower, &f), true);
    33  TEST_EQ(f, -flatbuffers::numeric_limits<T>::infinity());
    34}
    35}  // namespace
    36
    37void NumericUtilsTest() {
    38  NumericUtilsTestInteger<uint64_t>("-1", "18446744073709551616");
    39  NumericUtilsTestInteger<uint8_t>("-1", "256");
    40  NumericUtilsTestInteger<int64_t>("-9223372036854775809",
    41                                   "9223372036854775808");
    42  NumericUtilsTestInteger<int8_t>("-129", "128");
    43  NumericUtilsTestFloat<float>("-3.4029e+38", "+3.4029e+38");
    44  NumericUtilsTestFloat<float>("-1.7977e+308", "+1.7977e+308");
    45}
    46
    47void IsAsciiUtilsTest() {
    48  char c = -128;
    49  for (int cnt = 0; cnt < 256; cnt++) {
    50    auto alpha = (('a' <= c) && (c <= 'z')) || (('A' <= c) && (c <= 'Z'));
    51    auto dec = (('0' <= c) && (c <= '9'));
    52    auto hex = (('a' <= c) && (c <= 'f')) || (('A' <= c) && (c <= 'F'));
    53    TEST_EQ(flatbuffers::is_alpha(c), alpha);
    54    TEST_EQ(flatbuffers::is_alnum(c), alpha || dec);
    55    TEST_EQ(flatbuffers::is_digit(c), dec);
    56    TEST_EQ(flatbuffers::is_xdigit(c), dec || hex);
    57    c += 1;
    58  }
    59}
    60
    61void UtilConvertCase() {
    62  {
    63    struct TestCase {
    64      std::string input;
    65      flatbuffers::Case output_case;
    66      std::string expected_output;
    67    };
    68
    69    std::vector<TestCase> cases;
    70
    71    // Tests for the common cases
    72    cases.push_back({ "the_quick_brown_fox", flatbuffers::Case::kUpperCamel,
    73                      "TheQuickBrownFox" });
    74    cases.push_back({ "the_quick_brown_fox", flatbuffers::Case::kLowerCamel,
    75                      "theQuickBrownFox" });
    76    cases.push_back({ "the_quick_brown_fox", flatbuffers::Case::kSnake,
    77                      "the_quick_brown_fox" });
    78    cases.push_back({ "the_quick_brown_fox", flatbuffers::Case::kScreamingSnake,
    79                      "THE_QUICK_BROWN_FOX" });
    80    cases.push_back({ "the_quick_brown_fox", flatbuffers::Case::kAllLower,
    81                      "the_quick_brown_fox" });
    82    cases.push_back({ "the_quick_brown_fox", flatbuffers::Case::kAllUpper,
    83                      "THE_QUICK_BROWN_FOX" });
    84    cases.push_back({ "the_quick_brown_fox", flatbuffers::Case::kUnknown,
    85                      "the_quick_brown_fox" });
    86    cases.push_back({ "the_quick_brown_fox", flatbuffers::Case::kKeep,
    87                      "the_quick_brown_fox" });
    88    cases.push_back({ "the_quick_brown_fox", flatbuffers::Case::kSnake2,
    89                      "the_quick_brown_fox" });
    90
    91    // Tests for some snake_cases where the _ is oddly placed or
    92    // missing.
    93    cases.push_back({ "single", flatbuffers::Case::kUpperCamel, "Single" });
    94    cases.push_back({ "Single", flatbuffers::Case::kUpperCamel, "Single" });
    95    cases.push_back({ "_leading", flatbuffers::Case::kUpperCamel, "_Leading" });
    96    cases.push_back(
    97        { "trailing_", flatbuffers::Case::kUpperCamel, "Trailing_" });
    98    cases.push_back({ "double__underscore", flatbuffers::Case::kUpperCamel,
    99                      "Double_underscore" });
   100    cases.push_back({ "single", flatbuffers::Case::kLowerCamel, "single" });
   101    cases.push_back({ "Single", flatbuffers::Case::kLowerCamel, "single" });
   102    cases.push_back({ "_leading", flatbuffers::Case::kLowerCamel, "_Leading" });
   103    cases.push_back(
   104        { "trailing_", flatbuffers::Case::kLowerCamel, "trailing_" });
   105    cases.push_back({ "double__underscore", flatbuffers::Case::kLowerCamel,
   106                      "double_underscore" });
   107
   108    // Tests for some output snake_cases
   109    cases.push_back({ "single", flatbuffers::Case::kSnake, "single" });
   110    cases.push_back({ "single", flatbuffers::Case::kScreamingSnake, "SINGLE" });
   111    cases.push_back(
   112        { "_leading", flatbuffers::Case::kScreamingSnake, "_LEADING" });
   113    cases.push_back(
   114        { "trailing_", flatbuffers::Case::kScreamingSnake, "TRAILING_" });
   115    cases.push_back({ "double__underscore", flatbuffers::Case::kScreamingSnake,
   116                      "DOUBLE__UNDERSCORE" });
   117
   118    for (auto &test_case : cases) {
   119      TEST_EQ(test_case.expected_output,
   120              flatbuffers::ConvertCase(test_case.input, test_case.output_case));
   121    }
   122  }
   123
   124  // Tests for the non snake_case inputs.
   125  {
   126    struct TestCase {
   127      flatbuffers::Case input_case;
   128      std::string input;
   129      flatbuffers::Case output_case;
   130      std::string expected_output;
   131    };
   132
   133    std::vector<TestCase> cases;
   134
   135    cases.push_back({ flatbuffers::Case::kUpperCamel, "TheQuickBrownFox",
   136                      flatbuffers::Case::kSnake, "the_quick_brown_fox" });
   137    cases.push_back({ flatbuffers::Case::kLowerCamel, "theQuickBrownFox",
   138                      flatbuffers::Case::kSnake, "the_quick_brown_fox" });
   139    cases.push_back({ flatbuffers::Case::kSnake, "the_quick_brown_fox",
   140                      flatbuffers::Case::kSnake, "the_quick_brown_fox" });
   141    cases.push_back({ flatbuffers::Case::kScreamingSnake, "THE_QUICK_BROWN_FOX",
   142                      flatbuffers::Case::kSnake, "THE_QUICK_BROWN_FOX" });
   143    cases.push_back({ flatbuffers::Case::kAllUpper, "SINGLE",
   144                      flatbuffers::Case::kSnake, "SINGLE" });
   145    cases.push_back({ flatbuffers::Case::kAllLower, "single",
   146                      flatbuffers::Case::kSnake, "single" });
   147    cases.push_back({ flatbuffers::Case::kUpperCamel, "ABCtest",
   148                      flatbuffers::Case::kSnake, "abctest" });
   149    cases.push_back({ flatbuffers::Case::kUpperCamel, "tHe_qUiCk_BrOwN_fOx",
   150                      flatbuffers::Case::kKeep, "tHe_qUiCk_BrOwN_fOx" });
   151    cases.push_back({ flatbuffers::Case::kLowerCamel, "theQuick12345Fox",
   152                      flatbuffers::Case::kSnake, "the_quick_12345_fox" });
   153    cases.push_back({ flatbuffers::Case::kLowerCamel, "a12b34c45",
   154                      flatbuffers::Case::kSnake, "a_12b_34c_45" });
   155    cases.push_back({ flatbuffers::Case::kLowerCamel, "a12b34c45",
   156                      flatbuffers::Case::kSnake2, "a12_b34_c45" });
   157    cases.push_back({ flatbuffers::Case::kUpperCamel, "Int32Stamped",
   158                      flatbuffers::Case::kSnake, "int_32_stamped" });
   159    cases.push_back({ flatbuffers::Case::kUpperCamel, "101DogsTest",
   160                      flatbuffers::Case::kSnake, "101_dogs_test" });
   161    cases.push_back({ flatbuffers::Case::kUpperCamel, "Int32Stamped",
   162                      flatbuffers::Case::kScreamingSnake, "INT_32_STAMPED" });
   163    cases.push_back({ flatbuffers::Case::kUpperCamel, "101DogsTest",
   164                      flatbuffers::Case::kScreamingSnake, "101_DOGS_TEST" });
   165
   166    for (auto &test_case : cases) {
   167      TEST_EQ(test_case.expected_output,
   168              flatbuffers::ConvertCase(test_case.input, test_case.output_case,
   169                                       test_case.input_case));
   170    }
   171  }
   172}
   173
   174}  // namespace tests
   175}  // namespace flatbuffers

View as plain text