Skip to content

Commit 33f438d

Browse files
committed
[C++]: adding nested groups with data test
1 parent b6a75bb commit 33f438d

File tree

1 file changed

+247
-0
lines changed

1 file changed

+247
-0
lines changed

sbe-tool/src/test/cpp/GroupWithDataTest.cpp

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,33 @@ static const int TAG_GROUP_1_IDX_1_LENGTH = sizeof(TAG_GROUP_1_IDX_1);
3434

3535
static const sbe_int64_t TAG_GROUP_2_IDX_0 = -120;
3636
static const sbe_int64_t TAG_GROUP_2_IDX_1 = 120;
37+
static const sbe_int64_t TAG_GROUP_2_IDX_2 = 75;
38+
39+
static const sbe_int64_t TAG_GROUP_2_IDX_3 = 76;
40+
static const sbe_int64_t TAG_GROUP_2_IDX_4 = 77;
41+
static const sbe_int64_t TAG_GROUP_2_IDX_5 = 78;
3742

3843
static const char *VAR_DATA_FIELD_IDX_0 = "neg idx 0";
3944
static const int VAR_DATA_FIELD_IDX_0_LENGTH = 9;
4045
static const char *VAR_DATA_FIELD_IDX_1 = "idx 1 positive";
4146
static const int VAR_DATA_FIELD_IDX_1_LENGTH = 14;
4247

48+
static const int NESTED_ENTRIES_COUNT = 3;
49+
50+
static const char *VAR_DATA_FIELD_NESTED_IDX_0 = "zero";
51+
static const int VAR_DATA_FIELD_NESTED_IDX_0_LENGTH = 4;
52+
static const char *VAR_DATA_FIELD_NESTED_IDX_1 = "one";
53+
static const int VAR_DATA_FIELD_NESTED_IDX_1_LENGTH = 3;
54+
static const char *VAR_DATA_FIELD_NESTED_IDX_2 = "two";
55+
static const int VAR_DATA_FIELD_NESTED_IDX_2_LENGTH = 3;
56+
57+
static const char *VAR_DATA_FIELD_NESTED_IDX_3 = "three";
58+
static const int VAR_DATA_FIELD_NESTED_IDX_3_LENGTH = 5;
59+
static const char *VAR_DATA_FIELD_NESTED_IDX_4 = "four";
60+
static const int VAR_DATA_FIELD_NESTED_IDX_4_LENGTH = 4;
61+
static const char *VAR_DATA_FIELD_NESTED_IDX_5 = "five";
62+
static const int VAR_DATA_FIELD_NESTED_IDX_5_LENGTH = 4;
63+
4364
static const char *VAR_DATA_FIELD_1_IDX_0 = "neg idx 0";
4465
static const int VAR_DATA_FIELD_1_IDX_0_LENGTH = 9;
4566
static const char *VAR_DATA_FIELD_1_IDX_1 = "idx 1 positive";
@@ -52,6 +73,7 @@ static const int VAR_DATA_FIELD_2_IDX_1_LENGTH = 11;
5273

5374
static const int expectedTestMessage1Size = 78;
5475
static const int expectedTestMessage2Size = 107;
76+
static const int expectedTestMessage3Size = 145;
5577
static const int expectedTestMessage4Size = 73;
5678

5779
class GroupWithDataTest : public testing::Test
@@ -106,6 +128,61 @@ class GroupWithDataTest : public testing::Test
106128
return msg2_.size();
107129
}
108130

131+
virtual int encodeTestMessage3(char *buffer, int offset, int bufferLength)
132+
{
133+
msg3_.wrapForEncode(buffer, offset, bufferLength);
134+
135+
msg3_.tag1(TAG_1);
136+
137+
TestMessage3::Entries &entries = msg3_.entriesCount(ENTRIES_COUNT);
138+
139+
entries.next()
140+
.putTagGroup1(TAG_GROUP_1_IDX_0);
141+
142+
TestMessage3::Entries::NestedEntries &nestedEntries0 = entries.nestedEntriesCount(NESTED_ENTRIES_COUNT);
143+
144+
nestedEntries0.next()
145+
.tagGroup2(TAG_GROUP_2_IDX_0);
146+
147+
nestedEntries0.putVarDataFieldNested(VAR_DATA_FIELD_NESTED_IDX_0, VAR_DATA_FIELD_NESTED_IDX_0_LENGTH);
148+
149+
nestedEntries0.next()
150+
.tagGroup2(TAG_GROUP_2_IDX_1);
151+
152+
nestedEntries0.putVarDataFieldNested(VAR_DATA_FIELD_NESTED_IDX_1, VAR_DATA_FIELD_NESTED_IDX_1_LENGTH);
153+
154+
nestedEntries0.next()
155+
.tagGroup2(TAG_GROUP_2_IDX_2);
156+
157+
nestedEntries0.putVarDataFieldNested(VAR_DATA_FIELD_NESTED_IDX_2, VAR_DATA_FIELD_NESTED_IDX_2_LENGTH);
158+
159+
entries.putVarDataField(VAR_DATA_FIELD_IDX_0, VAR_DATA_FIELD_IDX_0_LENGTH);
160+
161+
entries.next()
162+
.putTagGroup1(TAG_GROUP_1_IDX_1);
163+
164+
TestMessage3::Entries::NestedEntries &nestedEntries1 = entries.nestedEntriesCount(NESTED_ENTRIES_COUNT);
165+
166+
nestedEntries1.next()
167+
.tagGroup2(TAG_GROUP_2_IDX_3);
168+
169+
nestedEntries1.putVarDataFieldNested(VAR_DATA_FIELD_NESTED_IDX_3, VAR_DATA_FIELD_NESTED_IDX_3_LENGTH);
170+
171+
nestedEntries1.next()
172+
.tagGroup2(TAG_GROUP_2_IDX_4);
173+
174+
nestedEntries1.putVarDataFieldNested(VAR_DATA_FIELD_NESTED_IDX_4, VAR_DATA_FIELD_NESTED_IDX_4_LENGTH);
175+
176+
nestedEntries1.next()
177+
.tagGroup2(TAG_GROUP_2_IDX_5);
178+
179+
nestedEntries1.putVarDataFieldNested(VAR_DATA_FIELD_NESTED_IDX_5, VAR_DATA_FIELD_NESTED_IDX_5_LENGTH);
180+
181+
entries.putVarDataField(VAR_DATA_FIELD_IDX_1, VAR_DATA_FIELD_IDX_1_LENGTH);
182+
183+
return msg3_.size();
184+
}
185+
109186
virtual int encodeTestMessage4(char *buffer, int offset, int bufferLength)
110187
{
111188
msg4_.wrapForEncode(buffer, offset, bufferLength);
@@ -291,6 +368,176 @@ TEST_F(GroupWithDataTest, shouldbeAbleToEncodeAndDecodeTestMessage2Correctly)
291368
EXPECT_EQ(msg2Decoder.size(), expectedTestMessage2Size);
292369
}
293370

371+
TEST_F(GroupWithDataTest, shouldBeAbleToEncodeTestMessage3Correctly)
372+
{
373+
char buffer[2048];
374+
const char *bp = buffer;
375+
int sz = encodeTestMessage3(buffer, 0, sizeof(buffer));
376+
377+
int offset = 0;
378+
EXPECT_EQ(*(sbe_uint32_t *)(bp + offset), TAG_1);
379+
EXPECT_EQ(TestMessage1::sbeBlockLength(), 16);
380+
offset += 16; // root blockLength of 16
381+
382+
// entries
383+
EXPECT_EQ(*(sbe_uint16_t *)(bp + offset), TAG_GROUP_1_IDX_0_LENGTH);
384+
offset += sizeof(sbe_uint16_t);
385+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), ENTRIES_COUNT);
386+
offset += sizeof(sbe_uint8_t);
387+
388+
EXPECT_EQ(std::string(bp + offset, TAG_GROUP_1_IDX_0_LENGTH), std::string(TAG_GROUP_1_IDX_0, TAG_GROUP_1_IDX_0_LENGTH));
389+
offset += TAG_GROUP_1_IDX_0_LENGTH;
390+
391+
// nested entries
392+
EXPECT_EQ(*(sbe_uint16_t *)(bp + offset), sizeof(sbe_int64_t));
393+
offset += sizeof(sbe_uint16_t);
394+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), NESTED_ENTRIES_COUNT);
395+
offset += sizeof(sbe_uint8_t);
396+
397+
EXPECT_EQ(*(sbe_int64_t *)(bp + offset), TAG_GROUP_2_IDX_0);
398+
offset += sizeof(sbe_int64_t);
399+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), VAR_DATA_FIELD_NESTED_IDX_0_LENGTH);
400+
offset += sizeof(sbe_uint8_t);
401+
EXPECT_EQ(std::string(bp + offset, VAR_DATA_FIELD_NESTED_IDX_0_LENGTH), VAR_DATA_FIELD_NESTED_IDX_0);
402+
offset += VAR_DATA_FIELD_NESTED_IDX_0_LENGTH;
403+
404+
EXPECT_EQ(*(sbe_int64_t *)(bp + offset), TAG_GROUP_2_IDX_1);
405+
offset += sizeof(sbe_int64_t);
406+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), VAR_DATA_FIELD_NESTED_IDX_1_LENGTH);
407+
offset += sizeof(sbe_uint8_t);
408+
EXPECT_EQ(std::string(bp + offset, VAR_DATA_FIELD_NESTED_IDX_1_LENGTH), VAR_DATA_FIELD_NESTED_IDX_1);
409+
offset += VAR_DATA_FIELD_NESTED_IDX_1_LENGTH;
410+
411+
EXPECT_EQ(*(sbe_int64_t *)(bp + offset), TAG_GROUP_2_IDX_2);
412+
offset += sizeof(sbe_int64_t);
413+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), VAR_DATA_FIELD_NESTED_IDX_2_LENGTH);
414+
offset += sizeof(sbe_uint8_t);
415+
EXPECT_EQ(std::string(bp + offset, VAR_DATA_FIELD_NESTED_IDX_2_LENGTH), VAR_DATA_FIELD_NESTED_IDX_2);
416+
offset += VAR_DATA_FIELD_NESTED_IDX_2_LENGTH;
417+
418+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), VAR_DATA_FIELD_IDX_0_LENGTH);
419+
offset += sizeof(sbe_uint8_t);
420+
EXPECT_EQ(std::string(bp + offset, VAR_DATA_FIELD_IDX_0_LENGTH), VAR_DATA_FIELD_IDX_0);
421+
offset += VAR_DATA_FIELD_IDX_0_LENGTH;
422+
423+
EXPECT_EQ(std::string(bp + offset, TAG_GROUP_1_IDX_1_LENGTH), std::string(TAG_GROUP_1_IDX_1, TAG_GROUP_1_IDX_1_LENGTH));
424+
offset += TAG_GROUP_1_IDX_1_LENGTH;
425+
426+
// nested entries
427+
EXPECT_EQ(*(sbe_uint16_t *)(bp + offset), sizeof(sbe_int64_t));
428+
offset += sizeof(sbe_uint16_t);
429+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), NESTED_ENTRIES_COUNT);
430+
offset += sizeof(sbe_uint8_t);
431+
432+
EXPECT_EQ(*(sbe_int64_t *)(bp + offset), TAG_GROUP_2_IDX_3);
433+
offset += sizeof(sbe_int64_t);
434+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), VAR_DATA_FIELD_NESTED_IDX_3_LENGTH);
435+
offset += sizeof(sbe_uint8_t);
436+
EXPECT_EQ(std::string(bp + offset, VAR_DATA_FIELD_NESTED_IDX_3_LENGTH), VAR_DATA_FIELD_NESTED_IDX_3);
437+
offset += VAR_DATA_FIELD_NESTED_IDX_3_LENGTH;
438+
439+
EXPECT_EQ(*(sbe_int64_t *)(bp + offset), TAG_GROUP_2_IDX_4);
440+
offset += sizeof(sbe_int64_t);
441+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), VAR_DATA_FIELD_NESTED_IDX_4_LENGTH);
442+
offset += sizeof(sbe_uint8_t);
443+
EXPECT_EQ(std::string(bp + offset, VAR_DATA_FIELD_NESTED_IDX_4_LENGTH), VAR_DATA_FIELD_NESTED_IDX_4);
444+
offset += VAR_DATA_FIELD_NESTED_IDX_4_LENGTH;
445+
446+
EXPECT_EQ(*(sbe_int64_t *)(bp + offset), TAG_GROUP_2_IDX_5);
447+
offset += sizeof(sbe_int64_t);
448+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), VAR_DATA_FIELD_NESTED_IDX_5_LENGTH);
449+
offset += sizeof(sbe_uint8_t);
450+
EXPECT_EQ(std::string(bp + offset, VAR_DATA_FIELD_NESTED_IDX_5_LENGTH), VAR_DATA_FIELD_NESTED_IDX_5);
451+
offset += VAR_DATA_FIELD_NESTED_IDX_5_LENGTH;
452+
453+
EXPECT_EQ(*(sbe_uint8_t *)(bp + offset), VAR_DATA_FIELD_IDX_1_LENGTH);
454+
offset += sizeof(sbe_uint8_t);
455+
EXPECT_EQ(std::string(bp + offset, VAR_DATA_FIELD_IDX_1_LENGTH), VAR_DATA_FIELD_IDX_1);
456+
offset += VAR_DATA_FIELD_IDX_1_LENGTH;
457+
458+
EXPECT_EQ(sz, offset);
459+
}
460+
461+
TEST_F(GroupWithDataTest, shouldbeAbleToEncodeAndDecodeTestMessage3Correctly)
462+
{
463+
char buffer[2048];
464+
int sz = encodeTestMessage3(buffer, 0, sizeof(buffer));
465+
466+
EXPECT_EQ(sz, expectedTestMessage3Size);
467+
468+
TestMessage3 msg3Decoder(buffer, sizeof(buffer), TestMessage3::sbeBlockLength(), TestMessage3::sbeSchemaVersion());
469+
470+
EXPECT_EQ(msg3Decoder.tag1(), TAG_1);
471+
472+
TestMessage3::Entries &entries = msg3Decoder.entries();
473+
EXPECT_EQ(entries.count(), ENTRIES_COUNT);
474+
475+
ASSERT_TRUE(entries.hasNext());
476+
entries.next();
477+
478+
EXPECT_EQ(entries.tagGroup1Length(), TAG_GROUP_1_IDX_0_LENGTH);
479+
EXPECT_EQ(std::string(entries.tagGroup1(), entries.tagGroup1Length()), std::string(TAG_GROUP_1_IDX_0, TAG_GROUP_1_IDX_0_LENGTH));
480+
481+
TestMessage3::Entries::NestedEntries &nestedEntries0 = entries.nestedEntries();
482+
EXPECT_EQ(nestedEntries0.count(), NESTED_ENTRIES_COUNT);
483+
484+
ASSERT_TRUE(nestedEntries0.hasNext());
485+
nestedEntries0.next();
486+
487+
EXPECT_EQ(nestedEntries0.tagGroup2(), TAG_GROUP_2_IDX_0);
488+
EXPECT_EQ(nestedEntries0.varDataFieldNestedLength(), VAR_DATA_FIELD_NESTED_IDX_0_LENGTH);
489+
EXPECT_EQ(std::string(nestedEntries0.varDataFieldNested(), VAR_DATA_FIELD_NESTED_IDX_0_LENGTH), VAR_DATA_FIELD_NESTED_IDX_0);
490+
491+
ASSERT_TRUE(nestedEntries0.hasNext());
492+
nestedEntries0.next();
493+
494+
EXPECT_EQ(nestedEntries0.tagGroup2(), TAG_GROUP_2_IDX_1);
495+
EXPECT_EQ(nestedEntries0.varDataFieldNestedLength(), VAR_DATA_FIELD_NESTED_IDX_1_LENGTH);
496+
EXPECT_EQ(std::string(nestedEntries0.varDataFieldNested(), VAR_DATA_FIELD_NESTED_IDX_1_LENGTH), VAR_DATA_FIELD_NESTED_IDX_1);
497+
498+
ASSERT_TRUE(nestedEntries0.hasNext());
499+
nestedEntries0.next();
500+
501+
EXPECT_EQ(nestedEntries0.tagGroup2(), TAG_GROUP_2_IDX_2);
502+
EXPECT_EQ(nestedEntries0.varDataFieldNestedLength(), VAR_DATA_FIELD_NESTED_IDX_2_LENGTH);
503+
EXPECT_EQ(std::string(nestedEntries0.varDataFieldNested(), VAR_DATA_FIELD_NESTED_IDX_2_LENGTH), VAR_DATA_FIELD_NESTED_IDX_2);
504+
505+
EXPECT_EQ(entries.varDataFieldLength(), VAR_DATA_FIELD_IDX_0_LENGTH);
506+
EXPECT_EQ(std::string(entries.varDataField(), VAR_DATA_FIELD_IDX_0_LENGTH), VAR_DATA_FIELD_IDX_0);
507+
508+
ASSERT_TRUE(entries.hasNext());
509+
entries.next();
510+
511+
TestMessage3::Entries::NestedEntries &nestedEntries1 = entries.nestedEntries();
512+
EXPECT_EQ(nestedEntries1.count(), NESTED_ENTRIES_COUNT);
513+
514+
ASSERT_TRUE(nestedEntries1.hasNext());
515+
nestedEntries1.next();
516+
517+
EXPECT_EQ(nestedEntries1.tagGroup2(), TAG_GROUP_2_IDX_3);
518+
EXPECT_EQ(nestedEntries1.varDataFieldNestedLength(), VAR_DATA_FIELD_NESTED_IDX_3_LENGTH);
519+
EXPECT_EQ(std::string(nestedEntries1.varDataFieldNested(), VAR_DATA_FIELD_NESTED_IDX_3_LENGTH), VAR_DATA_FIELD_NESTED_IDX_3);
520+
521+
ASSERT_TRUE(nestedEntries1.hasNext());
522+
nestedEntries1.next();
523+
524+
EXPECT_EQ(nestedEntries1.tagGroup2(), TAG_GROUP_2_IDX_4);
525+
EXPECT_EQ(nestedEntries1.varDataFieldNestedLength(), VAR_DATA_FIELD_NESTED_IDX_4_LENGTH);
526+
EXPECT_EQ(std::string(nestedEntries1.varDataFieldNested(), VAR_DATA_FIELD_NESTED_IDX_4_LENGTH), VAR_DATA_FIELD_NESTED_IDX_4);
527+
528+
ASSERT_TRUE(nestedEntries1.hasNext());
529+
nestedEntries1.next();
530+
531+
EXPECT_EQ(nestedEntries1.tagGroup2(), TAG_GROUP_2_IDX_5);
532+
EXPECT_EQ(nestedEntries1.varDataFieldNestedLength(), VAR_DATA_FIELD_NESTED_IDX_5_LENGTH);
533+
EXPECT_EQ(std::string(nestedEntries1.varDataFieldNested(), VAR_DATA_FIELD_NESTED_IDX_5_LENGTH), VAR_DATA_FIELD_NESTED_IDX_5);
534+
535+
EXPECT_EQ(entries.varDataFieldLength(), VAR_DATA_FIELD_IDX_1_LENGTH);
536+
EXPECT_EQ(std::string(entries.varDataField(), VAR_DATA_FIELD_IDX_1_LENGTH), VAR_DATA_FIELD_IDX_1);
537+
538+
EXPECT_EQ(msg3Decoder.size(), expectedTestMessage3Size);
539+
}
540+
294541
TEST_F(GroupWithDataTest, shouldBeAbleToEncodeTestMessage4Correctly)
295542
{
296543
char buffer[2048];

0 commit comments

Comments
 (0)