diff options
author | Wen Sun <30698014+sunwen18@users.noreply.github.com> | 2022-12-06 14:02:16 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-06 14:02:16 -0800 |
commit | b5ebd3fd783e4d2f12820aff5a2b12a976c7048c (patch) | |
tree | 3a92ba6975942d8673623f7991e9677d1969f2e8 /tests | |
parent | 11394575bca7060ac49b3bdf803c343a34a00637 (diff) | |
download | flatbuffers-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.h | 26 | ||||
-rw-r--r-- | tests/key_field_test.cpp | 31 |
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)); } |