//#include "CatchDefinitions.h" // //#include //#include //#include // //#include //#include // //#include // // //TEST_CASE( "Local Pool Simple Tests [1 Pool]" , "[TestPool]") { //// uint16_t numberOfElements[1] = {1}; //// uint16_t sizeofElements[1] = {10}; // LocalPool::LocalPoolConfig config = {{1, 10}}; // LocalPool simplePool(0, config); // std::array testDataArray; // std::array receptionArray; // store_address_t testStoreId; // ReturnValue_t result = retval::CATCH_FAILED; // uint8_t *pointer = nullptr; // const uint8_t * constPointer = nullptr; // // for(size_t i = 0; i < testDataArray.size(); i++) { // testDataArray[i] = i; // } // size_t size = 10; // // SECTION ( "Basic tests") { // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // result = simplePool.getData(testStoreId, &constPointer, &size); // REQUIRE(result == retval::CATCH_OK); // memcpy(receptionArray.data(), constPointer, size); // for(size_t i = 0; i < size; i++) { // CHECK(receptionArray[i] == i ); // } // memset(receptionArray.data(), 0, size); // result = simplePool.modifyData(testStoreId, &pointer, &size); // memcpy(receptionArray.data(), pointer, size); // REQUIRE(result == retval::CATCH_OK); // for(size_t i = 0; i < size; i++) { // CHECK(receptionArray[i] == i ); // } // result = simplePool.deleteData(testStoreId); // REQUIRE(result == retval::CATCH_OK); // result = simplePool.addData(&testStoreId, testDataArray.data(), 15); // CHECK (result == (int) StorageManagerIF::DATA_TOO_LARGE); // } // // SECTION ( "Reservation Tests ") { // pointer = nullptr; // result = simplePool.getFreeElement(&testStoreId, size, &pointer); // REQUIRE (result == retval::CATCH_OK); // memcpy(pointer, testDataArray.data(), size); // constPointer = nullptr; // result = simplePool.getData(testStoreId, &constPointer, &size); // // REQUIRE (result == retval::CATCH_OK); // memcpy(receptionArray.data(), constPointer, size); // for(size_t i = 0; i < size; i++) { // CHECK(receptionArray[i] == i ); // } // } // // SECTION ( "Add, delete, add, add when full") { // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // result = simplePool.getData(testStoreId, &constPointer, &size); // REQUIRE( result == retval::CATCH_OK); // memcpy(receptionArray.data(), constPointer, size); // for(size_t i = 0; i < size; i++) { // CHECK(receptionArray[i] == i ); // } // // result = simplePool.deleteData(testStoreId); // REQUIRE(result == retval::CATCH_OK); // // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // result = simplePool.getData(testStoreId, &constPointer, &size); // REQUIRE( result == retval::CATCH_OK); // memcpy(receptionArray.data(), constPointer, size); // for(size_t i = 0; i < size; i++) { // CHECK(receptionArray[i] == i ); // } // // store_address_t newAddress; // result = simplePool.addData(&newAddress, testDataArray.data(), size); // REQUIRE(result == (int) StorageManagerIF::DATA_STORAGE_FULL); // // // Packet Index to high intentionally // newAddress.packetIndex = 2; // pointer = testDataArray.data(); // result = simplePool.modifyData(newAddress, &pointer, &size); // REQUIRE(result == (int) StorageManagerIF::ILLEGAL_STORAGE_ID); // // result = simplePool.deleteData(newAddress); // REQUIRE(result == (int) StorageManagerIF::ILLEGAL_STORAGE_ID); // // newAddress.packetIndex = 0; // newAddress.poolIndex = 2; // result = simplePool.deleteData(newAddress); // REQUIRE(result == (int) StorageManagerIF::ILLEGAL_STORAGE_ID); // } // // SECTION ( "Initialize and clear store, delete with pointer") { // result = simplePool.initialize(); // REQUIRE(result == retval::CATCH_OK); // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // simplePool.clearStore(); // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // result = simplePool.modifyData(testStoreId, &pointer, &size); // REQUIRE(result == retval::CATCH_OK); // store_address_t newId; // result = simplePool.deleteData(pointer, size, &testStoreId); // REQUIRE(result == retval::CATCH_OK); // REQUIRE(testStoreId.raw != (uint32_t) StorageManagerIF::INVALID_ADDRESS); // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // } //} // //int runIdx = 0; // //TEST_CASE( "Local Pool Extended Tests [3 Pools]" , "[TestPool2]") { // LocalPool::LocalPoolConfig* config; // if(runIdx == 0) { // config = new LocalPool::LocalPoolConfig{{10, 5}, {5, 10}, {2, 20}}; // } // else { // // shufle the order, they should be sort implictely so that the // // order is ascending for the page sizes. // config = new LocalPool::LocalPoolConfig{{5, 10}, {2, 20}, {10, 5}}; // size_t lastSize = 0; // for(const auto& pair: *config) { // CHECK(pair.second > lastSize); // lastSize = pair.second; // } // } // runIdx++; // // LocalPool simplePool(0, *config); // std::array testDataArray; // std::array receptionArray; // store_address_t testStoreId; // ReturnValue_t result = retval::CATCH_FAILED; // for(size_t i = 0; i < testDataArray.size(); i++) { // testDataArray[i] = i; // } // size_t size = 0; // // SECTION ("Basic tests") { // size = 8; // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // // Should be on second page of the pool now for 8 bytes // CHECK(testStoreId.poolIndex == 1); // CHECK(testStoreId.packetIndex == 0); // // size = 15; // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // // Should be on third page of the pool now for 15 bytes // CHECK(testStoreId.poolIndex == 2); // CHECK(testStoreId.packetIndex == 0); // // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // // Should be on third page of the pool now for 15 bytes // CHECK(testStoreId.poolIndex == 2); // CHECK(testStoreId.packetIndex == 1); // // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // // Should be on third page of the pool now for 15 bytes // REQUIRE(result == (int) LocalPool::DATA_STORAGE_FULL); // // size = 8; // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // // Should still work // CHECK(testStoreId.poolIndex == 1); // CHECK(testStoreId.packetIndex == 1); // // // fill the rest of the pool // for(uint8_t idx = 2; idx < 5; idx++) { // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // CHECK(testStoreId.poolIndex == 1); // CHECK(testStoreId.packetIndex == idx); // } // } // // SECTION ("Fill Count and Clearing") { // //SECTION("Basic tests"); // uint8_t bytesWritten = 0; // simplePool.getFillCount(receptionArray.data(), &bytesWritten); // // fill count should be all zeros now. // CHECK(bytesWritten == 4); // CHECK(receptionArray[0] == 0); // CHECK(receptionArray[1] == 0); // CHECK(receptionArray[2] == 0); // CHECK(receptionArray[3] == 0); // // // now fill the store completely. // size = 5; // for(uint8_t idx = 0; idx < 10; idx++) { // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // CHECK(testStoreId.poolIndex == 0); // CHECK(testStoreId.packetIndex == idx); // } // size = 10; // for(uint8_t idx = 0; idx < 5; idx++) { // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // CHECK(testStoreId.poolIndex == 1); // CHECK(testStoreId.packetIndex == idx); // } // size = 20; // for(uint8_t idx = 0; idx < 2; idx++) { // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // CHECK(testStoreId.poolIndex == 2); // CHECK(testStoreId.packetIndex == idx); // } // bytesWritten = 0; // simplePool.getFillCount(receptionArray.data(), &bytesWritten); // // fill count should be all 100 now. // CHECK(bytesWritten == 4); // CHECK(receptionArray[0] == 100); // CHECK(receptionArray[1] == 100); // CHECK(receptionArray[2] == 100); // CHECK(receptionArray[3] == 100); // // // now clear the store // simplePool.clearStore(); // bytesWritten = 0; // simplePool.getFillCount(receptionArray.data(), &bytesWritten); // CHECK(bytesWritten == 4); // CHECK(receptionArray[0] == 0); // CHECK(receptionArray[1] == 0); // CHECK(receptionArray[2] == 0); // CHECK(receptionArray[3] == 0); // // // now fill one page // size = 5; // for(uint8_t idx = 0; idx < 10; idx++) { // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // CHECK(testStoreId.poolIndex == 0); // CHECK(testStoreId.packetIndex == idx); // } // bytesWritten = 0; // simplePool.getFillCount(receptionArray.data(), &bytesWritten); // // First page full, median fill count is 33 % // CHECK(bytesWritten == 4); // CHECK(receptionArray[0] == 100); // CHECK(receptionArray[1] == 0); // CHECK(receptionArray[2] == 0); // CHECK(receptionArray[3] == 33); // // // now fill second page // size = 10; // for(uint8_t idx = 0; idx < 5; idx++) { // result = simplePool.addData(&testStoreId, testDataArray.data(), size); // REQUIRE(result == retval::CATCH_OK); // CHECK(testStoreId.poolIndex == 1); // CHECK(testStoreId.packetIndex == idx); // } // bytesWritten = 0; // simplePool.getFillCount(receptionArray.data(), &bytesWritten); // // First and second page full, median fill count is 66 % // CHECK(bytesWritten == 4); // CHECK(receptionArray[0] == 100); // CHECK(receptionArray[1] == 100); // CHECK(receptionArray[2] == 0); // CHECK(receptionArray[3] == 66); // // // now clear first page // simplePool.clearPage(0); // bytesWritten = 0; // simplePool.getFillCount(receptionArray.data(), &bytesWritten); // // Second page full, median fill count is 33 % // CHECK(bytesWritten == 4); // CHECK(receptionArray[0] == 0); // CHECK(receptionArray[1] == 100); // CHECK(receptionArray[2] == 0); // CHECK(receptionArray[3] == 33); // } // // delete(config); //}