diff options
Diffstat (limited to 'pw_containers/variable_length_entry_queue_test.cc')
-rw-r--r-- | pw_containers/variable_length_entry_queue_test.cc | 162 |
1 files changed, 89 insertions, 73 deletions
diff --git a/pw_containers/variable_length_entry_queue_test.cc b/pw_containers/variable_length_entry_queue_test.cc index f329f604a..2e4fb90d7 100644 --- a/pw_containers/variable_length_entry_queue_test.cc +++ b/pw_containers/variable_length_entry_queue_test.cc @@ -23,8 +23,6 @@ namespace { -using std::string_view_literals::operator""sv; - struct PushOverwrite { std::string_view data; }; @@ -32,11 +30,12 @@ struct Push { std::string_view data; }; struct Pop {}; +struct Clear {}; struct SizeEquals { size_t expected; }; -using TestStep = std::variant<PushOverwrite, Push, Pop, SizeEquals>; +using TestStep = std::variant<PushOverwrite, Push, Pop, Clear, SizeEquals>; // Copies an entry, which might be wrapped, to a single std::vector. std::vector<std::byte> ReadEntry( @@ -67,7 +66,7 @@ std::vector<std::byte> ReadEntry( // after every step. #define DATA_DRIVEN_TEST(program, max_entry_size) \ TEST(VariableLengthEntryQueue, \ - DataDrivenTest_##program##_MaxEntrySize##max_entry_size) { \ + DataDrivenTest_##program##_MaxSizeBytes##max_entry_size) { \ pw::containers::VariableLengthEntryQueueTestOracle oracle(max_entry_size); \ PW_VARIABLE_LENGTH_ENTRY_QUEUE_DECLARE(c_queue, max_entry_size); \ \ @@ -83,7 +82,7 @@ std::vector<std::byte> ReadEntry( push->data.data(), \ static_cast<uint32_t>(push->data.size())); \ oracle.push(pw::as_bytes(pw::span(push->data))); \ - } else if (auto pop = std::get_if<Pop>(&step); pop != nullptr) { \ + } else if (std::holds_alternative<Pop>(step)) { \ pw_VariableLengthEntryQueue_Pop(c_queue); \ oracle.pop(); \ } else if (auto size = std::get_if<SizeEquals>(&step); \ @@ -91,17 +90,18 @@ std::vector<std::byte> ReadEntry( size_t actual = pw_VariableLengthEntryQueue_Size(c_queue); \ ASSERT_EQ(oracle.size(), actual); \ ASSERT_EQ(size->expected, actual); \ + } else if (std::holds_alternative<Clear>(step)) { \ + pw_VariableLengthEntryQueue_Clear(c_queue); \ + oracle.clear(); \ } else { \ FAIL() << "Unhandled case"; \ } \ /* Check size and other functions */ \ ASSERT_EQ(pw_VariableLengthEntryQueue_Size(c_queue), oracle.size()); \ - ASSERT_EQ(pw_VariableLengthEntryQueue_RawSizeBytes(c_queue), \ - oracle.raw_size_bytes()); \ - ASSERT_EQ(pw_VariableLengthEntryQueue_RawCapacityBytes(c_queue), \ - oracle.raw_capacity_bytes()); \ - ASSERT_EQ(pw_VariableLengthEntryQueue_MaxEntrySizeBytes(c_queue), \ - oracle.max_entry_size_bytes()); \ + ASSERT_EQ(pw_VariableLengthEntryQueue_SizeBytes(c_queue), \ + oracle.size_bytes()); \ + ASSERT_EQ(pw_VariableLengthEntryQueue_MaxSizeBytes(c_queue), \ + oracle.max_size_bytes()); \ ASSERT_CONTENTS_EQ(oracle, c_queue); \ } \ } \ @@ -109,84 +109,100 @@ std::vector<std::byte> ReadEntry( constexpr TestStep kPop[] = { SizeEquals{0}, - PushOverwrite{""sv}, + PushOverwrite{""}, SizeEquals{1}, Pop{}, SizeEquals{0}, }; +DATA_DRIVEN_TEST(kPop, 0); // Only holds one empty entry. DATA_DRIVEN_TEST(kPop, 1); DATA_DRIVEN_TEST(kPop, 6); constexpr TestStep kOverwriteLargeEntriesWithSmall[] = { - TestStep{PushOverwrite{"12345"sv}}, // 6-byte entry - TestStep{PushOverwrite{"abcde"sv}}, - TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{""sv}}, - TestStep{SizeEquals{6}}, - TestStep{Pop{}}, - TestStep{Pop{}}, - TestStep{Pop{}}, - TestStep{Pop{}}, - TestStep{Pop{}}, - TestStep{Pop{}}, - TestStep{SizeEquals{0}}, + PushOverwrite{"12345"}, + PushOverwrite{"abcde"}, + PushOverwrite{""}, + PushOverwrite{""}, + PushOverwrite{""}, + PushOverwrite{""}, + PushOverwrite{""}, + PushOverwrite{""}, + SizeEquals{6}, + Pop{}, + Pop{}, + Pop{}, + Pop{}, + Pop{}, + Pop{}, + SizeEquals{0}, }; +DATA_DRIVEN_TEST(kOverwriteLargeEntriesWithSmall, 5); DATA_DRIVEN_TEST(kOverwriteLargeEntriesWithSmall, 6); DATA_DRIVEN_TEST(kOverwriteLargeEntriesWithSmall, 7); -constexpr TestStep kOverwriteVaryingSizesUpTo3[] = { - TestStep{PushOverwrite{""sv}}, TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{""sv}}, TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{""sv}}, TestStep{PushOverwrite{"1"sv}}, - TestStep{PushOverwrite{"2"sv}}, TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{"3"sv}}, TestStep{PushOverwrite{"4"sv}}, - TestStep{PushOverwrite{""sv}}, TestStep{PushOverwrite{"5"sv}}, - TestStep{PushOverwrite{"6"sv}}, TestStep{PushOverwrite{"ab"sv}}, - TestStep{PushOverwrite{"cd"sv}}, TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{"ef"sv}}, TestStep{PushOverwrite{"gh"sv}}, - TestStep{PushOverwrite{"ij"sv}}, +constexpr TestStep kOverwriteVaryingSizes012[] = { + PushOverwrite{""}, PushOverwrite{""}, PushOverwrite{""}, + PushOverwrite{""}, PushOverwrite{""}, PushOverwrite{"1"}, + PushOverwrite{"2"}, PushOverwrite{""}, PushOverwrite{"3"}, + PushOverwrite{"4"}, PushOverwrite{""}, PushOverwrite{"5"}, + PushOverwrite{"6"}, PushOverwrite{"ab"}, PushOverwrite{"cd"}, + PushOverwrite{""}, PushOverwrite{"ef"}, PushOverwrite{"gh"}, + PushOverwrite{"ij"}, }; -DATA_DRIVEN_TEST(kOverwriteVaryingSizesUpTo3, 3); -DATA_DRIVEN_TEST(kOverwriteVaryingSizesUpTo3, 4); - -constexpr TestStep kOverwriteVaryingSizesUpTo5[] = { - TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{""sv}}, - TestStep{PushOverwrite{"1"sv}}, - TestStep{PushOverwrite{"2"sv}}, - TestStep{PushOverwrite{"3"sv}}, - TestStep{PushOverwrite{"ab"sv}}, - TestStep{PushOverwrite{"cd"sv}}, - TestStep{PushOverwrite{"ef"sv}}, - TestStep{PushOverwrite{"123"sv}}, - TestStep{PushOverwrite{"456"sv}}, - TestStep{PushOverwrite{"789"sv}}, - TestStep{PushOverwrite{"abcd"sv}}, - TestStep{PushOverwrite{"efgh"sv}}, - TestStep{PushOverwrite{"ijkl"sv}}, - TestStep{Pop{}}, - TestStep{SizeEquals{0}}, +DATA_DRIVEN_TEST(kOverwriteVaryingSizes012, 2); +DATA_DRIVEN_TEST(kOverwriteVaryingSizes012, 3); + +constexpr TestStep kOverwriteVaryingSizesUpTo4[] = { + PushOverwrite{""}, + PushOverwrite{""}, + PushOverwrite{""}, + PushOverwrite{"1"}, + PushOverwrite{"2"}, + PushOverwrite{"3"}, + PushOverwrite{"ab"}, + PushOverwrite{"cd"}, + PushOverwrite{"ef"}, + PushOverwrite{"123"}, + PushOverwrite{"456"}, + PushOverwrite{"789"}, + PushOverwrite{"abcd"}, + PushOverwrite{"efgh"}, + PushOverwrite{"ijkl"}, + Pop{}, + SizeEquals{0}, }; -DATA_DRIVEN_TEST(kOverwriteVaryingSizesUpTo5, 5); -DATA_DRIVEN_TEST(kOverwriteVaryingSizesUpTo5, 6); -DATA_DRIVEN_TEST(kOverwriteVaryingSizesUpTo5, 7); +DATA_DRIVEN_TEST(kOverwriteVaryingSizesUpTo4, 4); +DATA_DRIVEN_TEST(kOverwriteVaryingSizesUpTo4, 5); +DATA_DRIVEN_TEST(kOverwriteVaryingSizesUpTo4, 6); constexpr char kBigEntryBytes[196]{}; constexpr TestStep kTwoBytePrefix[] = { - TestStep{PushOverwrite{std::string_view(kBigEntryBytes, 128)}}, - TestStep{PushOverwrite{std::string_view(kBigEntryBytes, 128)}}, - TestStep{PushOverwrite{std::string_view(kBigEntryBytes, 127)}}, - TestStep{PushOverwrite{std::string_view(kBigEntryBytes, 128)}}, - TestStep{PushOverwrite{std::string_view(kBigEntryBytes, 127)}}, + PushOverwrite{std::string_view(kBigEntryBytes, 128)}, + PushOverwrite{std::string_view(kBigEntryBytes, 128)}, + PushOverwrite{std::string_view(kBigEntryBytes, 127)}, + PushOverwrite{std::string_view(kBigEntryBytes, 128)}, + PushOverwrite{std::string_view(kBigEntryBytes, 127)}, + SizeEquals{1}, + Pop{}, + SizeEquals{0}, +}; +DATA_DRIVEN_TEST(kTwoBytePrefix, 128); +DATA_DRIVEN_TEST(kTwoBytePrefix, 129); + +constexpr TestStep kClear[] = { + Push{"abcdefg"}, + PushOverwrite{""}, + PushOverwrite{""}, + PushOverwrite{"a"}, + PushOverwrite{"b"}, + Clear{}, + SizeEquals{0}, + Clear{}, }; -DATA_DRIVEN_TEST(kTwoBytePrefix, 130); +DATA_DRIVEN_TEST(kClear, 7); +DATA_DRIVEN_TEST(kClear, 100); TEST(VariableLengthEntryQueue, DeclareMacro) { PW_VARIABLE_LENGTH_ENTRY_QUEUE_DECLARE(queue, 123); @@ -198,8 +214,8 @@ TEST(VariableLengthEntryQueue, DeclareMacro) { EXPECT_EQ(pw_VariableLengthEntryQueue_RawStorageSizeBytes(queue), kArraySizeBytes - 3 /* padding isn't included */); - EXPECT_EQ(pw_VariableLengthEntryQueue_MaxEntrySizeBytes(queue), 123u); - EXPECT_EQ(pw_VariableLengthEntryQueue_RawSizeBytes(queue), 0u); + EXPECT_EQ(pw_VariableLengthEntryQueue_MaxSizeBytes(queue), 123u); + EXPECT_EQ(pw_VariableLengthEntryQueue_SizeBytes(queue), 0u); EXPECT_TRUE(pw_VariableLengthEntryQueue_Empty(queue)); } @@ -211,9 +227,9 @@ TEST(VariableLengthEntryQueue, InitializeExistingBuffer) { EXPECT_EQ(pw_VariableLengthEntryQueue_RawStorageSizeBytes(queue), sizeof(queue)); - EXPECT_EQ(pw_VariableLengthEntryQueue_MaxEntrySizeBytes(queue), + EXPECT_EQ(pw_VariableLengthEntryQueue_MaxSizeBytes(queue), sizeof(uint32_t) * 10u - 1 /*prefix*/ - 1 /*end*/); - EXPECT_EQ(pw_VariableLengthEntryQueue_RawSizeBytes(queue), 0u); + EXPECT_EQ(pw_VariableLengthEntryQueue_SizeBytes(queue), 0u); EXPECT_EQ(pw_VariableLengthEntryQueue_Size(queue), 0u); EXPECT_TRUE(pw_VariableLengthEntryQueue_Empty(queue)); } |