diff options
Diffstat (limited to 'tests/gtests/blenlib/BLI_array_test.cc')
-rw-r--r-- | tests/gtests/blenlib/BLI_array_test.cc | 69 |
1 files changed, 53 insertions, 16 deletions
diff --git a/tests/gtests/blenlib/BLI_array_test.cc b/tests/gtests/blenlib/BLI_array_test.cc index fc3c15fe813..9c77c69e296 100644 --- a/tests/gtests/blenlib/BLI_array_test.cc +++ b/tests/gtests/blenlib/BLI_array_test.cc @@ -2,26 +2,26 @@ #include "BLI_strict_flags.h" #include "testing/testing.h" -using namespace blender; +namespace blender { TEST(array, DefaultConstructor) { Array<int> array; - EXPECT_EQ(array.size(), 0); + EXPECT_EQ(array.size(), 0u); EXPECT_TRUE(array.is_empty()); } TEST(array, SizeConstructor) { Array<int> array(5); - EXPECT_EQ(array.size(), 5); + EXPECT_EQ(array.size(), 5u); EXPECT_FALSE(array.is_empty()); } TEST(array, FillConstructor) { Array<int> array(5, 8); - EXPECT_EQ(array.size(), 5); + EXPECT_EQ(array.size(), 5u); EXPECT_EQ(array[0], 8); EXPECT_EQ(array[1], 8); EXPECT_EQ(array[2], 8); @@ -32,7 +32,7 @@ TEST(array, FillConstructor) TEST(array, InitializerListConstructor) { Array<int> array = {4, 5, 6, 7}; - EXPECT_EQ(array.size(), 4); + EXPECT_EQ(array.size(), 4u); EXPECT_EQ(array[0], 4); EXPECT_EQ(array[1], 5); EXPECT_EQ(array[2], 6); @@ -44,7 +44,7 @@ TEST(array, SpanConstructor) int stackarray[4] = {6, 7, 8, 9}; Span<int> span(stackarray, ARRAY_SIZE(stackarray)); Array<int> array(span); - EXPECT_EQ(array.size(), 4); + EXPECT_EQ(array.size(), 4u); EXPECT_EQ(array[0], 6); EXPECT_EQ(array[1], 7); EXPECT_EQ(array[2], 8); @@ -56,8 +56,8 @@ TEST(array, CopyConstructor) Array<int> array = {5, 6, 7, 8}; Array<int> new_array(array); - EXPECT_EQ(array.size(), 4); - EXPECT_EQ(new_array.size(), 4); + EXPECT_EQ(array.size(), 4u); + EXPECT_EQ(new_array.size(), 4u); EXPECT_NE(array.data(), new_array.data()); EXPECT_EQ(new_array[0], 5); EXPECT_EQ(new_array[1], 6); @@ -70,8 +70,8 @@ TEST(array, MoveConstructor) Array<int> array = {5, 6, 7, 8}; Array<int> new_array(std::move(array)); - EXPECT_EQ(array.size(), 0); - EXPECT_EQ(new_array.size(), 4); + EXPECT_EQ(array.size(), 0u); + EXPECT_EQ(new_array.size(), 4u); EXPECT_EQ(new_array[0], 5); EXPECT_EQ(new_array[1], 6); EXPECT_EQ(new_array[2], 7); @@ -82,10 +82,10 @@ TEST(array, CopyAssignment) { Array<int> array = {1, 2, 3}; Array<int> new_array = {4}; - EXPECT_EQ(new_array.size(), 1); + EXPECT_EQ(new_array.size(), 1u); new_array = array; - EXPECT_EQ(new_array.size(), 3); - EXPECT_EQ(array.size(), 3); + EXPECT_EQ(new_array.size(), 3u); + EXPECT_EQ(array.size(), 3u); EXPECT_NE(array.data(), new_array.data()); EXPECT_EQ(new_array[0], 1); EXPECT_EQ(new_array[1], 2); @@ -96,10 +96,10 @@ TEST(array, MoveAssignment) { Array<int> array = {1, 2, 3}; Array<int> new_array = {4}; - EXPECT_EQ(new_array.size(), 1); + EXPECT_EQ(new_array.size(), 1u); new_array = std::move(array); - EXPECT_EQ(new_array.size(), 3); - EXPECT_EQ(array.size(), 0); + EXPECT_EQ(new_array.size(), 3u); + EXPECT_EQ(array.size(), 0u); EXPECT_EQ(new_array[0], 1); EXPECT_EQ(new_array[1], 2); EXPECT_EQ(new_array[2], 3); @@ -124,3 +124,40 @@ TEST(array, TrivialTypeSizeConstructor) EXPECT_EQ(*ptr, magic); delete array; } + +struct ConstructibleType { + char value; + + ConstructibleType() + { + value = 42; + } +}; + +TEST(array, NoInitializationSizeConstructor) +{ + using MyArray = Array<ConstructibleType>; + + AlignedBuffer<sizeof(MyArray), alignof(MyArray)> buffer; + char *buffer_ptr = (char *)buffer.ptr(); + memset(buffer_ptr, 100, sizeof(MyArray)); + + /* Doing this to avoid some compiler optimization. */ + for (uint i : IndexRange(sizeof(MyArray))) { + EXPECT_EQ(buffer_ptr[i], 100); + } + + { + MyArray &array = *new (buffer.ptr()) MyArray(1, NoInitialization()); + EXPECT_EQ(array[0].value, 100); + array.clear_without_destruct(); + array.~Array(); + } + { + MyArray &array = *new (buffer.ptr()) MyArray(1); + EXPECT_EQ(array[0].value, 42); + array.~Array(); + } +} + +} // namespace blender |