Path: blob/master/src/common-tests/heap_array_tests.cpp
7197 views
// SPDX-FileCopyrightText: 2019-2025 Connor McLaughlin <[email protected]>1// SPDX-License-Identifier: CC-BY-NC-ND-4.023#include "common/heap_array.h"45#include <gtest/gtest.h>67// ============================================================================8// FixedHeapArray Tests9// ============================================================================1011TEST(FixedHeapArray, DefaultConstruction)12{13FixedHeapArray<int, 10> arr;14EXPECT_EQ(arr.size(), 10u);15EXPECT_EQ(arr.capacity(), 10u);16EXPECT_EQ(arr.size_bytes(), 10u * sizeof(int));17EXPECT_FALSE(arr.empty());18EXPECT_NE(arr.data(), nullptr);19}2021TEST(FixedHeapArray, CopyConstruction)22{23FixedHeapArray<int, 5> arr1;24for (size_t i = 0; i < arr1.size(); ++i)25arr1[i] = static_cast<int>(i * 10);2627FixedHeapArray<int, 5> arr2(arr1);28EXPECT_EQ(arr2.size(), arr1.size());29for (size_t i = 0; i < arr1.size(); ++i)30EXPECT_EQ(arr2[i], arr1[i]);3132// Ensure they have separate storage33EXPECT_NE(arr1.data(), arr2.data());34}3536TEST(FixedHeapArray, MoveConstruction)37{38FixedHeapArray<int, 5> arr1;39int* original_data = arr1.data();40for (size_t i = 0; i < arr1.size(); ++i)41arr1[i] = static_cast<int>(i * 10);4243FixedHeapArray<int, 5> arr2(std::move(arr1));44EXPECT_EQ(arr2.data(), original_data);45EXPECT_EQ(arr2.size(), 5u);4647for (size_t i = 0; i < arr2.size(); ++i)48EXPECT_EQ(arr2[i], static_cast<int>(i * 10));49}5051TEST(FixedHeapArray, ElementAccess)52{53FixedHeapArray<int, 5> arr;54arr[0] = 100;55arr[1] = 200;56arr[2] = 300;57arr[3] = 400;58arr[4] = 500;5960EXPECT_EQ(arr[0], 100);61EXPECT_EQ(arr[1], 200);62EXPECT_EQ(arr[2], 300);63EXPECT_EQ(arr[3], 400);64EXPECT_EQ(arr[4], 500);6566const auto& carr = arr;67EXPECT_EQ(carr[0], 100);68EXPECT_EQ(carr[4], 500);69}7071TEST(FixedHeapArray, FrontBack)72{73FixedHeapArray<int, 5> arr;74arr[0] = 10;75arr[4] = 50;7677EXPECT_EQ(arr.front(), 10);78EXPECT_EQ(arr.back(), 50);7980arr.front() = 15;81arr.back() = 55;82EXPECT_EQ(arr[0], 15);83EXPECT_EQ(arr[4], 55);8485const auto& carr = arr;86EXPECT_EQ(carr.front(), 15);87EXPECT_EQ(carr.back(), 55);88}8990TEST(FixedHeapArray, Iterators)91{92FixedHeapArray<int, 5> arr;93for (size_t i = 0; i < arr.size(); ++i)94arr[i] = static_cast<int>(i);9596int expected = 0;97for (auto it = arr.begin(); it != arr.end(); ++it)98{99EXPECT_EQ(*it, expected);100++expected;101}102EXPECT_EQ(expected, 5);103104expected = 0;105for (auto it = arr.cbegin(); it != arr.cend(); ++it)106{107EXPECT_EQ(*it, expected);108++expected;109}110}111112TEST(FixedHeapArray, Fill)113{114FixedHeapArray<int, 10> arr;115arr.fill(42);116117for (size_t i = 0; i < arr.size(); ++i)118EXPECT_EQ(arr[i], 42);119}120121TEST(FixedHeapArray, Swap)122{123FixedHeapArray<int, 5> arr1;124FixedHeapArray<int, 5> arr2;125arr1.fill(10);126arr2.fill(20);127128int* arr1_data = arr1.data();129int* arr2_data = arr2.data();130131arr1.swap(arr2);132133EXPECT_EQ(arr1.data(), arr2_data);134EXPECT_EQ(arr2.data(), arr1_data);135136for (size_t i = 0; i < arr1.size(); ++i)137{138EXPECT_EQ(arr1[i], 20);139EXPECT_EQ(arr2[i], 10);140}141}142143TEST(FixedHeapArray, Span)144{145FixedHeapArray<int, 5> arr;146for (size_t i = 0; i < arr.size(); ++i)147arr[i] = static_cast<int>(i * 2);148149std::span<int, 5> sp = arr.span();150EXPECT_EQ(sp.size(), 5u);151EXPECT_EQ(sp.data(), arr.data());152153for (size_t i = 0; i < sp.size(); ++i)154EXPECT_EQ(sp[i], static_cast<int>(i * 2));155156const auto& carr = arr;157std::span<const int, 5> csp = carr.cspan();158EXPECT_EQ(csp.size(), 5u);159EXPECT_EQ(csp.data(), carr.data());160}161162TEST(FixedHeapArray, MoveAssignment)163{164FixedHeapArray<int, 5> arr1;165arr1.fill(42);166int* original_data = arr1.data();167168FixedHeapArray<int, 5> arr2;169arr2.fill(0);170171arr2 = std::move(arr1);172EXPECT_EQ(arr2.data(), original_data);173for (size_t i = 0; i < arr2.size(); ++i)174EXPECT_EQ(arr2[i], 42);175}176177TEST(FixedHeapArray, AlignedAllocation)178{179constexpr size_t alignment = 64;180FixedHeapArray<int, 16, alignment> arr;181182uintptr_t addr = reinterpret_cast<uintptr_t>(arr.data());183EXPECT_EQ(addr % alignment, 0u);184}185186TEST(FixedHeapArray, DifferentTypes)187{188FixedHeapArray<double, 3> arr;189arr[0] = 1.5;190arr[1] = 2.5;191arr[2] = 3.5;192193EXPECT_DOUBLE_EQ(arr[0], 1.5);194EXPECT_DOUBLE_EQ(arr[1], 2.5);195EXPECT_DOUBLE_EQ(arr[2], 3.5);196EXPECT_EQ(arr.size_bytes(), 3u * sizeof(double));197}198199// ============================================================================200// DynamicHeapArray Tests201// ============================================================================202203TEST(DynamicHeapArray, DefaultConstruction)204{205DynamicHeapArray<int> arr;206EXPECT_EQ(arr.size(), 0u);207EXPECT_EQ(arr.capacity(), 0u);208EXPECT_EQ(arr.size_bytes(), 0u);209EXPECT_TRUE(arr.empty());210EXPECT_EQ(arr.data(), nullptr);211}212213TEST(DynamicHeapArray, SizeConstruction)214{215DynamicHeapArray<int> arr(10);216EXPECT_EQ(arr.size(), 10u);217EXPECT_EQ(arr.capacity(), 10u);218EXPECT_EQ(arr.size_bytes(), 10u * sizeof(int));219EXPECT_FALSE(arr.empty());220EXPECT_NE(arr.data(), nullptr);221}222223TEST(DynamicHeapArray, RangeConstructionBeginEnd)224{225int source[] = {1, 2, 3, 4, 5};226DynamicHeapArray<int> arr(std::begin(source), std::end(source));227228EXPECT_EQ(arr.size(), 5u);229for (size_t i = 0; i < arr.size(); ++i)230EXPECT_EQ(arr[i], source[i]);231}232233TEST(DynamicHeapArray, RangeConstructionBeginCount)234{235int source[] = {10, 20, 30, 40, 50};236DynamicHeapArray<int> arr(source, 5);237238EXPECT_EQ(arr.size(), 5u);239for (size_t i = 0; i < arr.size(); ++i)240EXPECT_EQ(arr[i], source[i]);241}242243TEST(DynamicHeapArray, SpanConstruction)244{245int source[] = {1, 2, 3, 4, 5};246std::span<const int> sp(source);247DynamicHeapArray<int> arr(sp);248249EXPECT_EQ(arr.size(), 5u);250for (size_t i = 0; i < arr.size(); ++i)251EXPECT_EQ(arr[i], source[i]);252}253254TEST(DynamicHeapArray, SpanConstructionEmpty)255{256std::span<const int> sp;257DynamicHeapArray<int> arr(sp);258259EXPECT_EQ(arr.size(), 0u);260EXPECT_TRUE(arr.empty());261}262263TEST(DynamicHeapArray, CopyConstruction)264{265DynamicHeapArray<int> arr1(5);266for (size_t i = 0; i < arr1.size(); ++i)267arr1[i] = static_cast<int>(i * 10);268269DynamicHeapArray<int> arr2(arr1);270EXPECT_EQ(arr2.size(), arr1.size());271for (size_t i = 0; i < arr1.size(); ++i)272EXPECT_EQ(arr2[i], arr1[i]);273274// Ensure they have separate storage275EXPECT_NE(arr1.data(), arr2.data());276}277278TEST(DynamicHeapArray, CopyConstructionEmpty)279{280DynamicHeapArray<int> arr1;281DynamicHeapArray<int> arr2(arr1);282283EXPECT_EQ(arr2.size(), 0u);284EXPECT_TRUE(arr2.empty());285}286287TEST(DynamicHeapArray, MoveConstruction)288{289DynamicHeapArray<int> arr1(5);290int* original_data = arr1.data();291for (size_t i = 0; i < arr1.size(); ++i)292arr1[i] = static_cast<int>(i * 10);293294DynamicHeapArray<int> arr2(std::move(arr1));295296EXPECT_EQ(arr2.data(), original_data);297EXPECT_EQ(arr2.size(), 5u);298EXPECT_EQ(arr1.size(), 0u);299EXPECT_EQ(arr1.data(), nullptr);300301for (size_t i = 0; i < arr2.size(); ++i)302EXPECT_EQ(arr2[i], static_cast<int>(i * 10));303}304305TEST(DynamicHeapArray, ElementAccess)306{307DynamicHeapArray<int> arr(5);308arr[0] = 100;309arr[1] = 200;310arr[2] = 300;311arr[3] = 400;312arr[4] = 500;313314EXPECT_EQ(arr[0], 100);315EXPECT_EQ(arr[1], 200);316EXPECT_EQ(arr[2], 300);317EXPECT_EQ(arr[3], 400);318EXPECT_EQ(arr[4], 500);319320const auto& carr = arr;321EXPECT_EQ(carr[0], 100);322EXPECT_EQ(carr[4], 500);323}324325TEST(DynamicHeapArray, FrontBack)326{327DynamicHeapArray<int> arr(5);328arr[0] = 10;329arr[4] = 50;330331EXPECT_EQ(arr.front(), 10);332EXPECT_EQ(arr.back(), 50);333334arr.front() = 15;335arr.back() = 55;336EXPECT_EQ(arr[0], 15);337EXPECT_EQ(arr[4], 55);338339const auto& carr = arr;340EXPECT_EQ(carr.front(), 15);341EXPECT_EQ(carr.back(), 55);342}343344TEST(DynamicHeapArray, Iterators)345{346DynamicHeapArray<int> arr(5);347for (size_t i = 0; i < arr.size(); ++i)348arr[i] = static_cast<int>(i);349350int expected = 0;351for (auto it = arr.begin(); it != arr.end(); ++it)352{353EXPECT_EQ(*it, expected);354++expected;355}356EXPECT_EQ(expected, 5);357358expected = 0;359for (auto it = arr.cbegin(); it != arr.cend(); ++it)360{361EXPECT_EQ(*it, expected);362++expected;363}364}365366TEST(DynamicHeapArray, Fill)367{368DynamicHeapArray<int> arr(10);369arr.fill(42);370371for (size_t i = 0; i < arr.size(); ++i)372EXPECT_EQ(arr[i], 42);373}374375TEST(DynamicHeapArray, Swap)376{377DynamicHeapArray<int> arr1(5);378DynamicHeapArray<int> arr2(3);379arr1.fill(10);380arr2.fill(20);381382int* arr1_data = arr1.data();383int* arr2_data = arr2.data();384385arr1.swap(arr2);386387EXPECT_EQ(arr1.data(), arr2_data);388EXPECT_EQ(arr2.data(), arr1_data);389EXPECT_EQ(arr1.size(), 3u);390EXPECT_EQ(arr2.size(), 5u);391392for (size_t i = 0; i < arr1.size(); ++i)393EXPECT_EQ(arr1[i], 20);394for (size_t i = 0; i < arr2.size(); ++i)395EXPECT_EQ(arr2[i], 10);396}397398TEST(DynamicHeapArray, ResizeGrow)399{400DynamicHeapArray<int> arr(5);401for (size_t i = 0; i < arr.size(); ++i)402arr[i] = static_cast<int>(i);403404arr.resize(10);405EXPECT_EQ(arr.size(), 10u);406407// Original data should be preserved408for (size_t i = 0; i < 5; ++i)409EXPECT_EQ(arr[i], static_cast<int>(i));410}411412TEST(DynamicHeapArray, ResizeShrink)413{414DynamicHeapArray<int> arr(10);415for (size_t i = 0; i < arr.size(); ++i)416arr[i] = static_cast<int>(i);417418arr.resize(5);419EXPECT_EQ(arr.size(), 5u);420421for (size_t i = 0; i < arr.size(); ++i)422EXPECT_EQ(arr[i], static_cast<int>(i));423}424425TEST(DynamicHeapArray, ResizeSameSize)426{427DynamicHeapArray<int> arr(5);428int* original_data = arr.data();429arr.fill(42);430431arr.resize(5);432EXPECT_EQ(arr.size(), 5u);433EXPECT_EQ(arr.data(), original_data);434435for (size_t i = 0; i < arr.size(); ++i)436EXPECT_EQ(arr[i], 42);437}438439TEST(DynamicHeapArray, Deallocate)440{441DynamicHeapArray<int> arr(10);442EXPECT_FALSE(arr.empty());443444arr.deallocate();445EXPECT_TRUE(arr.empty());446EXPECT_EQ(arr.size(), 0u);447EXPECT_EQ(arr.data(), nullptr);448}449450TEST(DynamicHeapArray, AssignSpan)451{452DynamicHeapArray<int> arr;453int source[] = {1, 2, 3, 4, 5};454std::span<const int> sp(source);455456arr.assign(sp);457EXPECT_EQ(arr.size(), 5u);458for (size_t i = 0; i < arr.size(); ++i)459EXPECT_EQ(arr[i], source[i]);460}461462TEST(DynamicHeapArray, AssignBeginEnd)463{464DynamicHeapArray<int> arr;465int source[] = {10, 20, 30};466467arr.assign(std::begin(source), std::end(source));468EXPECT_EQ(arr.size(), 3u);469for (size_t i = 0; i < arr.size(); ++i)470EXPECT_EQ(arr[i], source[i]);471}472473TEST(DynamicHeapArray, AssignBeginCount)474{475DynamicHeapArray<int> arr;476int source[] = {100, 200, 300, 400};477478arr.assign(source, 4);479EXPECT_EQ(arr.size(), 4u);480for (size_t i = 0; i < arr.size(); ++i)481EXPECT_EQ(arr[i], source[i]);482}483484TEST(DynamicHeapArray, AssignCopy)485{486DynamicHeapArray<int> arr1(5);487for (size_t i = 0; i < arr1.size(); ++i)488arr1[i] = static_cast<int>(i * 3);489490DynamicHeapArray<int> arr2;491arr2.assign(arr1);492493EXPECT_EQ(arr2.size(), arr1.size());494for (size_t i = 0; i < arr1.size(); ++i)495EXPECT_EQ(arr2[i], arr1[i]);496EXPECT_NE(arr1.data(), arr2.data());497}498499TEST(DynamicHeapArray, AssignMove)500{501DynamicHeapArray<int> arr1(5);502int* original_data = arr1.data();503for (size_t i = 0; i < arr1.size(); ++i)504arr1[i] = static_cast<int>(i * 3);505506DynamicHeapArray<int> arr2;507arr2.assign(std::move(arr1));508509EXPECT_EQ(arr2.size(), 5u);510EXPECT_EQ(arr2.data(), original_data);511EXPECT_EQ(arr1.size(), 0u);512EXPECT_EQ(arr1.data(), nullptr);513}514515TEST(DynamicHeapArray, AssignEmpty)516{517DynamicHeapArray<int> arr(10);518arr.fill(42);519520int* empty = nullptr;521arr.assign(empty, static_cast<size_t>(0));522523EXPECT_TRUE(arr.empty());524EXPECT_EQ(arr.size(), 0u);525}526527TEST(DynamicHeapArray, AssignSameSize)528{529DynamicHeapArray<int> arr(5);530arr.fill(10);531int* original_data = arr.data();532533int source[] = {1, 2, 3, 4, 5};534arr.assign(source, 5);535536// Should reuse existing buffer537EXPECT_EQ(arr.data(), original_data);538for (size_t i = 0; i < arr.size(); ++i)539EXPECT_EQ(arr[i], source[i]);540}541542TEST(DynamicHeapArray, Span)543{544DynamicHeapArray<int> arr(5);545for (size_t i = 0; i < arr.size(); ++i)546arr[i] = static_cast<int>(i * 2);547548std::span<int> sp = arr.span();549EXPECT_EQ(sp.size(), 5u);550EXPECT_EQ(sp.data(), arr.data());551552for (size_t i = 0; i < sp.size(); ++i)553EXPECT_EQ(sp[i], static_cast<int>(i * 2));554}555556TEST(DynamicHeapArray, SpanWithOffset)557{558DynamicHeapArray<int> arr(10);559for (size_t i = 0; i < arr.size(); ++i)560arr[i] = static_cast<int>(i);561562std::span<int> sp = arr.span(3, 4);563EXPECT_EQ(sp.size(), 4u);564EXPECT_EQ(sp.data(), arr.data() + 3);565EXPECT_EQ(sp[0], 3);566EXPECT_EQ(sp[3], 6);567}568569TEST(DynamicHeapArray, SpanWithOffsetClamp)570{571DynamicHeapArray<int> arr(10);572for (size_t i = 0; i < arr.size(); ++i)573arr[i] = static_cast<int>(i);574575// Request more than available576std::span<int> sp = arr.span(7, 100);577EXPECT_EQ(sp.size(), 3u);578EXPECT_EQ(sp[0], 7);579EXPECT_EQ(sp[2], 9);580}581582TEST(DynamicHeapArray, SpanWithOffsetOutOfRange)583{584DynamicHeapArray<int> arr(5);585std::span<int> sp = arr.span(10);586EXPECT_TRUE(sp.empty());587}588589TEST(DynamicHeapArray, CSpan)590{591DynamicHeapArray<int> arr(5);592for (size_t i = 0; i < arr.size(); ++i)593arr[i] = static_cast<int>(i * 2);594595const auto& carr = arr;596std::span<const int> csp = carr.cspan();597EXPECT_EQ(csp.size(), 5u);598EXPECT_EQ(csp.data(), carr.data());599}600601TEST(DynamicHeapArray, CSpanWithOffset)602{603DynamicHeapArray<int> arr(10);604for (size_t i = 0; i < arr.size(); ++i)605arr[i] = static_cast<int>(i);606607const auto& carr = arr;608std::span<const int> csp = carr.cspan(2, 3);609EXPECT_EQ(csp.size(), 3u);610EXPECT_EQ(csp[0], 2);611EXPECT_EQ(csp[2], 4);612}613614TEST(DynamicHeapArray, CopyAssignment)615{616DynamicHeapArray<int> arr1(5);617for (size_t i = 0; i < arr1.size(); ++i)618arr1[i] = static_cast<int>(i * 2);619620DynamicHeapArray<int> arr2;621arr2 = arr1;622623EXPECT_EQ(arr2.size(), arr1.size());624EXPECT_NE(arr2.data(), arr1.data());625for (size_t i = 0; i < arr1.size(); ++i)626EXPECT_EQ(arr2[i], arr1[i]);627}628629TEST(DynamicHeapArray, MoveAssignment)630{631DynamicHeapArray<int> arr1(5);632int* original_data = arr1.data();633arr1.fill(42);634635DynamicHeapArray<int> arr2;636arr2 = std::move(arr1);637638EXPECT_EQ(arr2.data(), original_data);639EXPECT_EQ(arr2.size(), 5u);640EXPECT_EQ(arr1.size(), 0u);641EXPECT_EQ(arr1.data(), nullptr);642643for (size_t i = 0; i < arr2.size(); ++i)644EXPECT_EQ(arr2[i], 42);645}646647TEST(DynamicHeapArray, AlignedAllocation)648{649constexpr size_t alignment = 64;650DynamicHeapArray<int, alignment> arr(16);651652uintptr_t addr = reinterpret_cast<uintptr_t>(arr.data());653EXPECT_EQ(addr % alignment, 0u);654}655656TEST(DynamicHeapArray, AlignedResize)657{658constexpr size_t alignment = 64;659DynamicHeapArray<int, alignment> arr(8);660arr.fill(42);661662arr.resize(32);663664uintptr_t addr = reinterpret_cast<uintptr_t>(arr.data());665EXPECT_EQ(addr % alignment, 0u);666667// Original data preserved668for (size_t i = 0; i < 8; ++i)669EXPECT_EQ(arr[i], 42);670}671672TEST(DynamicHeapArray, DifferentTypes)673{674DynamicHeapArray<double> arr(3);675arr[0] = 1.5;676arr[1] = 2.5;677arr[2] = 3.5;678679EXPECT_DOUBLE_EQ(arr[0], 1.5);680EXPECT_DOUBLE_EQ(arr[1], 2.5);681EXPECT_DOUBLE_EQ(arr[2], 3.5);682EXPECT_EQ(arr.size_bytes(), 3u * sizeof(double));683}684685TEST(DynamicHeapArray, RangeBasedFor)686{687DynamicHeapArray<int> arr(5);688int val = 0;689for (auto& elem : arr)690elem = val++;691692val = 0;693for (const auto& elem : arr)694{695EXPECT_EQ(elem, val);696++val;697}698}699700TEST(DynamicHeapArray, ByteArray)701{702DynamicHeapArray<std::byte> arr(16);703for (size_t i = 0; i < arr.size(); ++i)704arr[i] = static_cast<std::byte>(i);705706EXPECT_EQ(arr.size(), 16u);707EXPECT_EQ(arr.size_bytes(), 16u);708709for (size_t i = 0; i < arr.size(); ++i)710EXPECT_EQ(arr[i], static_cast<std::byte>(i));711}712713TEST(DynamicHeapArray, EmptyRangeConstruction)714{715int* empty = nullptr;716DynamicHeapArray<int> arr(empty, empty);717718EXPECT_TRUE(arr.empty());719EXPECT_EQ(arr.size(), 0u);720EXPECT_EQ(arr.data(), nullptr);721}722723TEST(DynamicHeapArray, EmptyCountConstruction)724{725int* ptr = nullptr;726DynamicHeapArray<int> arr(ptr, static_cast<size_t>(0));727728EXPECT_TRUE(arr.empty());729EXPECT_EQ(arr.size(), 0u);730EXPECT_EQ(arr.data(), nullptr);731}732733TEST(FixedHeapArray, CopyAssignmentCopiesWrongDirection)734{735FixedHeapArray<int, 4> src;736FixedHeapArray<int, 4> dst;737738src[0] = 1;739src[1] = 2;740src[2] = 3;741src[3] = 4;742dst[0] = 0;743dst[1] = 0;744dst[2] = 0;745dst[3] = 0;746747dst = src; // Should copy src -> dst748749// After assignment, dst should have src's values750EXPECT_EQ(dst[0], 1);751EXPECT_EQ(dst[1], 2);752EXPECT_EQ(dst[2], 3);753EXPECT_EQ(dst[3], 4);754}755756TEST(FixedHeapArray, EqualityOperatorMissingReturnTrue)757{758FixedHeapArray<int, 4> a;759FixedHeapArray<int, 4> b;760761a[0] = 1;762a[1] = 2;763a[2] = 3;764a[3] = 4;765b[0] = 1;766b[1] = 2;767b[2] = 3;768b[3] = 4;769770// Both arrays have identical content, should return true771EXPECT_TRUE(a == b);772}773774TEST(FixedHeapArray, InequalityOperatorReturnTrue)775{776FixedHeapArray<int, 4> a;777FixedHeapArray<int, 4> b;778779a[0] = 1;780a[1] = 2;781a[2] = 3;782a[3] = 4;783b[0] = 1;784b[1] = 2;785b[2] = 3;786b[3] = 5; // Last element differs787788// Arrays differ, inequality should return true789EXPECT_TRUE(a != b);790}791792TEST(DynamicHeapArray, EqualityOperatorReturnTrue)793{794DynamicHeapArray<int> a(4);795DynamicHeapArray<int> b(4);796797a[0] = 1;798a[1] = 2;799a[2] = 3;800a[3] = 4;801b[0] = 1;802b[1] = 2;803b[2] = 3;804b[3] = 4;805806// Both arrays have identical content, should return true807EXPECT_TRUE(a == b);808}809810TEST(DynamicHeapArray, EqualityOperatorWhenSizesDiffer)811{812DynamicHeapArray<int> a(4);813DynamicHeapArray<int> b(8);814815// Different sizes should NOT be equal816EXPECT_FALSE(a == b);817}818819TEST(DynamicHeapArray, InequalityOperatorWhenSizesDiffer)820{821DynamicHeapArray<int> a(4);822DynamicHeapArray<int> b(8);823824// Different sizes should be not-equal825EXPECT_TRUE(a != b);826}827828829