33 TriviallyCopyableType() =
default;
35 TriviallyCopyableType (
int v)
39 TriviallyCopyableType (
float v)
43 bool operator== (
const TriviallyCopyableType& other)
const
45 return getValue() == other.getValue();
48 int getValue()
const {
return value; }
57 NonTriviallyCopyableType() =
default;
59 NonTriviallyCopyableType (
int v)
63 NonTriviallyCopyableType (
float v)
67 NonTriviallyCopyableType (
const NonTriviallyCopyableType& other)
71 NonTriviallyCopyableType& operator= (
const NonTriviallyCopyableType& other)
77 bool operator== (
const NonTriviallyCopyableType& other)
const
79 return getValue() == other.getValue();
82 int getValue()
const {
return *ptr; }
90static bool operator== (
const ArrayBaseTestsHelpers::TriviallyCopyableType&
tct,
91 const ArrayBaseTestsHelpers::NonTriviallyCopyableType&
ntct)
93 return tct.getValue() ==
ntct.getValue();
96static bool operator== (
const ArrayBaseTestsHelpers::NonTriviallyCopyableType&
ntct,
97 const ArrayBaseTestsHelpers::TriviallyCopyableType&
tct)
104 using CopyableType = ArrayBaseTestsHelpers::TriviallyCopyableType;
105 using NoncopyableType = ArrayBaseTestsHelpers::NonTriviallyCopyableType;
107 #if ! (defined (__GNUC__) && __GNUC__ < 5 && ! defined (__clang__))
108 static_assert (std::is_trivially_copyable_v<CopyableType>,
109 "Test TriviallyCopyableType is not trivially copyable");
110 static_assert (! std::is_trivially_copyable_v<NoncopyableType>,
111 "Test NonTriviallyCopyableType is trivially copyable");
119 void runTest()
override
121 beginTest (
"grow capacity");
148 beginTest (
"shrink capacity");
178 beginTest (
"equality");
204 beginTest (
"accessors");
242 beginTest (
"add moved");
248 for (
int i = 0; i < 5; ++i)
261 beginTest (
"add multiple");
267 for (
int i = 4; i < 7; ++i)
276 beginTest (
"add array from a pointer");
290 beginTest (
"add array from a pointer of a different type");
307 beginTest (
"add array from initializer_list");
325 beginTest (
"add array from containers");
377 beginTest (
"insert");
391 for (
int i = 0; i < 3; ++i)
399 for (
int i = 0; i < 50; ++i)
406 beginTest (
"insert array");
432 beginTest (
"remove");
440 for (
int i = 0; i < 4; ++i)
452 for (
int i = 0; i < 4; ++i)
454 for (
int j = 0;
j < blockSize; ++
j)
490 if (p.second > p.first)
506 beginTest (
"After converting move construction, ownership is transferred");
515 expectEquals (base.capacity(), 5);
516 expectEquals (base.size(), 1);
517 expect (base.getFirst() == &obj);
518 expectEquals (
derived.capacity(), 0);
519 expectEquals (
derived.size(), 0);
520 expect (
derived.data() ==
nullptr);
523 beginTest (
"After converting move assignment, ownership is transferred");
533 expectEquals (base.capacity(), 5);
534 expectEquals (base.size(), 1);
535 expect (base.getFirst() == &obj);
536 expectEquals (
derived.capacity(), 0);
537 expectEquals (
derived.size(), 0);
538 expect (
derived.data() ==
nullptr);
545 virtual ~Base() =
default;
565 template <
typename A,
typename B>
569 expectEquals ((
int) a.size(), (
int) b.size());
571 for (
int i = 0; i < (
int) a.size(); ++i)
572 expect (a[i] == b[i]);
575 template <
typename A,
typename B>
579 expectEquals ((
int) a.size(), (
int) b.
size());
581 for (
int i = 0; i < (
int) a.size(); ++i)
582 expect (a[i] == b[(
size_t) i]);
585 template <
typename A,
typename B,
typename C>
T emplace_back(T... args)
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...