EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
EvilNumberTest.cpp
Go to the documentation of this file.
1 /*
2  ------------------------------------------------------------------------------------
3  LICENSE:
4  ------------------------------------------------------------------------------------
5  This file is part of EVEmu: EVE Online Server Emulator
6  Copyright 2006 - 2021 The EVEmu Team
7  For the latest information visit https://evemu.dev
8  ------------------------------------------------------------------------------------
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU Lesser General Public License as published by the Free Software
11  Foundation; either version 2 of the License, or (at your option) any later
12  version.
13 
14  This program is distributed in the hope that it will be useful, but WITHOUT
15  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public License along with
19  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
20  Place - Suite 330, Boston, MA 02111-1307, USA, or go to
21  http://www.gnu.org/copyleft/lesser.txt.
22  ------------------------------------------------------------------------------------
23  Author: Aknor Jaden
24 */
25 
26 #include "eve-test.h"
27 
28 int utils_EvilNumberTest( int argc, char* argv[] )
29 {
30  EvilNumber fval1(5.0);
31  EvilNumber fval2(-12.123);
32  EvilNumber ival1(10);
33  EvilNumber ival2(123456);
34  EvilNumber result;
35 
36  ::printf( "\n\n========================================================================\n" );
37  ::printf( " Testing Evilnumber unary operators:\n\n" );
38  // UNARY:
39  ::printf( "before ival1++ ival1 = %s\n", ival1.to_str().c_str(), result.to_str().c_str() );
40  result = ival1++;
41  ::printf( "ival1++ = %s\n\n", ival1.to_str().c_str(), result.to_str().c_str() );
42 
43  ::printf( "before ival2-- ival2 = %s\n", ival2.to_str().c_str(), result.to_str().c_str() );
44  result = ival2--;
45  ::printf( "ival2-- = %s-- = %s\n\n", ival2.to_str().c_str(), result.to_str().c_str() );
46 
47  ::printf( "before fval1++ fval1 = %s\n", fval1.to_str().c_str(), result.to_str().c_str() );
48  result = fval1++;
49  ::printf( "fval1++ = %s++ = %s\n\n", fval1.to_str().c_str(), result.to_str().c_str() );
50 
51  ::printf( "before fval2-- fval2 = %s\n", fval2.to_str().c_str(), result.to_str().c_str() );
52  result = fval2--;
53  ::printf( "fval2-- = %s-- = %s\n\n", fval2.to_str().c_str(), result.to_str().c_str() );
54 
55  ::printf( "\n\n========================================================================\n" );
56  ::printf( " Testing Evilnumber binary operators mixing integer-based with float-based:\n\n" );
57  // MIXED:
58  result = fval1 + ival2;
59  ::printf( "fval1 + ival2 = %s + %s = %s\n", fval1.to_str().c_str(), ival2.to_str().c_str(), result.to_str().c_str() );
60 
61  result = fval1 - ival2;
62  ::printf( "fval1 - ival2 = %s - %s = %s\n", fval1.to_str().c_str(), ival2.to_str().c_str(), result.to_str().c_str() );
63 
64  result = fval1 * ival2;
65  ::printf( "fval1 * ival2 = %s * %s = %s\n", fval1.to_str().c_str(), ival2.to_str().c_str(), result.to_str().c_str() );
66 
67  result = fval1 / ival2;
68  ::printf( "fval1 / ival2 = %s / %s = %s\n", fval1.to_str().c_str(), ival2.to_str().c_str(), result.to_str().c_str() );
69 
70  ::printf( "\n\n========================================================================\n" );
71  ::printf( " Testing Evilnumber binary operators, both operands integer-based:\n\n" );
72  // BOTH INT:
73  result = ival1 + ival2;
74  ::printf( "ival1 + ival2 = %s + %s = %s\n", ival1.to_str().c_str(), ival2.to_str().c_str(), result.to_str().c_str() );
75 
76  result = ival1 - ival2;
77  ::printf( "ival1 - ival2 = %s - %s = %s\n", ival1.to_str().c_str(), ival2.to_str().c_str(), result.to_str().c_str() );
78 
79  result = ival1 * ival2;
80  ::printf( "ival1 * ival2 = %s * %s = %s\n", ival1.to_str().c_str(), ival2.to_str().c_str(), result.to_str().c_str() );
81 
82  result = ival1 / ival2;
83  ::printf( "ival1 / ival2 = %s / %s = %s\n", ival1.to_str().c_str(), ival2.to_str().c_str(), result.to_str().c_str() );
84 
85  ::printf( "\n\n========================================================================\n" );
86  ::printf( " Testing Evilnumber binary operators, both operands float-based:\n\n" );
87  // BOTH FLOAT:
88  result = fval1 + fval2;
89  ::printf( "fval1 + fval2 = %s + %s = %s\n", fval1.to_str().c_str(), fval2.to_str().c_str(), result.to_str().c_str() );
90 
91  result = fval1 - fval2;
92  ::printf( "fval1 - fval2 = %s - %s = %s\n", fval1.to_str().c_str(), fval2.to_str().c_str(), result.to_str().c_str() );
93 
94  fval2 = 2.0;
95  result = fval1 * fval2;
96  ::printf( "fval1 * fval2 = %s * %s = %s\n", fval1.to_str().c_str(), fval2.to_str().c_str(), result.to_str().c_str() );
97 
98  result = fval1 / fval2;
99  ::printf( "fval1 / fval2 = %s / %s = %s\n", fval1.to_str().c_str(), fval2.to_str().c_str(), result.to_str().c_str() );
100 
101  ::printf( "\n\n========================================================================\n" );
102  ::printf( " Testing Evilnumber binary operators, both operands created using EvilNumber() inline:\n\n" );
103  result = EvilNumber(6.0) + EvilNumber(100);
104  ::printf( "EvilNumber(6.0) + EvilNumber(100)= %s\n", result.to_str().c_str() );
105 
106  result = EvilNumber(52) - EvilNumber(26.0);
107  ::printf( "EvilNumber(52) - EvilNumber(26.0)= %s\n", result.to_str().c_str() );
108 
109  result = EvilNumber(22) * EvilNumber(10);
110  ::printf( "EvilNumber(22) * EvilNumber(10)= %s\n", result.to_str().c_str() );
111 
112  result = EvilNumber(220.0) / EvilNumber(11);
113  ::printf( "EvilNumber(220.0) / EvilNumber(11)= %s\n", result.to_str().c_str() );
114 
115  ::printf( "\n\n========================================================================\n" );
116  ::printf( " Testing Evilnumber trigonometric functions:\n\n" );
117  result = EvilNumber::sin(EvilNumber(3.14159*1.5));
118  ::printf( "sin(3.14159*1.5)= %f, EvilNumber::sin(3.14159*1.5)= %s\n", sin(3.14159*1.5), result.to_str().c_str() );
119 
120  result = EvilNumber::cos(EvilNumber(3.14159*1.5));
121  ::printf( "cos(-3.14159*1.5)= %f, EvilNumber::cos(-3.14159*1.5)= %s\n", cos(-3.14159*1.5), result.to_str().c_str() );
122 
123  result = EvilNumber::tan(EvilNumber(3.14159*3));
124  ::printf( "tan(-3.14159*3)= %f, EvilNumber:tan(-3.14159*3)= %s\n", tan(-3.14159*3), result.to_str().c_str() );
125 
126  result = EvilNumber::asin(EvilNumber(0.5));
127  ::printf( "asin(0.5)= %f, EvilNumber::asin(0.5)= %s\n", asin(0.5), result.to_str().c_str() );
128 
129  result = EvilNumber::acos(EvilNumber(-0.5));
130  ::printf( "acos(-0.5)= %f, EvilNumber::acos(-0.5)= %s\n", acos(-0.5), result.to_str().c_str() );
131 
132  result = EvilNumber::atan(EvilNumber(3.0));
133  ::printf( "atan(3.0)= %f, EvilNumber::atan(3.0)= %s\n", atan(3.0), result.to_str().c_str() );
134 
135  ::printf( "\n\n========================================================================\n" );
136  ::printf( " Testing Evilnumber various math functions:\n\n" );
137  result = EvilNumber::sqrt(EvilNumber(400.0));
138  ::printf( "sqrt(400.0)= %f, EvilNumber::sqrt(400.0)= %s\n", sqrt(400.0), result.to_str().c_str() );
139 
140  result = EvilNumber::pow(EvilNumber(39.0), EvilNumber(2.0));
141  ::printf( "pow(39.0,2.0)= %f, EvilNumber::pow(39.0,2.0)= %s\n", pow(39.0,2.0), result.to_str().c_str() );
142 
143  result = EvilNumber::log(EvilNumber(1.5));
144  ::printf( "log(1.5)= %f, EvilNumber::log(1.5)= %s\n", log(1.5), result.to_str().c_str() );
145 
146  result = EvilNumber::log10(EvilNumber(1.5));
147  ::printf( "log10(1.5)= %f, EvilNumber::log10(1.5)= %s\n", log10(1.5), result.to_str().c_str() );
148 
149  result = EvilNumber::exp(EvilNumber(1.5));
150  ::printf( "exp(1.5)= %f, EvilNumber::exp(1.5)= %s\n", exp(1.5), result.to_str().c_str() );
151 
152  ::printf( "\n\n========================================================================\n" );
153  ::printf( " Testing Evilnumber binary operators with mixed data types:\n\n" );
154 
155  EvilNumber three = 3.0;
156 
157  result = three + 1;
158  ::printf( "EvilNumber(3.0) + 1= %s\n", result.to_str().c_str() );
159 
160  result = three - 1;
161  ::printf( "EvilNumber(3.0) - 1= %s\n", result.to_str().c_str() );
162 
163  result = three * 5;
164  ::printf( "EvilNumber(3.0) * 5= %s\n", result.to_str().c_str() );
165 
166  result = EvilNumber(33.0) / 3;
167  ::printf( "EvilNumber(33.0) / 3= %s\n", result.to_str().c_str() );
168 
169  result = EvilNumber(33.0) % 5;
170  ::printf( "EvilNumber(33.0) %% 5= %s\n", result.to_str().c_str() );
171 
172  result = 4 + EvilNumber(3.0);
173  ::printf( "4 + EvilNumber(3.0)= %s\n", result.to_str().c_str() );
174 
175  result = 1 - EvilNumber(3.0);
176  ::printf( "1 - EvilNumber(3.0)= %s\n", result.to_str().c_str() );
177 
178  result = 5 * EvilNumber(3.0);
179  ::printf( "5 * EvilNumber(3.0)= %s\n", result.to_str().c_str() );
180 
181  result = 33 / EvilNumber(3.0);
182  ::printf( "33 / EvilNumber(3.0)= %s\n", result.to_str().c_str() );
183 
184  result = 33 % EvilNumber(5.0);
185  ::printf( "33 %% EvilNumber(5.0)= %s\n", result.to_str().c_str() );
186 
187  return EXIT_SUCCESS;
188 }
this is a class that kinda mimics how python polymorph's numbers.
Definition: EvilNumber.h:59
static EvilNumber exp(const EvilNumber &val)
Definition: EvilNumber.cpp:327
static EvilNumber log10(const EvilNumber &val)
Definition: EvilNumber.cpp:315
static EvilNumber cos(const EvilNumber &val)
Definition: EvilNumber.cpp:212
static EvilNumber sqrt(const EvilNumber &val)
Definition: EvilNumber.cpp:272
static EvilNumber asin(const EvilNumber &val)
Definition: EvilNumber.cpp:236
static EvilNumber log(const EvilNumber &val)
Definition: EvilNumber.cpp:303
int utils_EvilNumberTest(int argc, char *argv[])
static EvilNumber atan(const EvilNumber &val)
Definition: EvilNumber.cpp:260
static EvilNumber sin(const EvilNumber &val)
??
Definition: EvilNumber.cpp:200
static EvilNumber acos(const EvilNumber &val)
Definition: EvilNumber.cpp:248
static EvilNumber tan(const EvilNumber &val)
Definition: EvilNumber.cpp:224
static EvilNumber pow(const EvilNumber &val1, const EvilNumber &val2)
Definition: EvilNumber.cpp:284
std::string to_str()
converts the EvilNumber value into a string
Definition: EvilNumber.h:360