main.cpp
  1  /* ************************************************************************** */
  2  /*                                                                            */
  3  /*                                                        :::      ::::::::   */
  4  /*   main.cpp                                           :+:      :+:    :+:   */
  5  /*                                                    +:+ +:+         +:+     */
  6  /*   By: gychoi <gychoi@student.42seoul.kr>         +#+  +:+       +#+        */
  7  /*                                                +#+#+#+#+#+   +#+           */
  8  /*   Created: 2023/12/26 00:11:49 by gychoi            #+#    #+#             */
  9  /*   Updated: 2023/12/31 01:03:25 by gychoi           ###   ########.fr       */
 10  /*                                                                            */
 11  /* ************************************************************************** */
 12  
 13  #include <ctime>
 14  #include <cstdlib>
 15  #include <iostream>
 16  #include "Span.hpp"
 17  
 18  void	test()
 19  {
 20  	std::cout << "\nTest 0 : Copy span\n";
 21  	try
 22  	{
 23  		std::cout << "Creating Span(3): sp1...\n";
 24  		Span	sp1 = Span(3);
 25  		std::cout << "Insert element 1 to sp1...\n";
 26  		sp1.addNumber(1);
 27  		std::cout << "Insert element 2 to sp1...\n";
 28  		sp1.addNumber(2);
 29  		std::cout << "Insert element 3 to sp1...\n";
 30  		sp1.addNumber(3);
 31  		std::cout << "Get shortest span in sp1..." << std::endl;
 32  		std::cout << sp1.shortestSpan() << std::endl;
 33  		std::cout << "Get longest span in sp1..." << std::endl;
 34  		std::cout << sp1.longestSpan() << std::endl;
 35  
 36  		std::cout << "Creating Span(5): sp2...\n";
 37  		Span	sp2 = Span(5);
 38  		std::cout << "Insert element 100 to sp2...\n";
 39  		sp2.addNumber(100);
 40  		std::cout << "Insert element 200 to sp2...\n";
 41  		sp2.addNumber(200);
 42  		std::cout << "Insert element 300 to sp3...\n";
 43  		sp2.addNumber(300);
 44  		std::cout << "Insert element 50 to sp3...\n";
 45  		sp2.addNumber(50);
 46  		std::cout << "Insert element 100 to sp3...\n";
 47  		sp2.addNumber(100);
 48  		std::cout << "Copy sp2 to sp1...\n";
 49  		sp1 = sp2;
 50  		std::cout << "Get shortest span in sp1..." << std::endl;
 51  		std::cout << sp1.shortestSpan() << std::endl;
 52  		std::cout << "Get longest span in sp1..." << std::endl;
 53  		std::cout << sp1.longestSpan() << std::endl;
 54  
 55  		std::cout << "Creating Span Using Copy Constructor: sp3...\n";
 56  		std::cout << "Copy sp1 to sp3...\n";
 57  		Span	sp3 = Span(sp1);
 58  		std::cout << "Get shortest span in sp3..." << std::endl;
 59  		std::cout << sp3.shortestSpan() << std::endl;
 60  		std::cout << "Get longest span in sp3..." << std::endl;
 61  		std::cout << sp3.longestSpan() << std::endl;
 62  	}
 63  	catch (std::exception& e)
 64  	{
 65  		std::cout << "ERROR: " << e.what() << std::endl;
 66  	}
 67  
 68  	std::cout << "\nTest 1 : Invalid initialize\n";
 69  	try
 70  	{
 71  		std::cout << "Crating Span(-1)..." << std::endl;
 72  		Span	sp = Span(-1);
 73  		std::cout << sp.shortestSpan() << std::endl; // unreachable
 74  	}
 75  	catch (std::exception& e)
 76  	{
 77  		std::cout << "ERROR: " << e.what() << std::endl;
 78  	}
 79  
 80  	std::cout << "\nTest 2 : Insert element to full Span\n";
 81  	try
 82  	{
 83  		std::cout << "Creating Span(3)...\n";
 84  		Span	sp = Span(3);
 85  		std::cout << "Insert element 1...\n";
 86  		sp.addNumber(1);
 87  		std::cout << "Insert element 2...\n";
 88  		sp.addNumber(2);
 89  		std::cout << "Insert element 3...\n";
 90  		sp.addNumber(3);
 91  		std::cout << "Insert element 42..." << std::endl;
 92  		sp.addNumber(42);
 93  	}
 94  	catch (std::exception& e)
 95  	{
 96  		std::cout << "ERROR: " << e.what() << std::endl;
 97  	}
 98  
 99  	std::cout << "\nTest 3 : Lack of numbers to calculate span\n";
100  	try
101  	{
102  		std::cout << "Creating Empty Span...\n";
103  		Span	sp;
104  		std::cout << "Get longest span..." << std::endl;
105  		std::cout << sp.longestSpan() << std::endl;
106  	}
107  	catch (std::exception& e)
108  	{
109  		std::cout << "ERROR: " << e.what() << std::endl;
110  	}
111  	try
112  	{
113  		std::cout << "Creating Span(1)...\n";
114  		Span	sp = Span(1);
115  		std::cout << "Insert element 1...\n";
116  		sp.addNumber(1);
117  		std::cout << "Get shortest span..." << std::endl;
118  		std::cout << sp.shortestSpan() << std::endl;
119  	}
120  	catch (std::exception& e)
121  	{
122  		std::cout << "ERROR: " << e.what() << std::endl;
123  	}
124  
125  	std::cout << "\nTest 4 : Normal span test\n";
126  	try
127  	{
128  		std::cout << "Creating Span(42)...\n";
129  		Span	sp = Span(42);
130  		std::cout << "Insert element 0...\n";
131  		sp.addNumber(0);
132  		std::cout << "Insert element -999...\n";
133  		sp.addNumber(-999);
134  		std::cout << "Insert clement 4242...\n";
135  		sp.addNumber(4242);
136  		std::cout << "Insert element -999...\n";
137  		sp.addNumber(-999);
138  		std::cout << "Insert element -888...\n";
139  		sp.addNumber(-888);
140  		std::cout << "Insert element 0...\n";
141  		sp.addNumber(0);
142  		std::cout << "Insert element 4242...\n";
143  		sp.addNumber(4242);
144  		std::cout << "Insert element 0...\n";
145  		sp.addNumber(0);
146  		std::cout << "Get shortest span...\n";
147  		std::cout << sp.shortestSpan() << '\n';
148  		std::cout << "Get longest span...\n";
149  		std::cout << sp.longestSpan() << std::endl;
150  	}
151  	catch (std::exception& e)
152  	{
153  		std::cout << "ERROR: " << e.what() << std::endl;
154  	}
155  
156  	std::cout << "\nTest 5 : 10000 nums\n";
157  	try
158  	{
159  		std::cout << "Generating random seeds...\n";
160  		std::srand(std::time(0));
161  		std::cout << "Creating Span(10000)...\n";
162  		Span	sp = Span(10000);
163  		std::cout << "Insert 10000 random elements...\n";
164  		for (size_t i = 0; i < 10000; i++)
165  		{
166  			sp.addNumber(std::rand());
167  		}
168  		std::cout << "Get shortest span...\n";
169  		std::cout << sp.shortestSpan() << '\n';
170  		std::cout << "Get longest span...\n";
171  		std::cout << sp.longestSpan() << std::endl;
172  	}
173  	catch (std::exception& e)
174  	{
175  		std::cout << "ERROR: " << e.what() << std::endl;
176  	}
177  
178  	std::cout << "\nTest 6 : add numbers at once\n";
179  	try
180  	{
181  		std::cout << "Creating Span(10000)...\n";
182  		Span	sp = Span(10000);
183  		std::cout << "Generating random seeds...\n";
184  		std::srand(std::time(0));
185  		std::cout << "Generating random vector(10000)...\n";
186  		std::vector<int>	randVec;
187  		randVec.reserve(10000);
188  		for (size_t i = 0; i < 10000; i++)
189  		{
190  			randVec.push_back(std::rand());
191  		}
192  		std::cout << "Store random vector numbers to span at once...\n";
193  		sp.addNumbers(randVec.begin(), randVec.end());
194  		std::cout << "Get shortest span...\n";
195  		std::cout << sp.shortestSpan() << '\n';
196  		std::cout << "Get longest span...\n";
197  		std::cout << sp.longestSpan() << std::endl;
198  	}
199  	catch (std::exception& e)
200  	{
201  		std::cout << "ERROR: " << e.what() << std::endl;
202  	}
203  
204  	std::cout << "\nTest 7 : Store range check\n";
205  	try
206  	{
207  		std::cout << "Creating Span(10)...\n";
208  		Span	sp = Span(10);
209  		std::cout << "Insert element 0...\n";
210  		sp.addNumber(0);
211  		std::cout << "Insert element 0...\n";
212  		sp.addNumber(0);
213  		std::cout << "Creating all-zero vector(9)...\n";
214  		std::vector<int>	zeroVec(9, 0);
215  		std::cout << "Store all-zero vector numbers to span at once...\n";
216  		sp.addNumbers(zeroVec.begin(), zeroVec.end());
217  		std::cout << "Get shortest span...\n";
218  		std::cout << sp.shortestSpan() << '\n';
219  		std::cout << "Get longest span...\n";
220  		std::cout << sp.longestSpan() << std::endl;
221  	}
222  	catch (std::exception& e)
223  	{
224  		std::cout << "ERROR: " << e.what() << std::endl;
225  	}
226  }
227  
228  int	main()
229  {
230  	Span	sp = Span(5);
231  
232  	sp.addNumber(6);
233  	sp.addNumber(3);
234  	sp.addNumber(17);
235  	sp.addNumber(9);
236  	sp.addNumber(11);
237  
238  	std::cout << sp.shortestSpan() << std::endl;
239  	std::cout << sp.longestSpan() << std::endl;
240  
241  	test();
242  
243  	return 0;
244  }