main.cpp
  1  /* ************************************************************************** */
  2  /*                                                                            */
  3  /*                                                        :::      ::::::::   */
  4  /*   main.cpp                                           :+:      :+:    :+:   */
  5  /*                                                    +:+ +:+         +:+     */
  6  /*   By: gychoi <gychoi@student.42seoul.kr>         +#+  +:+       +#+        */
  7  /*                                                +#+#+#+#+#+   +#+           */
  8  /*   Created: 2023/08/02 17:45:27 by gychoi            #+#    #+#             */
  9  /*   Updated: 2023/08/04 17:56:27 by gychoi           ###   ########.fr       */
 10  /*                                                                            */
 11  /* ************************************************************************** */
 12  
 13  #include <string>
 14  #include "Fixed.hpp"
 15  
 16  static void	_testArithmetic(void)
 17  {
 18  	Fixed	c(42.4242f);
 19  	Fixed	d(42);
 20  
 21  	std::cout << "c: " << c << "(42.4242f)" << ", d: " << d << "(42)" << std::endl;
 22  	std::cout << "c > d : " << (c > d) << std::endl;
 23  	std::cout << "c < d : " << (c < d) << std::endl;
 24  	std::cout << "c >= d : " << (c >= d) << std::endl;
 25  	std::cout << "c <= d : " << (c <= d) << std::endl;
 26  	std::cout << "c == d : " << (c == d) << std::endl;
 27  	std::cout << "c != d : " << (c != d) << '\n' << std::endl;
 28  
 29  	Fixed	e(c + d);
 30  	std::cout << "e = c + d : " << e << std::endl;
 31  	Fixed	f(c - d);
 32  	std::cout << "f = c - d : " << f << std::endl;
 33  	Fixed	g(c * d);
 34  	std::cout << "g = c * d : " << g << std::endl;
 35  	Fixed	h(c / d);
 36  	std::cout << "h = c / d : " << h << '\n' << std::endl;
 37  
 38  	std::cout << "min(e, f) : " << Fixed::min(e, f) << std::endl;
 39  	std::cout << "max(g, h) : " << Fixed::max(g, h) << '\n' << std::endl;
 40  
 41  	Fixed const	i(-42);
 42  	Fixed const j(-42.4242f);
 43  
 44  	std::cout << "const i: " << i << "(-42)" << std::endl;
 45  	std::cout << "const j: " << j << "(-42.4242f)" << std::endl;
 46  	std::cout << "i + j : " << i + j << std::endl;
 47  	std::cout << "i - j : " << i - j << std::endl;
 48  	std::cout << "i * j : " << i * j << std::endl;
 49  	std::cout << "i / j : " << i / j << '\n' << std::endl;
 50  	std::cout << "min(i, j) : " << Fixed::min(i, j) << std::endl;
 51  	std::cout << "max(i, j) : " << Fixed::max(i, j) << '\n' << std::endl;
 52  
 53  	Fixed k(42424);
 54  	Fixed l(42.4242f);
 55  
 56  	std::cout << "k: " << k << "(42424)" << ", l: " << l << "(42.4242f)" << std::endl;
 57  	std::cout << "k * l : " << k * l << std::endl;
 58  	std::cout << "k / l : " << k / l << std::endl;
 59  
 60  	Fixed tmp(k * l);
 61  	std::cout << "tmp(k * l) : " << tmp << std::endl;
 62  	std::cout << "tmp / l : " << tmp / l << '\n' << std::endl;
 63  
 64  	Fixed m(42);
 65  	Fixed n(0);
 66  	std::cout << "m: " << m << "(42)" << ", n: " << n << "(0)" << std::endl;
 67  	std::cout << "m * n : " << m * n << std::endl;
 68  	std::cout << "m / n : Be aware of Division by zero" << std::endl;
 69  //	std::cout << "m / n : " << m / n << std::endl;
 70  	std::cout << "++m : " << ++m << std::endl;
 71  	std::cout << "++(++m) : " << ++(++m) << std::endl;
 72  	std::cout << "m++, m : " << m++ << ", " << m << std::endl;
 73  	std::cout << "(m++)++ : You can not duplicate post-increment/post-decrement" << std::endl;
 74  //	std::cout << (m++)++ << std::endl;
 75  }
 76  
 77  static bool	_testFixedNumber(int argc, char* argv[])
 78  {
 79  	if (argc > 2)
 80  	{
 81  		std::cout << "Usage: " << argv[0] << " test" << std::endl;
 82  		return (false);
 83  	}
 84  
 85  	std::string	input = argv[1];
 86  
 87  	if (input == "test")
 88  		_testArithmetic();
 89  	else
 90  	{
 91  		std::cout << "Invalid Option: you can use only 'test' option, sorry." << std::endl;
 92  		return (false);
 93  	}
 94  	return (true);
 95  }
 96  
 97  int	main(int argc, char* argv[])
 98  {
 99  	if (argc >= 2)
100  		return (_testFixedNumber(argc, argv));
101  
102  	Fixed		a;
103  	Fixed const	b( Fixed( 5.05f ) * Fixed ( 2 ) );
104  
105  	std::cout << a << std::endl;
106  	std::cout << ++a << std::endl;
107  	std::cout << a << std::endl;
108  	std::cout << a++ << std::endl;
109  	std::cout << a << std::endl;
110  
111  	std::cout << b << std::endl;
112  
113  	std::cout << Fixed::max( a, b ) << std::endl;
114  
115  	return 0;
116  }