2020-11-01 17:45:45 -06:00
|
|
|
#include "storm/Array.hpp"
|
2020-12-08 19:40:26 -06:00
|
|
|
#include "storm/String.hpp"
|
2020-11-01 17:45:45 -06:00
|
|
|
#include "test/Test.hpp"
|
2020-09-24 23:33:18 -05:00
|
|
|
|
2023-02-05 21:36:49 -06:00
|
|
|
struct TestArrayObject {
|
|
|
|
|
uint32_t index = 0;
|
|
|
|
|
};
|
|
|
|
|
|
2020-12-08 19:42:37 -06:00
|
|
|
TEST_CASE("TSBaseArray", "[array]") {
|
2020-09-24 23:33:18 -05:00
|
|
|
SECTION("constructs correctly") {
|
|
|
|
|
TSBaseArray<uint32_t> array;
|
2023-02-21 22:10:14 -06:00
|
|
|
SUCCEED();
|
2020-09-24 23:33:18 -05:00
|
|
|
}
|
|
|
|
|
}
|
2020-09-24 23:44:35 -05:00
|
|
|
|
2020-12-08 19:40:26 -06:00
|
|
|
TEST_CASE("TSBaseArray::MemFileName", "[array]") {
|
|
|
|
|
SECTION("returns a non-empty string") {
|
|
|
|
|
TSBaseArray<uint32_t> array;
|
|
|
|
|
REQUIRE(SStrLen(array.MemFileName()) > 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-08 23:12:59 -06:00
|
|
|
TEST_CASE("TSBaseArray::MemLineNo", "[array]") {
|
|
|
|
|
SECTION("returns a negative number") {
|
|
|
|
|
TSBaseArray<uint32_t> array;
|
|
|
|
|
REQUIRE(array.MemLineNo() < 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-08 19:42:37 -06:00
|
|
|
TEST_CASE("TSFixedArray", "[array]") {
|
2020-09-24 23:44:35 -05:00
|
|
|
SECTION("constructs correctly") {
|
|
|
|
|
TSFixedArray<uint32_t> array;
|
|
|
|
|
REQUIRE(array.Count() == 0);
|
2023-02-21 22:10:14 -06:00
|
|
|
REQUIRE(array.Ptr() == nullptr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST_CASE("TSFixedArray::Clear", "[array]") {
|
|
|
|
|
SECTION("clears already empty array") {
|
|
|
|
|
TSFixedArray<uint32_t> array;
|
|
|
|
|
array.Clear();
|
|
|
|
|
|
|
|
|
|
CHECK(array.Count() == 0);
|
|
|
|
|
CHECK(array.Ptr() == nullptr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SECTION("clears non-empty array") {
|
|
|
|
|
TSFixedArray<uint32_t> array;
|
|
|
|
|
array.SetCount(10);
|
|
|
|
|
|
|
|
|
|
CHECK(array.Count() == 10);
|
|
|
|
|
CHECK(array.Ptr() != nullptr);
|
|
|
|
|
|
|
|
|
|
array.Clear();
|
|
|
|
|
|
|
|
|
|
CHECK(array.Count() == 0);
|
|
|
|
|
CHECK(array.Ptr() == nullptr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SECTION("permits setting entry after clearing and resizing") {
|
|
|
|
|
TSFixedArray<uint32_t> array;
|
|
|
|
|
array.SetCount(1);
|
|
|
|
|
array[0] = 1234;
|
|
|
|
|
|
|
|
|
|
CHECK(array.Count() == 1);
|
|
|
|
|
CHECK(array.Ptr() != nullptr);
|
|
|
|
|
CHECK(array[0] == 1234);
|
|
|
|
|
|
|
|
|
|
array.Clear();
|
|
|
|
|
|
|
|
|
|
CHECK(array.Count() == 0);
|
|
|
|
|
CHECK(array.Ptr() == nullptr);
|
|
|
|
|
|
|
|
|
|
array.SetCount(1);
|
|
|
|
|
array[0] = 4567;
|
|
|
|
|
|
|
|
|
|
CHECK(array.Count() == 1);
|
|
|
|
|
CHECK(array.Ptr() != nullptr);
|
|
|
|
|
CHECK(array[0] == 4567);
|
2020-09-24 23:44:35 -05:00
|
|
|
}
|
|
|
|
|
}
|
2020-09-25 16:50:56 -05:00
|
|
|
|
2023-01-15 17:42:00 -06:00
|
|
|
TEST_CASE("TSFixedArray::Top", "[array]") {
|
|
|
|
|
SECTION("returns nullptr when array has no elements") {
|
|
|
|
|
TSFixedArray<uint32_t> array;
|
|
|
|
|
array.SetCount(0);
|
|
|
|
|
REQUIRE(array.Top() == nullptr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SECTION("returns first element when array has 1 element") {
|
|
|
|
|
TSFixedArray<uint32_t> array;
|
|
|
|
|
array.SetCount(1);
|
|
|
|
|
array[0] = 1000;
|
|
|
|
|
REQUIRE(*array.Top() == 1000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SECTION("returns last element when array has 2 elements") {
|
|
|
|
|
TSFixedArray<uint32_t> array;
|
|
|
|
|
array.SetCount(2);
|
|
|
|
|
array[0] = 1000;
|
|
|
|
|
array[1] = 1001;
|
|
|
|
|
REQUIRE(*array.Top() == 1001);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-12-08 19:42:37 -06:00
|
|
|
TEST_CASE("TSGrowableArray", "[array]") {
|
2020-09-25 16:50:56 -05:00
|
|
|
SECTION("constructs correctly") {
|
|
|
|
|
TSGrowableArray<uint32_t> array;
|
|
|
|
|
REQUIRE(array.Count() == 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-02-05 21:36:49 -06:00
|
|
|
|
|
|
|
|
TEST_CASE("TSGrowableArray::Reserve", "[array]") {
|
|
|
|
|
SECTION("reserves slot when array is empty") {
|
|
|
|
|
TSGrowableArray<uint32_t> array;
|
|
|
|
|
array.Reserve(1, 1);
|
|
|
|
|
REQUIRE(array.Count() == 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SECTION("reserves slot when array has elements") {
|
|
|
|
|
TSGrowableArray<TestArrayObject> array;
|
|
|
|
|
|
|
|
|
|
auto elementA = array.New();
|
|
|
|
|
elementA->index = 10;
|
|
|
|
|
|
|
|
|
|
array.Reserve(1, 1);
|
|
|
|
|
|
|
|
|
|
auto elementB = array.New();
|
|
|
|
|
elementB->index = 20;
|
|
|
|
|
|
|
|
|
|
REQUIRE(array.Count() == 2);
|
|
|
|
|
REQUIRE(array[0].index == 10);
|
|
|
|
|
REQUIRE(array[1].index == 20);
|
|
|
|
|
}
|
|
|
|
|
}
|