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  }