main.cpp
1 #include <iostream> 2 #include <Array.hpp> 3 #include <cstdlib> 4 5 void checkLeaks() 6 { 7 system("leaks a.out"); 8 } 9 10 void test() 11 { 12 atexit(checkLeaks); 13 std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield); 14 std::cout.precision(1); 15 16 std::cout << "\nMy Array Test" << std::endl; 17 18 std::cout << "\n[Creating Empty Array...]" << std::endl; 19 Array<int> empty; 20 std::cout << "addr: " << empty << ", size: " << empty.size() << std::endl; 21 22 std::cout << "\n[Creating Int Array...]" << std::endl; 23 Array<int> ia(3); 24 std::cout << "addr: " << ia << ", size: " << ia.size() << std::endl; 25 for (size_t i = 0; i < ia.size(); i++) 26 { 27 std::cout << "storing " << i + 1 << "..." << std::endl; 28 ia[i] = i + 1; 29 } 30 for (size_t i = 0; i < ia.size(); i++) 31 { 32 std::cout << "index: " << i << ", value: " << ia[i] << std::endl; 33 } 34 35 std::cout << "\n[Array Copying Test...]" << std::endl; 36 std::cout << "[Creating Negative Int Array...]" << std::endl; 37 Array<int> nia(5); 38 std::cout << "addr: " << nia << ", size: " << nia.size() << std::endl; 39 for (int i = 0; i < static_cast<int>(nia.size()); i++) 40 { 41 std::cout << "storing " << (i + 1) * -1 << "..." << std::endl; 42 nia[i] = (i + 1) * -1; 43 } 44 for (size_t i = 0; i < nia.size(); i++) 45 { 46 std::cout << "index: " << i << ", value: " << nia[i] << std::endl; 47 } 48 std::cout << "\n[Copying Negative Int Array to Int Array...]" << std::endl; 49 ia = nia; 50 std::cout << "addr: " << ia << ", size: " << ia.size() << std::endl; 51 for (size_t i = 0; i < ia.size(); i++) 52 { 53 std::cout << "index: " << i << ", value: " << ia[i] << std::endl; 54 } 55 56 std::cout << "\n[Creating Float Array...]" << std::endl; 57 Array<float> fa(5); 58 std::cout << "addr: " << fa << ", size: " << fa.size() << std::endl; 59 for (size_t i = 0; i < fa.size(); i++) 60 { 61 std::cout << "storing " << i + 1.1f << "..." << std::endl; 62 fa[i] = i + 1.1f; 63 } 64 for (size_t i = 0; i < fa.size(); i++) 65 { 66 std::cout << "index: " << i << ", value: " << fa[i] << std::endl; 67 } 68 69 std::cout << "\n[Creating String Array...]" << std::endl; 70 Array<std::string> sa(3); 71 std::cout << "addr: " << sa << ", size: " << sa.size() << std::endl; 72 std::cout << "Storing \"hello\"..." << std::endl; 73 sa[0] = std::string("hello"); 74 std::cout << "Storing \"42\"..." << std::endl; 75 sa[1] = std::string("42"); 76 std::cout << "Storing \"seoul\"..." << std::endl; 77 sa[2] = std::string("seoul"); 78 for (size_t i = 0; i < sa.size(); i++) 79 { 80 std::cout << "index: " << i << ", value: " << sa[i] << std::endl; 81 } 82 83 std::cout << "\n[Testing Range of Index...]" << std::endl; 84 std::cout << "addr: " << ia << ", size: " << ia.size() << std::endl; 85 try 86 { 87 std::cout << "Storing " << 42 88 << " to index " << ia.size() << "..." << std::endl; 89 ia[ia.size()] = 42; 90 } 91 catch (std::exception& e) 92 { 93 std::cout << "Caught exception: " << e.what() << std::endl; 94 } 95 try 96 { 97 std::cout << "Storing " << -42 98 << " to index " << -1 << "..." << std::endl; 99 ia[-1] = 42; 100 } 101 catch (std::exception& e) 102 { 103 std::cout << "Caught exception: " << e.what() << std::endl; 104 } 105 try 106 { 107 std::cout << "Creating Array with Invalid Index (-1)..." << std::endl; 108 Array<int> invalid(-1); 109 std::cout << "addr: " << invalid << std::endl; // unreached 110 } 111 catch (std::exception& e) 112 { 113 std::cout << "Caught exception: " << e.what() << std::endl; 114 } 115 116 std::cout << "\n[Testing Member Function seperation...]" << std::endl; 117 unsigned int tmp = ia.size(); 118 std::cout << "ia.size(): " << ia.size() << ", tmp: " << tmp << std::endl; 119 std::cout << "Incrementing tmp..." << std::endl; 120 tmp++; 121 // ia.size()++; // error: expression is not assignable 122 std::cout << "ia.size(): " << ia.size() << ", tmp: " << tmp << std::endl; 123 } 124 125 #define MAX_VAL 750 126 int main(int, char**) 127 { 128 Array<int> numbers(MAX_VAL); 129 int* mirror = new int[MAX_VAL]; 130 srand(time(NULL)); 131 for (int i = 0; i < MAX_VAL; i++) 132 { 133 const int value = rand(); 134 numbers[i] = value; 135 mirror[i] = value; 136 } 137 //SCOPE 138 { 139 Array<int> tmp = numbers; 140 Array<int> test(tmp); 141 } 142 143 for (int i = 0; i < MAX_VAL; i++) 144 { 145 if (mirror[i] != numbers[i]) 146 { 147 std::cerr << "didn't save the same value!!" << std::endl; 148 return 1; 149 } 150 } 151 try 152 { 153 numbers[-2] = 0; 154 } 155 catch(const std::exception& e) 156 { 157 std::cerr << e.what() << '\n'; 158 } 159 try 160 { 161 numbers[MAX_VAL] = 0; 162 } 163 catch(const std::exception& e) 164 { 165 std::cerr << e.what() << '\n'; 166 } 167 168 for (int i = 0; i < MAX_VAL; i++) 169 { 170 numbers[i] = rand(); 171 } 172 delete [] mirror;// 173 test(); 174 return 0; 175 }