1*453b576eSBram Moolenaar" test float functions
2*453b576eSBram Moolenaar
3*453b576eSBram Moolenaarif !has('float')
4*453b576eSBram Moolenaar  finish
5*453b576eSBram Moolenaarend
6*453b576eSBram Moolenaar
7*453b576eSBram Moolenaarfunc Test_abs()
8*453b576eSBram Moolenaar  call assert_equal(string(abs(1.23)), '1.23')
9*453b576eSBram Moolenaar  call assert_equal(string(abs(-1.23)), '1.23')
10*453b576eSBram Moolenaar  call assert_equal(string(abs(0.0)), '0.0')
11*453b576eSBram Moolenaar  call assert_equal(string(abs(1.0/(1.0/0.0))), '0.0')
12*453b576eSBram Moolenaar  call assert_equal(string(abs(-1.0/(1.0/0.0))), '0.0')
13*453b576eSBram Moolenaar  call assert_equal(string(abs(1.0/0.0)), 'inf')
14*453b576eSBram Moolenaar  call assert_equal(string(abs(-1.0/0.0)), 'inf')
15*453b576eSBram Moolenaar  call assert_equal(string(abs(0.0/0.0)), 'nan')
16*453b576eSBram Moolenaarendfunc
17*453b576eSBram Moolenaar
18*453b576eSBram Moolenaarfunc Test_sqrt()
19*453b576eSBram Moolenaar  call assert_equal(string(sqrt(0.0)), '0.0')
20*453b576eSBram Moolenaar  call assert_equal(string(sqrt(2.0)), '1.414214')
21*453b576eSBram Moolenaar  call assert_equal(string(sqrt(1.0/0.0)), 'inf')
22*453b576eSBram Moolenaar  call assert_equal(string(sqrt(-1.0)), 'nan')
23*453b576eSBram Moolenaar  call assert_equal(string(sqrt(0.0/0.0)), 'nan')
24*453b576eSBram Moolenaarendfunc
25*453b576eSBram Moolenaar
26*453b576eSBram Moolenaarfunc Test_log()
27*453b576eSBram Moolenaar  call assert_equal(string(log(1.0)), '0.0')
28*453b576eSBram Moolenaar  call assert_equal(string(log(0.5)), '-0.693147')
29*453b576eSBram Moolenaar  call assert_equal(string(log(0.0)), '-inf')
30*453b576eSBram Moolenaar  call assert_equal(string(log(-1.0)), 'nan')
31*453b576eSBram Moolenaar  call assert_equal(string(log(1.0/0.0)), 'inf')
32*453b576eSBram Moolenaar  call assert_equal(string(log(0.0/0.0)), 'nan')
33*453b576eSBram Moolenaarendfunc
34*453b576eSBram Moolenaar
35*453b576eSBram Moolenaarfunc Test_log10()
36*453b576eSBram Moolenaar  call assert_equal(string(log10(1.0)), '0.0')
37*453b576eSBram Moolenaar  call assert_equal(string(log10(100.0)), '2.0')
38*453b576eSBram Moolenaar  call assert_equal(string(log10(120.0)), '2.079181')
39*453b576eSBram Moolenaar  call assert_equal(string(log10(0.0)), '-inf')
40*453b576eSBram Moolenaar  call assert_equal(string(log10(-1.0)), 'nan')
41*453b576eSBram Moolenaar  call assert_equal(string(log10(1.0/0.0)), 'inf')
42*453b576eSBram Moolenaar  call assert_equal(string(log10(0.0/0.0)), 'nan')
43*453b576eSBram Moolenaarendfunc
44*453b576eSBram Moolenaar
45*453b576eSBram Moolenaarfunc Test_exp()
46*453b576eSBram Moolenaar  call assert_equal(string(exp(0.0)), '1.0')
47*453b576eSBram Moolenaar  call assert_equal(string(exp(2.0)), '7.389056')
48*453b576eSBram Moolenaar  call assert_equal(string(exp(-1.0)),'0.367879')
49*453b576eSBram Moolenaar  call assert_equal(string(exp(1.0/0.0)), 'inf')
50*453b576eSBram Moolenaar  call assert_equal(string(exp(-1.0/0.0)), '0.0')
51*453b576eSBram Moolenaar  call assert_equal(string(exp(0.0/0.0)), 'nan')
52*453b576eSBram Moolenaarendfunc
53*453b576eSBram Moolenaar
54*453b576eSBram Moolenaarfunc Test_sin()
55*453b576eSBram Moolenaar  call assert_equal(string(sin(0.0)), '0.0')
56*453b576eSBram Moolenaar  call assert_equal(string(sin(1.0)), '0.841471')
57*453b576eSBram Moolenaar  call assert_equal(string(sin(-0.5)), '-0.479426')
58*453b576eSBram Moolenaar  call assert_equal(string(sin(0.0/0.0)), 'nan')
59*453b576eSBram Moolenaar  call assert_equal(string(sin(1.0/0.0)), 'nan')
60*453b576eSBram Moolenaar  call assert_equal(string(sin(1.0/(1.0/0.0))), '0.0')
61*453b576eSBram Moolenaar  call assert_equal(string(sin(-1.0/(1.0/0.0))), '-0.0')
62*453b576eSBram Moolenaarendfunc
63*453b576eSBram Moolenaar
64*453b576eSBram Moolenaarfunc Test_asin()
65*453b576eSBram Moolenaar  call assert_equal(string(asin(0.0)), '0.0')
66*453b576eSBram Moolenaar  call assert_equal(string(asin(1.0)), '1.570796')
67*453b576eSBram Moolenaar  call assert_equal(string(asin(-0.5)), '-0.523599')
68*453b576eSBram Moolenaar  call assert_equal(string(asin(1.1)), 'nan')
69*453b576eSBram Moolenaar  call assert_equal(string(asin(1.0/0.0)), 'nan')
70*453b576eSBram Moolenaar  call assert_equal(string(asin(0.0/0.0)), 'nan')
71*453b576eSBram Moolenaarendfunc
72*453b576eSBram Moolenaar
73*453b576eSBram Moolenaarfunc Test_sinh()
74*453b576eSBram Moolenaar  call assert_equal(string(sinh(0.0)), '0.0')
75*453b576eSBram Moolenaar  call assert_equal(string(sinh(0.5)), '0.521095')
76*453b576eSBram Moolenaar  call assert_equal(string(sinh(-0.9)), '-1.026517')
77*453b576eSBram Moolenaar  call assert_equal(string(sinh(1.0/0.0)), 'inf')
78*453b576eSBram Moolenaar  call assert_equal(string(sinh(-1.0/0.0)), '-inf')
79*453b576eSBram Moolenaar  call assert_equal(string(sinh(0.0/0.0)), 'nan')
80*453b576eSBram Moolenaarendfunc
81*453b576eSBram Moolenaar
82*453b576eSBram Moolenaarfunc Test_cos()
83*453b576eSBram Moolenaar  call assert_equal(string(cos(0.0)), '1.0')
84*453b576eSBram Moolenaar  call assert_equal(string(cos(1.0)), '0.540302')
85*453b576eSBram Moolenaar  call assert_equal(string(cos(-0.5)), '0.877583')
86*453b576eSBram Moolenaar  call assert_equal(string(cos(0.0/0.0)), 'nan')
87*453b576eSBram Moolenaar  call assert_equal(string(cos(1.0/0.0)), 'nan')
88*453b576eSBram Moolenaarendfunc
89*453b576eSBram Moolenaar
90*453b576eSBram Moolenaarfunc Test_acos()
91*453b576eSBram Moolenaar  call assert_equal(string(acos(0.0)), '1.570796')
92*453b576eSBram Moolenaar  call assert_equal(string(acos(1.0)), '0.0')
93*453b576eSBram Moolenaar  call assert_equal(string(acos(-1.0)), '3.141593')
94*453b576eSBram Moolenaar  call assert_equal(string(acos(-0.5)), '2.094395')
95*453b576eSBram Moolenaar  call assert_equal(string(acos(1.1)), 'nan')
96*453b576eSBram Moolenaar  call assert_equal(string(acos(1.0/0.0)), 'nan')
97*453b576eSBram Moolenaar  call assert_equal(string(acos(0.0/0.0)), 'nan')
98*453b576eSBram Moolenaarendfunc
99*453b576eSBram Moolenaar
100*453b576eSBram Moolenaarfunc Test_cosh()
101*453b576eSBram Moolenaar  call assert_equal(string(cosh(0.0)), '1.0')
102*453b576eSBram Moolenaar  call assert_equal(string(cosh(0.5)), '1.127626')
103*453b576eSBram Moolenaar  call assert_equal(string(cosh(1.0/0.0)), 'inf')
104*453b576eSBram Moolenaar  call assert_equal(string(cosh(-1.0/0.0)), 'inf')
105*453b576eSBram Moolenaar  call assert_equal(string(cosh(0.0/0.0)), 'nan')
106*453b576eSBram Moolenaarendfunc
107*453b576eSBram Moolenaar
108*453b576eSBram Moolenaarfunc Test_tan()
109*453b576eSBram Moolenaar  call assert_equal(string(tan(0.0)), '0.0')
110*453b576eSBram Moolenaar  call assert_equal(string(tan(0.5)), '0.546302')
111*453b576eSBram Moolenaar  call assert_equal(string(tan(-0.5)), '-0.546302')
112*453b576eSBram Moolenaar  call assert_equal(string(tan(1.0/0.0)), 'nan')
113*453b576eSBram Moolenaar  call assert_equal(string(cos(0.0/0.0)), 'nan')
114*453b576eSBram Moolenaar  call assert_equal(string(tan(1.0/(1.0/0.0))), '0.0')
115*453b576eSBram Moolenaar  call assert_equal(string(tan(-1.0/(1.0/0.0))), '-0.0')
116*453b576eSBram Moolenaarendfunc
117*453b576eSBram Moolenaar
118*453b576eSBram Moolenaarfunc Test_atan()
119*453b576eSBram Moolenaar  call assert_equal(string(atan(0.0)), '0.0')
120*453b576eSBram Moolenaar  call assert_equal(string(atan(0.5)), '0.463648')
121*453b576eSBram Moolenaar  call assert_equal(string(atan(-1.0)), '-0.785398')
122*453b576eSBram Moolenaar  call assert_equal(string(atan(1.0/0.0)), '1.570796')
123*453b576eSBram Moolenaar  call assert_equal(string(atan(-1.0/0.0)), '-1.570796')
124*453b576eSBram Moolenaar  call assert_equal(string(atan(0.0/0.0)), 'nan')
125*453b576eSBram Moolenaarendfunc
126*453b576eSBram Moolenaar
127*453b576eSBram Moolenaarfunc Test_atan2()
128*453b576eSBram Moolenaar  call assert_equal(string(atan2(-1, -1)), '-2.356194')
129*453b576eSBram Moolenaar  call assert_equal(string(atan2(1, -1)), '2.356194')
130*453b576eSBram Moolenaar  call assert_equal(string(atan2(1.0, 1.0/0.0)), '0.0')
131*453b576eSBram Moolenaar  call assert_equal(string(atan2(1.0/0.0, 1.0)), '1.570796')
132*453b576eSBram Moolenaar  call assert_equal(string(atan2(0.0/0.0, 1.0)), 'nan')
133*453b576eSBram Moolenaarendfunc
134*453b576eSBram Moolenaar
135*453b576eSBram Moolenaarfunc Test_tanh()
136*453b576eSBram Moolenaar  call assert_equal(string(tanh(0.0)), '0.0')
137*453b576eSBram Moolenaar  call assert_equal(string(tanh(0.5)), '0.462117')
138*453b576eSBram Moolenaar  call assert_equal(string(tanh(-1.0)), '-0.761594')
139*453b576eSBram Moolenaar  call assert_equal(string(tanh(1.0/0.0)), '1.0')
140*453b576eSBram Moolenaar  call assert_equal(string(tanh(-1.0/0.0)), '-1.0')
141*453b576eSBram Moolenaar  call assert_equal(string(tanh(0.0/0.0)), 'nan')
142*453b576eSBram Moolenaarendfunc
143*453b576eSBram Moolenaar
144*453b576eSBram Moolenaarfunc Test_fmod()
145*453b576eSBram Moolenaar  call assert_equal(string(fmod(12.33, 1.22)), '0.13')
146*453b576eSBram Moolenaar  call assert_equal(string(fmod(-12.33, 1.22)), '-0.13')
147*453b576eSBram Moolenaar  call assert_equal(string(fmod(1.0/0.0, 1.0)), 'nan')
148*453b576eSBram Moolenaar  call assert_equal(string(fmod(1.0, 1.0/0.0)), '1.0')
149*453b576eSBram Moolenaar  call assert_equal(string(fmod(1.0, 0.0)), 'nan')
150*453b576eSBram Moolenaarendfunc
151*453b576eSBram Moolenaar
152*453b576eSBram Moolenaarfunc Test_pow()
153*453b576eSBram Moolenaar  call assert_equal(string(pow(0.0, 0.0)), '1.0')
154*453b576eSBram Moolenaar  call assert_equal(string(pow(2.0, 3.0)), '8.0')
155*453b576eSBram Moolenaar  call assert_equal(string(pow(2.0, 0.0/0.0)), 'nan')
156*453b576eSBram Moolenaar  call assert_equal(string(pow(0.0/0.0, 3.0)), 'nan')
157*453b576eSBram Moolenaar  call assert_equal(string(pow(0.0/0.0, 3.0)), 'nan')
158*453b576eSBram Moolenaar  call assert_equal(string(pow(2.0, 1.0/0.0)), 'inf')
159*453b576eSBram Moolenaar  call assert_equal(string(pow(1.0/0.0, 3.0)), 'inf')
160*453b576eSBram Moolenaarendfunc
161*453b576eSBram Moolenaar
162*453b576eSBram Moolenaarfunc Test_str2float()
163*453b576eSBram Moolenaar  call assert_equal(string(str2float('1')), '1.0')
164*453b576eSBram Moolenaar  call assert_equal(string(str2float('1.23')), '1.23')
165*453b576eSBram Moolenaar  call assert_equal(string(str2float('1.23abc')), '1.23')
166*453b576eSBram Moolenaar  call assert_equal(string(str2float('1e40')), '1.0e40')
167*453b576eSBram Moolenaar  call assert_equal(string(str2float('1e1000')), 'inf')
168*453b576eSBram Moolenaar  call assert_equal(string(str2float('inf')), 'inf')
169*453b576eSBram Moolenaar  call assert_equal(string(str2float('-inf')), '-inf')
170*453b576eSBram Moolenaar  call assert_equal(string(str2float('Inf')), 'inf')
171*453b576eSBram Moolenaar  call assert_equal(string(str2float('nan')), 'nan')
172*453b576eSBram Moolenaar  call assert_equal(string(str2float('NaN')), 'nan')
173*453b576eSBram Moolenaarendfunc
174*453b576eSBram Moolenaar
175*453b576eSBram Moolenaarfunc Test_floor()
176*453b576eSBram Moolenaar  call assert_equal(string(floor(2.0)), '2.0')
177*453b576eSBram Moolenaar  call assert_equal(string(floor(2.11)), '2.0')
178*453b576eSBram Moolenaar  call assert_equal(string(floor(2.99)), '2.0')
179*453b576eSBram Moolenaar  call assert_equal(string(floor(-2.11)), '-3.0')
180*453b576eSBram Moolenaar  call assert_equal(string(floor(-2.99)), '-3.0')
181*453b576eSBram Moolenaar  call assert_equal(string(floor(0.0/0.0)), 'nan')
182*453b576eSBram Moolenaar  call assert_equal(string(floor(1.0/0.0)), 'inf')
183*453b576eSBram Moolenaar  call assert_equal(string(floor(-1.0/0.0)), '-inf')
184*453b576eSBram Moolenaarendfunc
185*453b576eSBram Moolenaar
186*453b576eSBram Moolenaarfunc Test_ceil()
187*453b576eSBram Moolenaar  call assert_equal(string(ceil(2.0)), '2.0')
188*453b576eSBram Moolenaar  call assert_equal(string(ceil(2.11)), '3.0')
189*453b576eSBram Moolenaar  call assert_equal(string(ceil(2.99)), '3.0')
190*453b576eSBram Moolenaar  call assert_equal(string(ceil(-2.11)), '-2.0')
191*453b576eSBram Moolenaar  call assert_equal(string(ceil(-2.99)), '-2.0')
192*453b576eSBram Moolenaar  call assert_equal(string(ceil(0.0/0.0)), 'nan')
193*453b576eSBram Moolenaar  call assert_equal(string(ceil(1.0/0.0)), 'inf')
194*453b576eSBram Moolenaar  call assert_equal(string(ceil(-1.0/0.0)), '-inf')
195*453b576eSBram Moolenaarendfunc
196*453b576eSBram Moolenaar
197*453b576eSBram Moolenaarfunc Test_round()
198*453b576eSBram Moolenaar  call assert_equal(string(round(2.1)), '2.0')
199*453b576eSBram Moolenaar  call assert_equal(string(round(2.5)), '3.0')
200*453b576eSBram Moolenaar  call assert_equal(string(round(2.9)), '3.0')
201*453b576eSBram Moolenaar  call assert_equal(string(round(-2.1)), '-2.0')
202*453b576eSBram Moolenaar  call assert_equal(string(round(-2.5)), '-3.0')
203*453b576eSBram Moolenaar  call assert_equal(string(round(-2.9)), '-3.0')
204*453b576eSBram Moolenaar  call assert_equal(string(round(0.0/0.0)), 'nan')
205*453b576eSBram Moolenaar  call assert_equal(string(round(1.0/0.0)), 'inf')
206*453b576eSBram Moolenaar  call assert_equal(string(round(-1.0/0.0)), '-inf')
207*453b576eSBram Moolenaarendfunc
208*453b576eSBram Moolenaar
209*453b576eSBram Moolenaarfunc Test_trunc()
210*453b576eSBram Moolenaar  call assert_equal(string(trunc(2.1)), '2.0')
211*453b576eSBram Moolenaar  call assert_equal(string(trunc(2.5)), '2.0')
212*453b576eSBram Moolenaar  call assert_equal(string(trunc(2.9)), '2.0')
213*453b576eSBram Moolenaar  call assert_equal(string(trunc(-2.1)), '-2.0')
214*453b576eSBram Moolenaar  call assert_equal(string(trunc(-2.5)), '-2.0')
215*453b576eSBram Moolenaar  call assert_equal(string(trunc(-2.9)), '-2.0')
216*453b576eSBram Moolenaar  call assert_equal(string(trunc(0.0/0.0)), 'nan')
217*453b576eSBram Moolenaar  call assert_equal(string(trunc(1.0/0.0)), 'inf')
218*453b576eSBram Moolenaar  call assert_equal(string(trunc(-1.0/0.0)), '-inf')
219*453b576eSBram Moolenaarendfunc
220*453b576eSBram Moolenaar
221*453b576eSBram Moolenaarfunc Test_isnan()
222*453b576eSBram Moolenaar  call assert_equal(isnan(1.0), 0)
223*453b576eSBram Moolenaar  call assert_equal(isnan(0.0/0.0), 1)
224*453b576eSBram Moolenaar  call assert_equal(isnan(1.0/0.0), 0)
225*453b576eSBram Moolenaar  call assert_equal(isnan('a'), 0)
226*453b576eSBram Moolenaar  call assert_equal(isnan([]), 0)
227*453b576eSBram Moolenaarendfunc
228