|
@@ -0,0 +1,166 @@
|
|
|
+#include "tests/ArrayListTests.h"
|
|
|
+
|
|
|
+#include "data/ArrayList.h"
|
|
|
+#include "test/Test.h"
|
|
|
+
|
|
|
+using IntList = Core::ArrayList<int, 20>;
|
|
|
+
|
|
|
+static void testAdd(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(5), "add works 1");
|
|
|
+
|
|
|
+ test.checkEqual(5, list[0], "contains added value");
|
|
|
+ test.checkEqual(1, list.getLength(), "sizes is increased by add");
|
|
|
+}
|
|
|
+
|
|
|
+static void testMultipleAdd(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(4), "add works 2");
|
|
|
+ test.checkFalse(list.add(3), "add works 3");
|
|
|
+ test.checkFalse(list.add(2), "add works 4");
|
|
|
+ test.checkEqual(4, list[0], "contains added value 1");
|
|
|
+ test.checkEqual(3, list[1], "contains added value 2");
|
|
|
+ test.checkEqual(2, list[2], "contains added value 3");
|
|
|
+ test.checkEqual(3, list.getLength(), "sizes is increased by add");
|
|
|
+}
|
|
|
+
|
|
|
+static void testAddReplace(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(5), "add works 5");
|
|
|
+ list[0] = 3;
|
|
|
+ test.checkEqual(3, list[0], "value is overwritten");
|
|
|
+}
|
|
|
+
|
|
|
+static void testClear(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(5), "add works 6");
|
|
|
+ test.checkFalse(list.add(4), "add works 7");
|
|
|
+ list.clear();
|
|
|
+ test.checkEqual(0, list.getLength(), "length is 0 after clear");
|
|
|
+}
|
|
|
+
|
|
|
+static void testOverflow(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ for(int i = 0; i < 20; i++) {
|
|
|
+ test.checkEqual(false, list.add(i),
|
|
|
+ "add returns false without overflow");
|
|
|
+ }
|
|
|
+ for(int i = 0; i < 1000000; i++) {
|
|
|
+ test.checkEqual(true, list.add(i), "add returns true with overflow");
|
|
|
+ }
|
|
|
+ for(int i = 0; i < list.getLength(); i++) {
|
|
|
+ test.checkEqual(i, list[i], "still contains values after overflow");
|
|
|
+ }
|
|
|
+ test.checkEqual(true, true, "survives overflow");
|
|
|
+}
|
|
|
+
|
|
|
+static void testCopy(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(1), "add works 8");
|
|
|
+ test.checkFalse(list.add(2), "add works 9");
|
|
|
+ test.checkFalse(list.add(3), "add works 10");
|
|
|
+
|
|
|
+ IntList copy(list);
|
|
|
+ test.checkEqual(list.getLength(), copy.getLength(), "copy has same length");
|
|
|
+ for(int i = 0; i < copy.getLength() && i < list.getLength(); i++) {
|
|
|
+ test.checkEqual(list[i], copy[i], "copy has same values");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void testCopyAssignment(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(1), "add works 11");
|
|
|
+ test.checkFalse(list.add(2), "add works 12");
|
|
|
+ test.checkFalse(list.add(3), "add works 13");
|
|
|
+
|
|
|
+ IntList copy;
|
|
|
+ copy = list;
|
|
|
+ test.checkEqual(list.getLength(), copy.getLength(),
|
|
|
+ "copy assignment has same length");
|
|
|
+ for(int i = 0; i < copy.getLength() && i < list.getLength(); i++) {
|
|
|
+ test.checkEqual(list[i], copy[i], "copy assignment has same values");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static void testMove(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(1), "add works 14");
|
|
|
+ test.checkFalse(list.add(2), "add works 15");
|
|
|
+ test.checkFalse(list.add(3), "add works 16");
|
|
|
+
|
|
|
+ IntList move(Core::move(list));
|
|
|
+ test.checkEqual(0, list.getLength(), "moved has length 0");
|
|
|
+ test.checkEqual(3, move.getLength(), "moved passes length");
|
|
|
+ test.checkEqual(1, move[0], "moved passes values");
|
|
|
+ test.checkEqual(2, move[1], "moved passes values");
|
|
|
+ test.checkEqual(3, move[2], "moved passes values");
|
|
|
+}
|
|
|
+
|
|
|
+static void testMoveAssignment(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(1), "add works 17");
|
|
|
+ test.checkFalse(list.add(2), "add works 18");
|
|
|
+ test.checkFalse(list.add(3), "add works 19");
|
|
|
+
|
|
|
+ IntList move;
|
|
|
+ move = Core::move(list);
|
|
|
+ test.checkEqual(0, list.getLength(), "assignment moved has length 0");
|
|
|
+ test.checkEqual(3, move.getLength(), "assignment moved passes length");
|
|
|
+ test.checkEqual(1, move[0], "assignment moved passes values");
|
|
|
+ test.checkEqual(2, move[1], "assignment moved passes values");
|
|
|
+ test.checkEqual(3, move[2], "assignment moved passes values");
|
|
|
+}
|
|
|
+
|
|
|
+static void testToString1(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(1), "add works 20");
|
|
|
+ test.checkFalse(list.add(243), "add works 21");
|
|
|
+ test.checkFalse(list.add(-423), "add works 22");
|
|
|
+ test.checkEqual(Core::String("[1, 243, -423]"), Core::String(list),
|
|
|
+ "to string 1");
|
|
|
+}
|
|
|
+
|
|
|
+static void testToString2(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(1), "add works 23");
|
|
|
+ test.checkEqual(Core::String("[1]"), Core::String(list), "to string 2");
|
|
|
+}
|
|
|
+
|
|
|
+static void testToString3(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkEqual(Core::String("[]"), Core::String(list), "to string 3");
|
|
|
+}
|
|
|
+
|
|
|
+static void testRemove(Core::Test& test) {
|
|
|
+ IntList list;
|
|
|
+ test.checkFalse(list.add(4), "add works 24");
|
|
|
+ test.checkFalse(list.add(3), "add works 25");
|
|
|
+ test.checkFalse(list.add(2), "add works 26");
|
|
|
+ test.checkFalse(list.remove(0), "remove works 1");
|
|
|
+ test.checkEqual(2, list[0], "remove 1");
|
|
|
+ test.checkEqual(3, list[1], "remove 2");
|
|
|
+ test.checkEqual(2, list.getLength(), "remove 3");
|
|
|
+ test.checkFalse(list.remove(1), "remove works 2");
|
|
|
+ test.checkEqual(2, list[0], "remove 4");
|
|
|
+ test.checkEqual(1, list.getLength(), "remove 5");
|
|
|
+ test.checkFalse(list.remove(0), "remove works 3");
|
|
|
+ test.checkEqual(0, list.getLength(), "remove 6");
|
|
|
+}
|
|
|
+
|
|
|
+void Core::ArrayListTests::test() {
|
|
|
+ Core::Test test("ArrayList");
|
|
|
+ testAdd(test);
|
|
|
+ testMultipleAdd(test);
|
|
|
+ testAddReplace(test);
|
|
|
+ testClear(test);
|
|
|
+ testOverflow(test);
|
|
|
+ testCopy(test);
|
|
|
+ testCopyAssignment(test);
|
|
|
+ testMove(test);
|
|
|
+ testMoveAssignment(test);
|
|
|
+ testToString1(test);
|
|
|
+ testToString2(test);
|
|
|
+ testToString3(test);
|
|
|
+ testRemove(test);
|
|
|
+ test.finalize();
|
|
|
+}
|