From aeae1cb5e2415814c043f53509f4f1f7db468b24 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 21 Jul 2019 11:35:09 +0200 Subject: [PATCH] AK: Add a unit test for Vector::prepend(Vector&&) with complex T. It's good to verify that complex objects can be moved nicely by Vector. --- AK/Tests/TestVector.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/AK/Tests/TestVector.cpp b/AK/Tests/TestVector.cpp index ea5f7a9526..5b7e8f0c0f 100644 --- a/AK/Tests/TestVector.cpp +++ b/AK/Tests/TestVector.cpp @@ -1,5 +1,6 @@ #include #include +#include #include TEST_CASE(construct) @@ -98,4 +99,39 @@ TEST_CASE(prepend_vector) EXPECT_EQ(ints.size(), 0); } +TEST_CASE(prepend_vector_object) +{ + struct SubObject { + SubObject(int v) : value(v) {} + int value { 0 }; + }; + struct Object { + OwnPtr object; + }; + + Vector objects; + objects.append({ make(1) }); + objects.append({ make(2) }); + objects.append({ make(3) }); + + EXPECT_EQ(objects.size(), 3); + + Vector more_objects; + objects.append({ make(4) }); + objects.append({ make(5) }); + objects.append({ make(6) }); + EXPECT_EQ(more_objects.size(), 3); + + objects.prepend(move(more_objects)); + EXPECT_EQ(more_objects.size(), 0); + EXPECT_EQ(objects.size(), 6); + + EXPECT_EQ(objects[0].object->value, 4); + EXPECT_EQ(objects[1].object->value, 5); + EXPECT_EQ(objects[2].object->value, 6); + EXPECT_EQ(objects[3].object->value, 1); + EXPECT_EQ(objects[4].object->value, 2); + EXPECT_EQ(objects[5].object->value, 3); +} + TEST_MAIN(Vector)