From 654950eaf70b026a0183075509712cb39dd9dd8b Mon Sep 17 00:00:00 2001 From: MacDue Date: Fri, 10 Feb 2023 20:14:19 +0000 Subject: [PATCH] Tests: Add a few tests to verify vectors are using inline storage --- Tests/AK/TestVector.cpp | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/Tests/AK/TestVector.cpp b/Tests/AK/TestVector.cpp index 8444c317e6..fafa8f5564 100644 --- a/Tests/AK/TestVector.cpp +++ b/Tests/AK/TestVector.cpp @@ -572,3 +572,48 @@ TEST_CASE(reverse_range_for_loop) for (auto item : v.in_reverse()) EXPECT_EQ(item, index--); } + +static bool is_inline_element(auto& el, auto& vector) +{ + uintptr_t vector_ptr = (uintptr_t)&vector; + uintptr_t element_ptr = (uintptr_t)⪙ + return (element_ptr >= vector_ptr && element_ptr < (vector_ptr + sizeof(vector))); +} + +TEST_CASE(uses_inline_capacity_when_appended_to) +{ + Vector v; + v.unchecked_append(1); + v.unchecked_append(123); + v.unchecked_append(50); + v.unchecked_append(43); + + for (auto& el : v) + EXPECT(is_inline_element(el, v)); +} + +TEST_CASE(uses_inline_capacity_when_constructed_from_initializer_list) +{ + Vector v { 10, 9, 3, 1, 3 }; + + for (auto& el : v) + EXPECT(is_inline_element(el, v)); +} + +TEST_CASE(uses_inline_capacity_when_constructed_from_other_vector) +{ + Vector other { 4, 3, 2, 1 }; + Vector v(other); + + for (auto& el : v) + EXPECT(is_inline_element(el, v)); +} + +TEST_CASE(uses_inline_capacity_when_constructed_from_span) +{ + Array array { "f00", "bar", "baz" }; + Vector v(array.span()); + + for (auto& el : v) + EXPECT(is_inline_element(el, v)); +}