yadro-task/tests/filetape_tests.cpp
erius ad976a5a9e Added using directives to avoid excessive namespaecs
Added explicit include directories to each file, even if an already included header defined them
Removed using directives from header files
2024-10-28 12:32:14 +02:00

89 lines
2.8 KiB
C++

#include "tapelib/filetape.h"
#include <catch2/catch_test_macros.hpp>
#include <cstdint>
#include <vector>
using std::vector;
using namespace tape;
const static vector<uint32_t> TEST_DATA = {1, 12345, 0, 2222222222, 4294967295};
// NOLINTBEGIN
TEST_CASE("Reading data from a FileTape", "[filetape]") {
FileTape tape(TEST_DATA);
SECTION("Read all data sequentially") {
REQUIRE(tape.read() == TEST_DATA[0]);
REQUIRE(tape.seek_forward() == true);
REQUIRE(tape.read() == TEST_DATA[1]);
REQUIRE(tape.seek_forward() == true);
REQUIRE(tape.read() == TEST_DATA[2]);
REQUIRE(tape.seek_forward() == true);
REQUIRE(tape.read() == TEST_DATA[3]);
REQUIRE(tape.seek_forward() == true);
REQUIRE(tape.read() == TEST_DATA[4]);
}
SECTION("Read data non-sequentially") {
REQUIRE(tape.read() == TEST_DATA[0]);
REQUIRE(tape.seek_forward() == true);
REQUIRE(tape.read() == TEST_DATA[1]);
REQUIRE(tape.seek_backwards() == true);
REQUIRE(tape.read() == TEST_DATA[0]);
REQUIRE(tape.seek_forward() == true);
REQUIRE(tape.seek_forward() == true);
REQUIRE(tape.seek_forward() == true);
REQUIRE(tape.read() == TEST_DATA[3]);
REQUIRE(tape.seek_backwards() == true);
REQUIRE(tape.seek_backwards() == true);
REQUIRE(tape.read() == TEST_DATA[1]);
}
}
TEST_CASE("Seeking forward and backwards", "[filetape]") {
FileTape tape(TEST_DATA);
SECTION("Rewinding at the beginning of a file tape") {
REQUIRE(tape.seek_backwards() == false);
REQUIRE(tape.read() == TEST_DATA[0]);
REQUIRE(tape.seek_forward() == true);
REQUIRE(tape.read() == TEST_DATA[1]);
REQUIRE(tape.seek_backwards() == true);
REQUIRE(tape.seek_backwards() == false);
REQUIRE(tape.read() == TEST_DATA[0]);
}
SECTION("Seeking at the end of a file tape") {
const int size = 5;
// seek to end of a file tape
for (int i = 0; i < size - 1; i++) {
REQUIRE(tape.seek_forward() == true);
}
REQUIRE(tape.seek_forward() == false);
REQUIRE(tape.read() == TEST_DATA[4]);
REQUIRE(tape.seek_backwards() == true);
REQUIRE(tape.read() == TEST_DATA[3]);
REQUIRE(tape.seek_forward() == true);
REQUIRE(tape.seek_forward() == false);
REQUIRE(tape.read() == TEST_DATA[4]);
}
}
TEST_CASE("Writing to a file tape", "[filetape]") {
FileTape tape(3);
tape.write(0);
REQUIRE(tape.read() == 0);
tape.seek_forward();
tape.write(1);
REQUIRE(tape.read() == 1);
tape.seek_forward();
tape.write(2);
REQUIRE(tape.read() == 2);
tape.write(3);
REQUIRE(tape.read() == 3);
tape.seek_backwards();
tape.write(4);
REQUIRE(tape.read() == 4);
}
// NOLINTEND