...

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

Documentation: github.com/google/flatbuffers/tests

     1#include "key_field_test.h"
     2
     3#include <iostream>
     4
     5#include "flatbuffers/flatbuffers.h"
     6#include "flatbuffers/idl.h"
     7#include "key_field/key_field_sample_generated.h"
     8#include "test_assert.h"
     9
    10namespace flatbuffers {
    11namespace tests {
    12
    13using namespace keyfield::sample;
    14
    15void FixedSizedScalarKeyInStructTest() {
    16  flatbuffers::FlatBufferBuilder fbb;
    17  std::vector<Baz> bazs;
    18  uint8_t test_array1[4] = { 8, 2, 3, 0 };
    19  uint8_t test_array2[4] = { 1, 2, 3, 4 };
    20  uint8_t test_array3[4] = { 2, 2, 3, 4 };
    21  uint8_t test_array4[4] = { 3, 2, 3, 4 };
    22  bazs.push_back(Baz(flatbuffers::make_span(test_array1), 4));
    23  bazs.push_back(Baz(flatbuffers::make_span(test_array2), 1));
    24  bazs.push_back(Baz(flatbuffers::make_span(test_array3), 2));
    25  bazs.push_back(Baz(flatbuffers::make_span(test_array4), 3));
    26  auto baz_vec = fbb.CreateVectorOfSortedStructs(&bazs);
    27
    28  auto test_string = fbb.CreateString("TEST");
    29
    30  float test_float_array1[3] = { 1.5, 2.5, 0 };
    31  float test_float_array2[3] = { 7.5, 2.5, 0 };
    32  float test_float_array3[3] = { 1.5, 2.5, -1 };
    33  float test_float_array4[3] = { -1.5, 2.5, 0 };
    34  std::vector<Bar> bars;
    35  bars.push_back(Bar(flatbuffers::make_span(test_float_array1), 3));
    36  bars.push_back(Bar(flatbuffers::make_span(test_float_array2), 4));
    37  bars.push_back(Bar(flatbuffers::make_span(test_float_array3), 2));
    38  bars.push_back(Bar(flatbuffers::make_span(test_float_array4), 1));
    39  auto bar_vec = fbb.CreateVectorOfSortedStructs(&bars);
    40
    41  auto t = CreateFooTable(fbb, 1, 2, test_string, baz_vec, bar_vec);
    42
    43  fbb.Finish(t);
    44
    45  uint8_t *buf = fbb.GetBufferPointer();
    46  auto foo_table = GetFooTable(buf);
    47
    48  auto sorted_baz_vec = foo_table->d();
    49  TEST_EQ(sorted_baz_vec->Get(0)->b(), 1);
    50  TEST_EQ(sorted_baz_vec->Get(3)->b(), 4);
    51
    52  uint8_t test_array[4];
    53  auto *key_array = &flatbuffers::CastToArray(test_array);
    54  key_array->CopyFromSpan(flatbuffers::make_span(test_array1));
    55
    56  TEST_NOTNULL(sorted_baz_vec->LookupByKey(key_array));
    57  TEST_EQ(sorted_baz_vec->LookupByKey(key_array)->b(), 4);
    58  uint8_t array_int[4] = { 7, 2, 3, 0 };
    59  key_array->CopyFromSpan(flatbuffers::make_span(array_int));
    60  TEST_EQ(sorted_baz_vec->LookupByKey(key_array),
    61          static_cast<const Baz *>(nullptr));
    62
    63  auto sorted_bar_vec = foo_table->e();
    64  TEST_EQ(sorted_bar_vec->Get(0)->b(), 1);
    65  TEST_EQ(sorted_bar_vec->Get(3)->b(), 4);
    66
    67  float test_float_array[3];
    68  auto *key_float_array = &flatbuffers::CastToArray(test_float_array);
    69  key_float_array->CopyFromSpan(flatbuffers::make_span(test_float_array1));
    70  TEST_NOTNULL(sorted_bar_vec->LookupByKey(key_float_array));
    71  TEST_EQ(sorted_bar_vec->LookupByKey(key_float_array)->b(), 3);
    72  float array_float[3] = { -1, -2, -3 };
    73  key_float_array->CopyFromSpan(flatbuffers::make_span(array_float));
    74  TEST_EQ(sorted_bar_vec->LookupByKey(key_float_array),
    75          static_cast<const Bar *>(nullptr));
    76}
    77
    78void StructKeyInStructTest() {
    79  flatbuffers::FlatBufferBuilder fbb;
    80  std::vector<Apple> apples;
    81  float test_float_array1[3] = { 1.5, 2.5, 0 };
    82  float test_float_array2[3] = { 7.5, 2.5, 0 };
    83  float test_float_array3[3] = { 1.5, 2.5, -1 };
    84  apples.push_back(
    85      Apple(2, Color(flatbuffers::make_span(test_float_array1), 3)));
    86  apples.push_back(
    87      Apple(3, Color(flatbuffers::make_span(test_float_array2), 3)));
    88  apples.push_back(
    89      Apple(1, Color(flatbuffers::make_span(test_float_array3), 1)));
    90
    91  auto apples_vec = fbb.CreateVectorOfSortedStructs(&apples);
    92  auto test_string = fbb.CreateString("TEST");
    93
    94  FooTableBuilder foo_builder(fbb);
    95  foo_builder.add_a(1);
    96  foo_builder.add_c(test_string);
    97
    98  foo_builder.add_f(apples_vec);
    99
   100  auto orc = foo_builder.Finish();
   101  fbb.Finish(orc);
   102
   103  uint8_t *buf = fbb.GetBufferPointer();
   104  auto foo_table = GetFooTable(buf);
   105
   106  auto sorted_apple_vec = foo_table->f();
   107  TEST_EQ(sorted_apple_vec->Get(0)->tag(), 1);
   108  TEST_EQ(sorted_apple_vec->Get(1)->tag(), 2);
   109  TEST_EQ(sorted_apple_vec->Get(2)->tag(), 3);
   110  TEST_EQ(sorted_apple_vec
   111              ->LookupByKey(Color(flatbuffers::make_span(test_float_array1), 3))
   112              ->tag(),
   113          2);
   114  TEST_EQ(sorted_apple_vec->LookupByKey(
   115              Color(flatbuffers::make_span(test_float_array1), 0)),
   116          static_cast<const Apple *>(nullptr));
   117}
   118
   119void NestedStructKeyInStructTest() {
   120  flatbuffers::FlatBufferBuilder fbb;
   121  std::vector<Fruit> fruits;
   122  float test_float_array1[3] = { 1.5, 2.5, 0 };
   123  float test_float_array2[3] = { 1.5, 2.5, 0 };
   124  float test_float_array3[3] = { 1.5, 2.5, -1 };
   125
   126  fruits.push_back(
   127      Fruit(Apple(2, Color(flatbuffers::make_span(test_float_array1), 2)), 2));
   128  fruits.push_back(
   129      Fruit(Apple(2, Color(flatbuffers::make_span(test_float_array2), 1)), 1));
   130  fruits.push_back(
   131      Fruit(Apple(2, Color(flatbuffers::make_span(test_float_array3), 3)), 3));
   132
   133  auto test_string = fbb.CreateString("TEST");
   134  auto fruits_vec = fbb.CreateVectorOfSortedStructs(&fruits);
   135
   136  FooTableBuilder foo_builder(fbb);
   137  foo_builder.add_a(1);
   138  foo_builder.add_c(test_string);
   139  foo_builder.add_g(fruits_vec);
   140
   141  auto orc = foo_builder.Finish();
   142  fbb.Finish(orc);
   143  uint8_t *buf = fbb.GetBufferPointer();
   144  auto foo_table = GetFooTable(buf);
   145
   146  auto sorted_fruit_vec = foo_table->g();
   147  TEST_EQ(sorted_fruit_vec->Get(0)->b(), 3);
   148  TEST_EQ(sorted_fruit_vec->Get(1)->b(), 1);
   149  TEST_EQ(sorted_fruit_vec->Get(2)->b(), 2);
   150  TEST_EQ(sorted_fruit_vec
   151              ->LookupByKey(
   152                  Apple(2, Color(flatbuffers::make_span(test_float_array2), 1)))
   153              ->b(),
   154          1);
   155  TEST_EQ(sorted_fruit_vec->LookupByKey(
   156              Apple(1, Color(flatbuffers::make_span(test_float_array2), 1))),
   157          static_cast<const Fruit *>(nullptr));
   158}
   159
   160void FixedSizedStructArrayKeyInStructTest() {
   161  flatbuffers::FlatBufferBuilder fbb;
   162  std::vector<Grain> grains;
   163  uint8_t test_char_array1[3] = { 'u', 's', 'a' };
   164  uint8_t test_char_array2[3] = { 'c', 'h', 'n' };
   165  uint8_t test_char_array3[3] = { 'c', 'h', 'l' };
   166  uint8_t test_char_array4[3] = { 'f', 'r', 'a' };
   167  uint8_t test_char_array5[3] = { 'i', 'n', 'd' };
   168  uint8_t test_char_array6[3] = { 'i', 't', 'a' };
   169
   170  Rice test_rice_array1[3] = {
   171    Rice(flatbuffers::make_span(test_char_array1), 2),
   172    Rice(flatbuffers::make_span(test_char_array2), 1),
   173    Rice(flatbuffers::make_span(test_char_array3), 2)
   174  };
   175  Rice test_rice_array2[3] = {
   176    Rice(flatbuffers::make_span(test_char_array4), 2),
   177    Rice(flatbuffers::make_span(test_char_array5), 1),
   178    Rice(flatbuffers::make_span(test_char_array6), 2)
   179  };
   180  Rice test_rice_array3[3] = {
   181    Rice(flatbuffers::make_span(test_char_array4), 2),
   182    Rice(flatbuffers::make_span(test_char_array6), 1),
   183    Rice(flatbuffers::make_span(test_char_array1), 2)
   184  };
   185
   186  grains.push_back(Grain(flatbuffers::make_span(test_rice_array1), 3));
   187  grains.push_back(Grain(flatbuffers::make_span(test_rice_array2), 1));
   188  grains.push_back(Grain(flatbuffers::make_span(test_rice_array3), 2));
   189
   190  auto test_string = fbb.CreateString("TEST");
   191  auto grains_vec = fbb.CreateVectorOfSortedStructs(&grains);
   192  FooTableBuilder foo_builder(fbb);
   193  foo_builder.add_a(1);
   194  foo_builder.add_c(test_string);
   195  foo_builder.add_h(grains_vec);
   196
   197  auto orc = foo_builder.Finish();
   198  fbb.Finish(orc);
   199  uint8_t *buf = fbb.GetBufferPointer();
   200  auto foo_table = GetFooTable(buf);
   201
   202  auto sorted_grain_vec = foo_table->h();
   203  TEST_EQ(sorted_grain_vec->Get(0)->tag(), 1);
   204  TEST_EQ(sorted_grain_vec->Get(1)->tag(), 2);
   205  TEST_EQ(sorted_grain_vec->Get(2)->tag(), 3);
   206  TEST_EQ(
   207      sorted_grain_vec->LookupByKey(&flatbuffers::CastToArray(test_rice_array1))
   208          ->tag(),
   209      3);
   210  Rice test_rice_array[3] = { Rice(flatbuffers::make_span(test_char_array3), 2),
   211                              Rice(flatbuffers::make_span(test_char_array2), 1),
   212                              Rice(flatbuffers::make_span(test_char_array1),
   213                                   2) };
   214  TEST_EQ(
   215      sorted_grain_vec->LookupByKey(&flatbuffers::CastToArray(test_rice_array)),
   216      static_cast<const Grain *>(nullptr));
   217  TEST_EQ(
   218      sorted_grain_vec->LookupByKey(&flatbuffers::CastToArray(test_rice_array1))
   219          ->tag(),
   220      3);
   221}
   222
   223}  // namespace tests
   224}  // namespace flatbuffers

View as plain text