Add a unit test for odd-sized small structs (for #8117) (#8363)

* add an odd sized test

* formatting

---------

Co-authored-by: Derek Bailey <derekbailey@google.com>
This commit is contained in:
nolen777 2024-08-19 21:27:32 -07:00 committed by GitHub
parent 42879f6ea6
commit 8db59321d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 32 additions and 16 deletions

View File

@ -34,15 +34,18 @@ void AlignmentTest() {
// creating 5 structs with 2 bytes each
// 10 bytes in total for Vector data is needed
std::vector<JustSmallStruct> small_vector = {
{ 2, 1 }, { 3, 1 }, { 4, 1 }
};
std::vector<EvenSmallStruct> even_vector = { { 2, 1 }, { 3, 1 }, { 4, 1 } };
std::vector<OddSmallStruct> odd_vector = { { 6, 5, 4 },
{ 9, 8, 7 },
{ 1, 2, 3 } };
// CreateVectorOfStructs is used in the generated CreateSmallStructsDirect()
// method, but we test it directly
Offset<Vector<const JustSmallStruct *>> small_structs_offset =
builder.CreateVectorOfStructs<JustSmallStruct>(small_vector);
Offset<Vector<const EvenSmallStruct *>> even_structs_offset =
builder.CreateVectorOfStructs<EvenSmallStruct>(even_vector);
Offset<Vector<const OddSmallStruct *>> odd_structs_offset =
builder.CreateVectorOfStructs<OddSmallStruct>(odd_vector);
Offset<SmallStructs> small_structs_root =
CreateSmallStructs(builder, small_structs_offset);
CreateSmallStructs(builder, even_structs_offset, odd_structs_offset);
builder.Finish(small_structs_root);
@ -62,13 +65,17 @@ void AlignmentTest() {
auto root_msg =
flatbuffers::GetRoot<SmallStructs>(builder.GetBufferPointer());
TEST_EQ(root_msg->small_structs()->size(), small_vector.size());
for (flatbuffers::uoffset_t i = 0; i < root_msg->small_structs()->size();
TEST_EQ(root_msg->even_structs()->size(), even_vector.size());
for (flatbuffers::uoffset_t i = 0; i < root_msg->even_structs()->size();
++i) {
TEST_EQ(small_vector[i].var_0(),
root_msg->small_structs()->Get(i)->var_0());
TEST_EQ(small_vector[i].var_1(),
root_msg->small_structs()->Get(i)->var_1());
TEST_EQ(even_vector[i].var_0(), root_msg->even_structs()->Get(i)->var_0());
TEST_EQ(even_vector[i].var_1(), root_msg->even_structs()->Get(i)->var_1());
}
TEST_EQ(root_msg->odd_structs()->size(), even_vector.size());
for (flatbuffers::uoffset_t i = 0; i < root_msg->odd_structs()->size(); ++i) {
TEST_EQ(odd_vector[i].var_0(), root_msg->odd_structs()->Get(i)->var_0());
TEST_EQ(odd_vector[i].var_1(), root_msg->odd_structs()->Get(i)->var_1());
}
}

View File

@ -21,15 +21,24 @@ table BadAlignmentRoot {
small: [BadAlignmentSmall];
}
// sizeof(JustSmallStruct) == 2
// alignof(JustSmallStruct) == 1
struct JustSmallStruct {
// sizeof(EvenSmallStruct) == 2
// alignof(EvenSmallStruct) == 1
struct EvenSmallStruct {
var_0: uint8;
var_1: uint8;
}
// sizeof(OddSmallStruct) == 3
// alignof(OddSmallStruct) == 1
struct OddSmallStruct {
var_0: uint8;
var_1: uint8;
var_2: uint8;
}
table SmallStructs {
small_structs: [JustSmallStruct];
even_structs: [EvenSmallStruct];
odd_structs: [OddSmallStruct];
}
root_type SmallStructs;