#include "EngineTest.h" #include "Containers/Array.h" #include "MinimalEngine.h" #include #include #include using namespace Seele; BOOST_AUTO_TEST_SUITE(Array_Suite) BOOST_AUTO_TEST_CASE(empty_constructur) { Array array; BOOST_CHECK_EQUAL(array.size(), 0); } BOOST_AUTO_TEST_CASE(initialial_size) { Array array(3); BOOST_CHECK_EQUAL(array.size(), 3); } BOOST_AUTO_TEST_CASE(resize) { Array array; array.add(2); array.add(3); BOOST_CHECK_EQUAL(array.size(), 2); array.resize(5); BOOST_CHECK_EQUAL(array.size(), 5); } BOOST_AUTO_TEST_CASE(clear) { Array array; array.add(3); array.add(2); array.add(6); BOOST_CHECK_EQUAL(array.size(), 3); array.clear(); BOOST_CHECK_EQUAL(array.size(), 0); } BOOST_AUTO_TEST_CASE(remove_keeporder) { Array array; array.add(1); array.add(2); array.add(3); array.add(4); array.add(5); array.remove(1); BOOST_CHECK_EQUAL(array[1], 3); BOOST_CHECK_EQUAL(array[2], 4); BOOST_CHECK_EQUAL(array[3], 5); BOOST_CHECK_EQUAL(array.size(), 4); } BOOST_AUTO_TEST_CASE(remove_swap) { Array array; array.add(1); array.add(2); array.add(3); array.add(4); array.add(5); array.remove(1, false); BOOST_CHECK_EQUAL(array[1], 5); BOOST_CHECK_EQUAL(array[2], 3); BOOST_CHECK_EQUAL(array[3], 4); BOOST_CHECK_EQUAL(array.size(), 4); } BOOST_AUTO_TEST_CASE(remove_iterator) { Array array; array.add(1); array.add(2); array.add(3); array.add(4); array.add(5); array.remove(array.find(1), false); BOOST_CHECK_EQUAL(array[0], 5); BOOST_CHECK_EQUAL(array[1], 2); BOOST_CHECK_EQUAL(array[2], 3); BOOST_CHECK_EQUAL(array[3], 4); BOOST_CHECK_EQUAL(array.size(), 4); } BOOST_AUTO_TEST_CASE(remove_iterator_keep_order) { Array array; array.add(1); array.add(2); array.add(3); array.add(4); array.add(5); array.remove(array.find(1)); BOOST_CHECK_EQUAL(array[0], 2); BOOST_CHECK_EQUAL(array[1], 3); BOOST_CHECK_EQUAL(array[2], 4); BOOST_CHECK_EQUAL(array[3], 5); BOOST_CHECK_EQUAL(array.size(), 4); } BOOST_AUTO_TEST_CASE(random_access) { Array array; array.add(4); array.add(5); array.add(6); BOOST_CHECK_EQUAL(array[2], 6); BOOST_CHECK_EQUAL(array[0], 4); } class TestStruct { public: uint32 data; ~TestStruct() { data = 1; } }; DECLARE_REF(TestStruct); BOOST_AUTO_TEST_CASE(refptr_interaction) { uint32* dataPtr; { PTestStruct test = new TestStruct(); test->data = 32123; dataPtr = &test->data; { Array arr(1); arr[0] = test; } BOOST_CHECK_EQUAL(test->data, 32123); } } /*BOOST_AUTO_TEST_CASE(benchmark) { using namespace std::chrono; srand(time(NULL)); const uint32 TEST_SIZE = 1024 * 256; uint32* testSet = new uint32[TEST_SIZE]; #pragma loop( hint_parallel( 0 ) ) for (int i = 0; i < TEST_SIZE; ++i) { testSet[i] = rand(); } high_resolution_clock::time_point start_vector = high_resolution_clock::now(); std::vector vec; for (int i = 0; i < TEST_SIZE; ++i) { vec.push_back(testSet[i]); } high_resolution_clock::time_point end_vector = high_resolution_clock::now(); float time_vector = duration_cast(end_vector - start_vector).count(); std::random_shuffle(testSet, testSet + TEST_SIZE); high_resolution_clock::time_point start_remove_vector = high_resolution_clock::now(); for (int i = 0; i < TEST_SIZE; ++i) { vec.erase(std::find(vec.begin(), vec.end(), testSet[i])); } high_resolution_clock::time_point end_remove_vector = high_resolution_clock::now(); float remove_vector = duration_cast(end_remove_vector - start_remove_vector).count(); high_resolution_clock::time_point start_array = high_resolution_clock::now(); Array arr; for (int i = 0; i < TEST_SIZE; ++i) { arr.add(testSet[i]); } high_resolution_clock::time_point end_array = high_resolution_clock::now(); float time_array = duration_cast(end_array - start_array).count(); high_resolution_clock::time_point start_remove_array = high_resolution_clock::now(); for (int i = 0; i < TEST_SIZE; ++i) { arr.remove(arr.find(testSet[i]), false); } high_resolution_clock::time_point end_remove_array = high_resolution_clock::now(); float remove_array = duration_cast(end_remove_array - start_remove_array).count(); std::cout << "Vector: " << time_vector << "ms Array: " << time_array << "ms" << std::endl; std::cout << "Vector remove: " << remove_vector << "ms Array remove: " << remove_array << "ms" << std::endl; delete[] testSet; }*/ BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE(StaticArray_Suite) BOOST_AUTO_TEST_CASE(empty_constructur) { StaticArray array; BOOST_CHECK_EQUAL(array.size(), 2); } BOOST_AUTO_TEST_CASE(initialial_size) { StaticArray array(3); BOOST_CHECK_EQUAL(array.size(), 3); BOOST_CHECK_EQUAL(array[1], 3); } BOOST_AUTO_TEST_CASE(random_access) { StaticArray array; array[0] = 4; array[1] = 5; array[2] = 6; BOOST_CHECK_EQUAL(array[0], 4); BOOST_CHECK_EQUAL(array[2], 6); } BOOST_AUTO_TEST_SUITE_END()