| 
					
				 | 
			
			
				@@ -1,219 +1,8 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include <iostream> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include <vector> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "utils/HashMap.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "utils/List.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-constexpr int MAP_MIN_CAPACITY = 5; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-typedef HashMap<int, int, MAP_MIN_CAPACITY> IntMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-typedef List<int, 20> IntList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const char* RED = "\033[0;31m"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-const char* GREEN = "\033[0;32m"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-int tests = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-int successTests = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void finalizeTest() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    std::cout << ((successTests == tests) ? GREEN : RED); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    std::cout << successTests << " / " << tests << " succeeded\n\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    tests = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    successTests = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-template<typename T> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void checkEqual(const T& wanted, const T& actual, const char* text) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(wanted == actual) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        tests++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        successTests++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        std::cout << GREEN << tests << ": " << text << "\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        tests++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        std::cout << RED << tests << ": " << text << " - "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        std::cout << RED << "expected '" << wanted << "' got '" << actual << "'\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-namespace Map { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testAdd() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntMap map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.add(5, 4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, map.contains(5), "map contains added value"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, map.search(5, -1) == 4, "map search finds added value"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testMultipleAdd() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntMap map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.add(5, 4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.add(10, 3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.add(15, 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, map.contains(5), "map contains added value 1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, map.contains(10), "map contains added value 2"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, map.contains(15), "map contains added value 3"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, map.search(5, -1) == 4, "map search finds added value 1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, map.search(10, -1) == 3, "map search finds added value 2"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, map.search(15, -1) == 2, "map search finds added value 3"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testAddReplace() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntMap map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.add(5, 4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.add(5, 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, map.contains(5), "map contains replaced value"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, map.search(5, -1) == 10, "map search finds replaced value"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testClear() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntMap map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.add(5, 4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.add(4, 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        map.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(false, map.contains(5), "map does not contain cleared values"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(false, map.contains(4), "map does not contain cleared values"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testOverflow() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntMap map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(int i = 0; i < 1000000; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            map.add(i, i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(int i = 0; i < MAP_MIN_CAPACITY; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            checkEqual(true, map.contains(i), "map still contains values after overflow"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, true, "map survives overflow"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void test() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testAdd(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testMultipleAdd(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testAddReplace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testClear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testOverflow(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        finalizeTest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-namespace TestList { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testAdd() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(5, list[0], "list contains added value"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(1, list.getLength(), "list sizes is increased by add"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testMultipleAdd() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(4, list[0], "list contains added value"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(3, list[1], "list contains added value"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(2, list[2], "list contains added value"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(3, list.getLength(), "list sizes is increased by add"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testAddReplace() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list[0] = 3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(3, list[0], "list value is overwritten"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testClear() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(5); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(0, list.getLength(), "list length is 0 after clear"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testOverflow() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(int i = 0; i < 1000000; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            list.add(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(int i = 0; i < list.getLength(); i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            checkEqual(i, list[i], "list still contains values after overflow"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(true, true, "list survives overflow"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testCopy() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList copy(list); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(list.getLength(), copy.getLength(), "list copy has same length"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(int i = 0; i < copy.getLength() && i < list.getLength(); i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            checkEqual(list[i], copy[i], "list copy has same values"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testCopyAssignment() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList copy; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        copy = list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(list.getLength(), copy.getLength(), "list copy assignment has same length"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for(int i = 0; i < copy.getLength() && i < list.getLength(); i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            checkEqual(list[i], copy[i], "list copy assignment has same values"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testMove() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList move(std::move(list)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(0, list.getLength(), "moved list has length 0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(3, move.getLength(), "moved list passes length"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(1, move[0], "moved list passes values"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(2, move[1], "moved list passes values"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(3, move[2], "moved list passes values"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void testMoveAssignment() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        list.add(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IntList move(std::move(list)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(0, list.getLength(), "assignment moved list has length 0"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(3, move.getLength(), "assignment moved list passes length"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(1, move[0], "assignment moved list passes values"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(2, move[1], "assignment moved list passes values"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        checkEqual(3, move[2], "assignment moved list passes values"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    void test() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testAdd(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testMultipleAdd(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testAddReplace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testClear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testOverflow(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testCopy(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testCopyAssignment(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testMove(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        testMoveAssignment(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        finalizeTest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "tests/HashMapTests.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "tests/ListTests.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 int main() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Map::test(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    TestList::test(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    HashMapTests::test(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ListTests::test(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |