From 37820651bb4f22e316f00a02e4bf5da2589a03c9 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 30 Jun 2020 15:58:14 +0200 Subject: BLI: add Array constructor that does not initialize non-trivial types This should rarely be necessary, but I have a use case coming up soon. --- tests/gtests/blenlib/BLI_array_test.cc | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'tests') diff --git a/tests/gtests/blenlib/BLI_array_test.cc b/tests/gtests/blenlib/BLI_array_test.cc index 9ff4dc9a371..08f61a19900 100644 --- a/tests/gtests/blenlib/BLI_array_test.cc +++ b/tests/gtests/blenlib/BLI_array_test.cc @@ -124,3 +124,38 @@ TEST(array, TrivialTypeSizeConstructor) EXPECT_EQ(*ptr, magic); delete array; } + +struct ConstructibleType { + char value; + + ConstructibleType() + { + value = 42; + } +}; + +TEST(array, NoInitializationSizeConstructor) +{ + using MyArray = Array; + + AlignedBuffer 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(); + } +} -- cgit v1.2.3