230 lines
5.1 KiB
C++
230 lines
5.1 KiB
C++
#include "Vector.h"
|
|
#include <iostream>
|
|
|
|
#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this
|
|
// in one cpp file
|
|
#include "catch_amalgamated.hpp"
|
|
|
|
SCENARIO("Vector size and length are correct", "[vector]") {
|
|
Vector<int> v(20);
|
|
v.push_back(1);
|
|
|
|
REQUIRE(v.size() == 1);
|
|
REQUIRE(v.length() == 20);
|
|
}
|
|
|
|
SCENARIO("The bracket operator returns the correct element", "[vector]") {
|
|
Vector<int> v(20);
|
|
v.push_back(1);
|
|
v.push_back(2);
|
|
v.push_back(3);
|
|
|
|
REQUIRE(v[1] == 2);
|
|
}
|
|
|
|
SCENARIO("Equality is returned correctly", "[vector]") {
|
|
GIVEN("Two vectors with the same items") {
|
|
Vector<int> v1;
|
|
Vector<int> v2;
|
|
|
|
v1.push_back(1);
|
|
v2.push_back(1);
|
|
|
|
v1.push_back(5);
|
|
v2.push_back(5);
|
|
|
|
REQUIRE(v1.size() == 2);
|
|
REQUIRE(v2.size() == 2);
|
|
|
|
WHEN("Comparing them") {
|
|
bool equals = v1 == v2;
|
|
|
|
THEN("The result should be true") {
|
|
REQUIRE(equals);
|
|
}
|
|
}
|
|
}
|
|
|
|
GIVEN("Two vectors with different items") {
|
|
Vector<int> v1;
|
|
Vector<int> v2;
|
|
|
|
v1.push_back(1);
|
|
v2.push_back(2);
|
|
|
|
v1.push_back(5);
|
|
v2.push_back(5);
|
|
|
|
REQUIRE(v1.size() == 2);
|
|
REQUIRE(v2.size() == 2);
|
|
|
|
WHEN("Comparing them") {
|
|
bool equals = v1 == v2;
|
|
|
|
THEN("The result should be false") {
|
|
REQUIRE_FALSE(equals);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO("Erasing an item removes it and moves the following ones forward",
|
|
"[vector]") {
|
|
GIVEN("Two vectors with almost identical items") {
|
|
Vector<int> v1;
|
|
Vector<int> v2;
|
|
|
|
v1.push_back(1);
|
|
v2.push_back(1);
|
|
|
|
v1.push_back(2);
|
|
v2.push_back(5);
|
|
|
|
v1.push_back(5);
|
|
|
|
v1.push_back(10);
|
|
v2.push_back(10);
|
|
|
|
REQUIRE(v1.size() == 4);
|
|
REQUIRE(v2.size() == 3);
|
|
|
|
WHEN("Comparing them") {
|
|
bool equals = v1 == v2;
|
|
|
|
THEN("The result should be false") {
|
|
REQUIRE_FALSE(equals);
|
|
}
|
|
}
|
|
|
|
WHEN("Erasing the different item") {
|
|
v1.erase(1);
|
|
bool equals = v1 == v2;
|
|
|
|
THEN("The result should be true") {
|
|
REQUIRE(equals);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO("Copy Assignment", "[vector]") {
|
|
GIVEN("Two vectors with identical items") {
|
|
Vector<int> v1;
|
|
Vector<int> v2;
|
|
|
|
v1.push_back(1);
|
|
v2.push_back(1);
|
|
|
|
v1.push_back(5);
|
|
v2.push_back(5);
|
|
|
|
REQUIRE(v1.size() == 2);
|
|
REQUIRE(v2.size() == 2);
|
|
|
|
WHEN("Copy assigning the second vector to a third vector") {
|
|
Vector<int> v3;
|
|
v3 = v2;
|
|
|
|
THEN("All vectors should be identical") {
|
|
bool equals = v1 == v2 && v2 == v3 && v1 == v3;
|
|
REQUIRE(equals);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO("Move Assignment", "[vector]") {
|
|
GIVEN("Two vectors with identical items") {
|
|
Vector<int> v1;
|
|
Vector<int> v2;
|
|
|
|
v1.push_back(1);
|
|
v2.push_back(1);
|
|
|
|
v1.push_back(5);
|
|
v2.push_back(5);
|
|
|
|
REQUIRE(v1.size() == 2);
|
|
REQUIRE(v2.size() == 2);
|
|
|
|
WHEN("Move assigning the second vector to a third vector") {
|
|
Vector<int> v3;
|
|
v3 = std::move(v2);
|
|
|
|
THEN("The first and third vector should be identical") {
|
|
bool equals = v1 == v3;
|
|
REQUIRE(equals);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO("Reserve additional space", "[vector]") {
|
|
GIVEN("A vector with a given capacity") {
|
|
Vector<int> v(5);
|
|
|
|
REQUIRE(v.length() == 5);
|
|
|
|
WHEN("Reserving additional space") {
|
|
v.reserve(10);
|
|
|
|
THEN("The capacity has increased accordingly") {
|
|
REQUIRE(v.length() == 15);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SCENARIO("Resizing a vector", "[vector]") {
|
|
GIVEN("A vector with 3 items") {
|
|
Vector<int> v;
|
|
|
|
v.push_back(1);
|
|
v.push_back(2);
|
|
v.push_back(3);
|
|
|
|
Vector<int> target;
|
|
|
|
target.push_back(1);
|
|
target.push_back(2);
|
|
target.push_back(3);
|
|
target.push_back(0);
|
|
target.push_back(0);
|
|
|
|
WHEN("Resizing to 5") {
|
|
v.resize(5);
|
|
|
|
THEN("The size should be 5") {
|
|
REQUIRE(v.size() == 5);
|
|
}
|
|
|
|
THEN("2 new default items should've been added") {
|
|
bool equals = v == target;
|
|
REQUIRE(equals);
|
|
}
|
|
}
|
|
|
|
WHEN("Resizing to 1") {
|
|
v.resize(1);
|
|
|
|
THEN("The size should be 1") {
|
|
REQUIRE(v.size() == 1);
|
|
}
|
|
|
|
THEN("The remaining element should be correct") {
|
|
REQUIRE(v[0] == 1);
|
|
}
|
|
|
|
THEN("Adding the elements again produces the same result again") {
|
|
v.push_back(2);
|
|
v.push_back(3);
|
|
v.push_back(0);
|
|
v.push_back(0);
|
|
|
|
bool equals = v == target;
|
|
REQUIRE(equals);
|
|
}
|
|
}
|
|
}
|
|
}
|