summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorWen Sun <30698014+sunwen18@users.noreply.github.com>2022-12-06 14:02:16 -0800
committerGitHub <noreply@github.com>2022-12-06 14:02:16 -0800
commitb5ebd3fd783e4d2f12820aff5a2b12a976c7048c (patch)
tree3a92ba6975942d8673623f7991e9677d1969f2e8 /tests
parent11394575bca7060ac49b3bdf803c343a34a00637 (diff)
downloadflatbuffers-b5ebd3fd783e4d2f12820aff5a2b12a976c7048c.tar.gz
flatbuffers-b5ebd3fd783e4d2f12820aff5a2b12a976c7048c.tar.bz2
flatbuffers-b5ebd3fd783e4d2f12820aff5a2b12a976c7048c.zip
[C++] Update to address comparator failure in big endian (#7681)
* update unit test and generated file to test is extra endianswap can help resolve issue * remove EndianScalar wrapper from Get method * remove endianscalar wrapper * update * update * use Array instead * clang format * address error * clang * update * manually generate * Move Nim to completed language * Add swift link * address comments * update unit test * address comment * address comment * regenerate file * use auto instead of size_t * use uint32_t instead * update * format * delete extra whitespace Co-authored-by: Wen Sun <sunwen@google.com> Co-authored-by: Derek Bailey <derekbailey@google.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/key_field/key_field_sample_generated.h26
-rw-r--r--tests/key_field_test.cpp31
2 files changed, 35 insertions, 22 deletions
diff --git a/tests/key_field/key_field_sample_generated.h b/tests/key_field/key_field_sample_generated.h
index 1bcb8976..bcbd2d22 100644
--- a/tests/key_field/key_field_sample_generated.h
+++ b/tests/key_field/key_field_sample_generated.h
@@ -67,12 +67,13 @@ FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(1) Baz FLATBUFFERS_FINAL_CLASS {
bool KeyCompareLessThan(const Baz * const o) const {
return KeyCompareWithValue(o->a()) < 0;
}
- int KeyCompareWithValue(const flatbuffers::Array<uint8_t, 4> *_a) const {
- for (auto i = 0; i < a()->size(); i++) {
- const auto a_l = a_[i];
- const auto a_r = _a->Get(i);
- if(a_l != a_r)
- return static_cast<int>(a_l > a_r) - static_cast<int>(a_l < a_r);
+ int KeyCompareWithValue(const flatbuffers::Array<uint8_t, 4> *_a) const {
+ const flatbuffers::Array<uint8_t, 4> *curr_a = a();
+ for (flatbuffers::uoffset_t i = 0; i < curr_a->size(); i++) {
+ const auto lhs = curr_a->Get(i);
+ const auto rhs = _a->Get(i);
+ if(lhs != rhs)
+ return static_cast<int>(lhs > rhs) - static_cast<int>(lhs < rhs);
}
return 0;
}
@@ -139,12 +140,13 @@ FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) Bar FLATBUFFERS_FINAL_CLASS {
bool KeyCompareLessThan(const Bar * const o) const {
return KeyCompareWithValue(o->a()) < 0;
}
- int KeyCompareWithValue(const flatbuffers::Array<float, 3> *_a) const {
- for (auto i = 0; i < a()->size(); i++) {
- const auto a_l = a_[i];
- const auto a_r = _a->Get(i);
- if(a_l != a_r)
- return static_cast<int>(a_l > a_r) - static_cast<int>(a_l < a_r);
+ int KeyCompareWithValue(const flatbuffers::Array<float, 3> *_a) const {
+ const flatbuffers::Array<float, 3> *curr_a = a();
+ for (flatbuffers::uoffset_t i = 0; i < curr_a->size(); i++) {
+ const auto lhs = curr_a->Get(i);
+ const auto rhs = _a->Get(i);
+ if(lhs != rhs)
+ return static_cast<int>(lhs > rhs) - static_cast<int>(lhs < rhs);
}
return 0;
}
diff --git a/tests/key_field_test.cpp b/tests/key_field_test.cpp
index b2bf0af9..da762d20 100644
--- a/tests/key_field_test.cpp
+++ b/tests/key_field_test.cpp
@@ -24,7 +24,9 @@ void FixedSizedScalarKeyInStructTest() {
bazs.push_back(Baz(flatbuffers::make_span(test_array3), 2));
bazs.push_back(Baz(flatbuffers::make_span(test_array4), 3));
auto baz_vec = fbb.CreateVectorOfSortedStructs(&bazs);
+
auto test_string = fbb.CreateString("TEST");
+
float test_float_array1[3] = { 1.5, 2.5, 0 };
float test_float_array2[3] = { 7.5, 2.5, 0 };
float test_float_array3[3] = { 1.5, 2.5, -1 };
@@ -36,6 +38,7 @@ void FixedSizedScalarKeyInStructTest() {
bars.push_back(Bar(flatbuffers::make_span(test_float_array4), 1));
auto bar_vec = fbb.CreateVectorOfSortedStructs(&bars);
+
auto t = CreateFooTable(fbb, 1, 2, test_string, baz_vec, bar_vec);
fbb.Finish(t);
@@ -45,26 +48,34 @@ void FixedSizedScalarKeyInStructTest() {
auto sorted_baz_vec = foo_table->d();
TEST_EQ(sorted_baz_vec->Get(0)->b(), 1);
TEST_EQ(sorted_baz_vec->Get(3)->b(), 4);
+
+ uint8_t test_array[4];
+ auto* key_array = &flatbuffers::CastToArray(test_array);
+ key_array->CopyFromSpan(flatbuffers::make_span(test_array1));
+
+
TEST_NOTNULL(
- sorted_baz_vec->LookupByKey(&flatbuffers::CastToArray(test_array1)));
+ sorted_baz_vec->LookupByKey(key_array));
TEST_EQ(
- sorted_baz_vec->LookupByKey(&flatbuffers::CastToArray(test_array1))->b(),
+ sorted_baz_vec->LookupByKey(key_array)->b(),
4);
uint8_t array_int[4] = { 7, 2, 3, 0 };
- TEST_EQ(sorted_baz_vec->LookupByKey(&flatbuffers::CastToArray(array_int)),
+ key_array->CopyFromSpan(flatbuffers::make_span(array_int));
+ TEST_EQ(sorted_baz_vec->LookupByKey(key_array),
static_cast<const Baz *>(nullptr));
auto sorted_bar_vec = foo_table->e();
TEST_EQ(sorted_bar_vec->Get(0)->b(), 1);
TEST_EQ(sorted_bar_vec->Get(3)->b(), 4);
- TEST_NOTNULL(sorted_bar_vec->LookupByKey(
- &flatbuffers::CastToArray(test_float_array1)));
- TEST_EQ(
- sorted_bar_vec->LookupByKey(&flatbuffers::CastToArray(test_float_array1))
- ->b(),
- 3);
+
+ float test_float_array[3];
+ auto* key_float_array = &flatbuffers::CastToArray(test_float_array);
+ key_float_array->CopyFromSpan(flatbuffers::make_span(test_float_array1));
+ TEST_NOTNULL(sorted_bar_vec->LookupByKey(key_float_array));
+ TEST_EQ(sorted_bar_vec->LookupByKey(key_float_array)->b(), 3);
float array_float[3] = { -1, -2, -3 };
- TEST_EQ(sorted_bar_vec->LookupByKey(&flatbuffers::CastToArray(array_float)),
+ key_float_array->CopyFromSpan(flatbuffers::make_span(array_float));
+ TEST_EQ(sorted_bar_vec->LookupByKey(key_float_array),
static_cast<const Bar *>(nullptr));
}