From 51dad49d8b479ecc537acad6499926387c2de129 Mon Sep 17 00:00:00 2001 From: paradust7 <102263465+paradust7@users.noreply.github.com> Date: Sat, 7 May 2022 02:21:41 -0700 Subject: Unit tests for irrArray (#103) --- examples/AutomatedTest/test_array.cpp | 135 ++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 examples/AutomatedTest/test_array.cpp (limited to 'examples/AutomatedTest/test_array.cpp') diff --git a/examples/AutomatedTest/test_array.cpp b/examples/AutomatedTest/test_array.cpp new file mode 100644 index 0000000..5ec55ee --- /dev/null +++ b/examples/AutomatedTest/test_array.cpp @@ -0,0 +1,135 @@ +#include "irrArray.h" +#include "test_helper.h" + +using namespace irr; +using core::array; + +static void test_basics() { + array v; + v.push_back(1); // 1 + v.push_front(2); // 2, 1 + v.insert(4, 0); // 4, 2, 1 + v.insert(3, 1); // 4, 3, 2, 1 + v.insert(0, 4); // 4, 3, 2, 1, 0 + UASSERTEQ(v.size(), 5); + UASSERTEQ(v[0], 4); + UASSERTEQ(v[1], 3); + UASSERTEQ(v[2], 2); + UASSERTEQ(v[3], 1); + UASSERTEQ(v[4], 0); + array w = v; + UASSERTEQ(w.size(), 5); + UASSERT(w == v); + w.clear(); + UASSERTEQ(w.size(), 0); + UASSERTEQ(w.allocated_size(), 0); + UASSERT(w.empty()); + w = v; + UASSERTEQ(w.size(), 5); + w.set_used(3); + UASSERTEQ(w.size(), 3); + UASSERTEQ(w[0], 4); + UASSERTEQ(w[1], 3); + UASSERTEQ(w[2], 2); + UASSERTEQ(w.getLast(), 2); + w.set_used(20); + UASSERTEQ(w.size(), 20); + w = v; + w.sort(); + UASSERTEQ(w.size(), 5); + UASSERTEQ(w[0], 0); + UASSERTEQ(w[1], 1); + UASSERTEQ(w[2], 2); + UASSERTEQ(w[3], 3); + UASSERTEQ(w[4], 4); + w.erase(0); + UASSERTEQ(w.size(), 4); + UASSERTEQ(w[0], 1); + UASSERTEQ(w[1], 2); + UASSERTEQ(w[2], 3); + UASSERTEQ(w[3], 4); + w.erase(1, 2); + UASSERTEQ(w.size(), 2); + UASSERTEQ(w[0], 1); + UASSERTEQ(w[1], 4); + w.swap(v); + UASSERTEQ(w.size(), 5); + UASSERTEQ(v.size(), 2); +} + +static void test_linear_searches() { + // Populate the array with 0, 1, 2, ..., 100, 100, 99, 98, 97, ..., 0 + array arr; + for (int i = 0; i <= 100; i++) + arr.push_back(i); + for (int i = 100; i >= 0; i--) + arr.push_back(i); + s32 end = arr.size() - 1; + for (int i = 0; i <= 100; i++) { + s32 index = arr.linear_reverse_search(i); + UASSERTEQ(index, end - i); + } + for (int i = 0; i <= 100; i++) { + s32 index = arr.linear_search(i); + UASSERTEQ(index, i); + } +} + +static void test_binary_searches() { + const auto& values = { 3, 5, 1, 2, 5, 10, 19, 9, 7, 1, 2, 5, 8, 15 }; + array arr; + for (int value : values) { + arr.push_back(value); + } + // Test the const form first, it uses a linear search without sorting + const array & carr = arr; + UASSERTEQ(carr.binary_search(20), -1); + UASSERTEQ(carr.binary_search(0), -1); + UASSERTEQ(carr.binary_search(1), 2); + + // Sorted: 1, 1, 2, 2, 3, 5, 5, 5, 7, 8, 9, 10, 15, 19 + UASSERTEQ(arr.binary_search(20), -1); + UASSERTEQ(arr.binary_search(0), -1); + + for (int value : values) { + s32 i = arr.binary_search(value); + UASSERTNE(i, -1); + UASSERTEQ(arr[i], value); + } + + s32 first, last; + first = arr.binary_search_multi(1, last); + UASSERTEQ(first, 0); + UASSERTEQ(last, 1); + + first = arr.binary_search_multi(2, last); + UASSERTEQ(first, 2); + UASSERTEQ(last, 3); + + first = arr.binary_search_multi(3, last); + UASSERTEQ(first, 4); + UASSERTEQ(last, 4); + + first = arr.binary_search_multi(4, last); + UASSERTEQ(first, -1); + + first = arr.binary_search_multi(5, last); + UASSERTEQ(first, 5); + UASSERTEQ(last, 7); + + first = arr.binary_search_multi(7, last); + UASSERTEQ(first, 8); + UASSERTEQ(last, 8); + + first = arr.binary_search_multi(19, last); + UASSERTEQ(first, 13); + UASSERTEQ(last, 13); +} + +void test_irr_array() +{ + test_basics(); + test_linear_searches(); + test_binary_searches(); + std::cout << " test_irr_array PASSED" << std::endl; +} -- cgit v1.2.3