comparison src/testdir/test_float_func.vim @ 10536:6ddf322ff7cf v8.0.0158

patch 8.0.0158: float funcion test fails on MS-Windows commit https://github.com/vim/vim/commit/6247361101dcccc0c877e90ad67cd0cc83df7c68 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 8 19:25:40 2017 +0100 patch 8.0.0158: float funcion test fails on MS-Windows Problem: On MS-Windows some float functions return a different value when passed unusual values. strtod() doesn't work for "inf" and "nan". Solution: Accept both results. Fix str2float() for MS-Windows. Also reorder assert function arguments.
author Christian Brabandt <cb@256bit.org>
date Sun, 08 Jan 2017 19:30:03 +0100
parents 80b50e43e382
children fff45421182b
comparison
equal deleted inserted replaced
10535:7eeebb3487d4 10536:6ddf322ff7cf
3 if !has('float') 3 if !has('float')
4 finish 4 finish
5 end 5 end
6 6
7 func Test_abs() 7 func Test_abs()
8 call assert_equal(string(abs(1.23)), '1.23') 8 call assert_equal('1.23', string(abs(1.23)))
9 call assert_equal(string(abs(-1.23)), '1.23') 9 call assert_equal('1.23', string(abs(-1.23)))
10 call assert_equal(string(abs(0.0)), '0.0') 10 call assert_equal('0.0', string(abs(0.0)))
11 call assert_equal(string(abs(1.0/(1.0/0.0))), '0.0') 11 call assert_equal('0.0', string(abs(1.0/(1.0/0.0))))
12 call assert_equal(string(abs(-1.0/(1.0/0.0))), '0.0') 12 call assert_equal('0.0', string(abs(-1.0/(1.0/0.0))))
13 call assert_equal(string(abs(1.0/0.0)), 'inf') 13 call assert_equal('inf', string(abs(1.0/0.0)))
14 call assert_equal(string(abs(-1.0/0.0)), 'inf') 14 call assert_equal('inf', string(abs(-1.0/0.0)))
15 call assert_equal(string(abs(0.0/0.0)), 'nan') 15 call assert_equal('nan', string(abs(0.0/0.0)))
16 endfunc 16 endfunc
17 17
18 func Test_sqrt() 18 func Test_sqrt()
19 call assert_equal(string(sqrt(0.0)), '0.0') 19 call assert_equal('0.0', string(sqrt(0.0)))
20 call assert_equal(string(sqrt(2.0)), '1.414214') 20 call assert_equal('1.414214', string(sqrt(2.0)))
21 call assert_equal(string(sqrt(1.0/0.0)), 'inf') 21 call assert_equal('inf', string(sqrt(1.0/0.0)))
22 call assert_equal(string(sqrt(-1.0)), 'nan') 22 call assert_equal('nan', string(sqrt(-1.0)))
23 call assert_equal(string(sqrt(0.0/0.0)), 'nan') 23 call assert_equal('nan', string(sqrt(0.0/0.0)))
24 endfunc 24 endfunc
25 25
26 func Test_log() 26 func Test_log()
27 call assert_equal(string(log(1.0)), '0.0') 27 call assert_equal('0.0', string(log(1.0)))
28 call assert_equal(string(log(0.5)), '-0.693147') 28 call assert_equal('-0.693147', string(log(0.5)))
29 call assert_equal(string(log(0.0)), '-inf') 29 call assert_equal('-inf', string(log(0.0)))
30 call assert_equal(string(log(-1.0)), 'nan') 30 call assert_equal('nan', string(log(-1.0)))
31 call assert_equal(string(log(1.0/0.0)), 'inf') 31 call assert_equal('inf', string(log(1.0/0.0)))
32 call assert_equal(string(log(0.0/0.0)), 'nan') 32 call assert_equal('nan', string(log(0.0/0.0)))
33 endfunc 33 endfunc
34 34
35 func Test_log10() 35 func Test_log10()
36 call assert_equal(string(log10(1.0)), '0.0') 36 call assert_equal('0.0', string(log10(1.0)))
37 call assert_equal(string(log10(100.0)), '2.0') 37 call assert_equal('2.0', string(log10(100.0)))
38 call assert_equal(string(log10(120.0)), '2.079181') 38 call assert_equal('2.079181', string(log10(120.0)))
39 call assert_equal(string(log10(0.0)), '-inf') 39 call assert_equal('-inf', string(log10(0.0)))
40 call assert_equal(string(log10(-1.0)), 'nan') 40 call assert_equal('nan', string(log10(-1.0)))
41 call assert_equal(string(log10(1.0/0.0)), 'inf') 41 call assert_equal('inf', string(log10(1.0/0.0)))
42 call assert_equal(string(log10(0.0/0.0)), 'nan') 42 call assert_equal('nan', string(log10(0.0/0.0)))
43 endfunc 43 endfunc
44 44
45 func Test_exp() 45 func Test_exp()
46 call assert_equal(string(exp(0.0)), '1.0') 46 call assert_equal('1.0', string(exp(0.0)))
47 call assert_equal(string(exp(2.0)), '7.389056') 47 call assert_equal('7.389056', string(exp(2.0)))
48 call assert_equal(string(exp(-1.0)),'0.367879') 48 call assert_equal('0.367879', string(exp(-1.0)))
49 call assert_equal(string(exp(1.0/0.0)), 'inf') 49 call assert_equal('inf', string(exp(1.0/0.0)))
50 call assert_equal(string(exp(-1.0/0.0)), '0.0') 50 call assert_equal('0.0', string(exp(-1.0/0.0)))
51 call assert_equal(string(exp(0.0/0.0)), 'nan') 51 call assert_equal('nan', string(exp(0.0/0.0)))
52 endfunc 52 endfunc
53 53
54 func Test_sin() 54 func Test_sin()
55 call assert_equal(string(sin(0.0)), '0.0') 55 call assert_equal('0.0', string(sin(0.0)))
56 call assert_equal(string(sin(1.0)), '0.841471') 56 call assert_equal('0.841471', string(sin(1.0)))
57 call assert_equal(string(sin(-0.5)), '-0.479426') 57 call assert_equal('-0.479426', string(sin(-0.5)))
58 call assert_equal(string(sin(0.0/0.0)), 'nan') 58 call assert_equal('nan', string(sin(0.0/0.0)))
59 call assert_equal(string(sin(1.0/0.0)), 'nan') 59 call assert_equal('nan', string(sin(1.0/0.0)))
60 call assert_equal(string(sin(1.0/(1.0/0.0))), '0.0') 60 call assert_equal('0.0', string(sin(1.0/(1.0/0.0))))
61 call assert_equal(string(sin(-1.0/(1.0/0.0))), '-0.0') 61 call assert_equal('-0.0', string(sin(-1.0/(1.0/0.0))))
62 endfunc 62 endfunc
63 63
64 func Test_asin() 64 func Test_asin()
65 call assert_equal(string(asin(0.0)), '0.0') 65 call assert_equal('0.0', string(asin(0.0)))
66 call assert_equal(string(asin(1.0)), '1.570796') 66 call assert_equal('1.570796', string(asin(1.0)))
67 call assert_equal(string(asin(-0.5)), '-0.523599') 67 call assert_equal('-0.523599', string(asin(-0.5)))
68 call assert_equal(string(asin(1.1)), 'nan') 68 call assert_equal('nan', string(asin(1.1)))
69 call assert_equal(string(asin(1.0/0.0)), 'nan') 69 call assert_equal('nan', string(asin(1.0/0.0)))
70 call assert_equal(string(asin(0.0/0.0)), 'nan') 70 call assert_equal('nan', string(asin(0.0/0.0)))
71 endfunc 71 endfunc
72 72
73 func Test_sinh() 73 func Test_sinh()
74 call assert_equal(string(sinh(0.0)), '0.0') 74 call assert_equal('0.0', string(sinh(0.0)))
75 call assert_equal(string(sinh(0.5)), '0.521095') 75 call assert_equal('0.521095', string(sinh(0.5)))
76 call assert_equal(string(sinh(-0.9)), '-1.026517') 76 call assert_equal('-1.026517', string(sinh(-0.9)))
77 call assert_equal(string(sinh(1.0/0.0)), 'inf') 77 call assert_equal('inf', string(sinh(1.0/0.0)))
78 call assert_equal(string(sinh(-1.0/0.0)), '-inf') 78 call assert_equal('-inf', string(sinh(-1.0/0.0)))
79 call assert_equal(string(sinh(0.0/0.0)), 'nan') 79 call assert_equal('nan', string(sinh(0.0/0.0)))
80 endfunc 80 endfunc
81 81
82 func Test_cos() 82 func Test_cos()
83 call assert_equal(string(cos(0.0)), '1.0') 83 call assert_equal('1.0', string(cos(0.0)))
84 call assert_equal(string(cos(1.0)), '0.540302') 84 call assert_equal('0.540302', string(cos(1.0)))
85 call assert_equal(string(cos(-0.5)), '0.877583') 85 call assert_equal('0.877583', string(cos(-0.5)))
86 call assert_equal(string(cos(0.0/0.0)), 'nan') 86 call assert_equal('nan', string(cos(0.0/0.0)))
87 call assert_equal(string(cos(1.0/0.0)), 'nan') 87 call assert_equal('nan', string(cos(1.0/0.0)))
88 endfunc 88 endfunc
89 89
90 func Test_acos() 90 func Test_acos()
91 call assert_equal(string(acos(0.0)), '1.570796') 91 call assert_equal('1.570796', string(acos(0.0)))
92 call assert_equal(string(acos(1.0)), '0.0') 92 call assert_equal('0.0', string(acos(1.0)))
93 call assert_equal(string(acos(-1.0)), '3.141593') 93 call assert_equal('3.141593', string(acos(-1.0)))
94 call assert_equal(string(acos(-0.5)), '2.094395') 94 call assert_equal('2.094395', string(acos(-0.5)))
95 call assert_equal(string(acos(1.1)), 'nan') 95 call assert_equal('nan', string(acos(1.1)))
96 call assert_equal(string(acos(1.0/0.0)), 'nan') 96 call assert_equal('nan', string(acos(1.0/0.0)))
97 call assert_equal(string(acos(0.0/0.0)), 'nan') 97 call assert_equal('nan', string(acos(0.0/0.0)))
98 endfunc 98 endfunc
99 99
100 func Test_cosh() 100 func Test_cosh()
101 call assert_equal(string(cosh(0.0)), '1.0') 101 call assert_equal('1.0', string(cosh(0.0)))
102 call assert_equal(string(cosh(0.5)), '1.127626') 102 call assert_equal('1.127626', string(cosh(0.5)))
103 call assert_equal(string(cosh(1.0/0.0)), 'inf') 103 call assert_equal('inf', string(cosh(1.0/0.0)))
104 call assert_equal(string(cosh(-1.0/0.0)), 'inf') 104 call assert_equal('inf', string(cosh(-1.0/0.0)))
105 call assert_equal(string(cosh(0.0/0.0)), 'nan') 105 call assert_equal('nan', string(cosh(0.0/0.0)))
106 endfunc 106 endfunc
107 107
108 func Test_tan() 108 func Test_tan()
109 call assert_equal(string(tan(0.0)), '0.0') 109 call assert_equal('0.0', string(tan(0.0)))
110 call assert_equal(string(tan(0.5)), '0.546302') 110 call assert_equal('0.546302', string(tan(0.5)))
111 call assert_equal(string(tan(-0.5)), '-0.546302') 111 call assert_equal('-0.546302', string(tan(-0.5)))
112 call assert_equal(string(tan(1.0/0.0)), 'nan') 112 call assert_equal('nan', string(tan(1.0/0.0)))
113 call assert_equal(string(cos(0.0/0.0)), 'nan') 113 call assert_equal('nan', string(cos(0.0/0.0)))
114 call assert_equal(string(tan(1.0/(1.0/0.0))), '0.0') 114 call assert_equal('0.0', string(tan(1.0/(1.0/0.0))))
115 call assert_equal(string(tan(-1.0/(1.0/0.0))), '-0.0') 115 call assert_equal('-0.0', string(tan(-1.0/(1.0/0.0))))
116 endfunc 116 endfunc
117 117
118 func Test_atan() 118 func Test_atan()
119 call assert_equal(string(atan(0.0)), '0.0') 119 call assert_equal('0.0', string(atan(0.0)))
120 call assert_equal(string(atan(0.5)), '0.463648') 120 call assert_equal('0.463648', string(atan(0.5)))
121 call assert_equal(string(atan(-1.0)), '-0.785398') 121 call assert_equal('-0.785398', string(atan(-1.0)))
122 call assert_equal(string(atan(1.0/0.0)), '1.570796') 122 call assert_equal('1.570796', string(atan(1.0/0.0)))
123 call assert_equal(string(atan(-1.0/0.0)), '-1.570796') 123 call assert_equal('-1.570796', string(atan(-1.0/0.0)))
124 call assert_equal(string(atan(0.0/0.0)), 'nan') 124 call assert_equal('nan', string(atan(0.0/0.0)))
125 endfunc 125 endfunc
126 126
127 func Test_atan2() 127 func Test_atan2()
128 call assert_equal(string(atan2(-1, -1)), '-2.356194') 128 call assert_equal('-2.356194', string(atan2(-1, -1)))
129 call assert_equal(string(atan2(1, -1)), '2.356194') 129 call assert_equal('2.356194', string(atan2(1, -1)))
130 call assert_equal(string(atan2(1.0, 1.0/0.0)), '0.0') 130 call assert_equal('0.0', string(atan2(1.0, 1.0/0.0)))
131 call assert_equal(string(atan2(1.0/0.0, 1.0)), '1.570796') 131 call assert_equal('1.570796', string(atan2(1.0/0.0, 1.0)))
132 call assert_equal(string(atan2(0.0/0.0, 1.0)), 'nan') 132 call assert_equal('nan', string(atan2(0.0/0.0, 1.0)))
133 endfunc 133 endfunc
134 134
135 func Test_tanh() 135 func Test_tanh()
136 call assert_equal(string(tanh(0.0)), '0.0') 136 call assert_equal('0.0', string(tanh(0.0)))
137 call assert_equal(string(tanh(0.5)), '0.462117') 137 call assert_equal('0.462117', string(tanh(0.5)))
138 call assert_equal(string(tanh(-1.0)), '-0.761594') 138 call assert_equal('-0.761594', string(tanh(-1.0)))
139 call assert_equal(string(tanh(1.0/0.0)), '1.0') 139 call assert_equal('1.0', string(tanh(1.0/0.0)))
140 call assert_equal(string(tanh(-1.0/0.0)), '-1.0') 140 call assert_equal('-1.0', string(tanh(-1.0/0.0)))
141 call assert_equal(string(tanh(0.0/0.0)), 'nan') 141 call assert_equal('nan', string(tanh(0.0/0.0)))
142 endfunc 142 endfunc
143 143
144 func Test_fmod() 144 func Test_fmod()
145 call assert_equal(string(fmod(12.33, 1.22)), '0.13') 145 call assert_equal('0.13', string(fmod(12.33, 1.22)))
146 call assert_equal(string(fmod(-12.33, 1.22)), '-0.13') 146 call assert_equal('-0.13', string(fmod(-12.33, 1.22)))
147 call assert_equal(string(fmod(1.0/0.0, 1.0)), 'nan') 147 call assert_equal('nan', string(fmod(1.0/0.0, 1.0)))
148 call assert_equal(string(fmod(1.0, 1.0/0.0)), '1.0') 148 " On Windows we get "nan" instead of 1.0, accept both.
149 call assert_equal(string(fmod(1.0, 0.0)), 'nan') 149 let res = string(fmod(1.0, 1.0/0.0))
150 if res != 'nan'
151 call assert_equal('1.0', res)
152 endif
153 call assert_equal('nan', string(fmod(1.0, 0.0)))
150 endfunc 154 endfunc
151 155
152 func Test_pow() 156 func Test_pow()
153 call assert_equal(string(pow(0.0, 0.0)), '1.0') 157 call assert_equal('1.0', string(pow(0.0, 0.0)))
154 call assert_equal(string(pow(2.0, 3.0)), '8.0') 158 call assert_equal('8.0', string(pow(2.0, 3.0)))
155 call assert_equal(string(pow(2.0, 0.0/0.0)), 'nan') 159 call assert_equal('nan', string(pow(2.0, 0.0/0.0)))
156 call assert_equal(string(pow(0.0/0.0, 3.0)), 'nan') 160 call assert_equal('nan', string(pow(0.0/0.0, 3.0)))
157 call assert_equal(string(pow(0.0/0.0, 3.0)), 'nan') 161 call assert_equal('nan', string(pow(0.0/0.0, 3.0)))
158 call assert_equal(string(pow(2.0, 1.0/0.0)), 'inf') 162 call assert_equal('inf', string(pow(2.0, 1.0/0.0)))
159 call assert_equal(string(pow(1.0/0.0, 3.0)), 'inf') 163 call assert_equal('inf', string(pow(1.0/0.0, 3.0)))
160 endfunc 164 endfunc
161 165
162 func Test_str2float() 166 func Test_str2float()
163 call assert_equal(string(str2float('1')), '1.0') 167 call assert_equal('1.0', string(str2float('1')))
164 call assert_equal(string(str2float('1.23')), '1.23') 168 call assert_equal('1.23', string(str2float('1.23')))
165 call assert_equal(string(str2float('1.23abc')), '1.23') 169 call assert_equal('1.23', string(str2float('1.23abc')))
166 call assert_equal(string(str2float('1e40')), '1.0e40') 170 call assert_equal('1.0e40', string(str2float('1e40')))
167 call assert_equal(string(str2float('1e1000')), 'inf') 171 call assert_equal('inf', string(str2float('1e1000')))
168 call assert_equal(string(str2float('inf')), 'inf') 172 call assert_equal('inf', string(str2float('inf')))
169 call assert_equal(string(str2float('-inf')), '-inf') 173 call assert_equal('-inf', string(str2float('-inf')))
170 call assert_equal(string(str2float('Inf')), 'inf') 174 call assert_equal('inf', string(str2float('Inf')))
171 call assert_equal(string(str2float('nan')), 'nan') 175 call assert_equal('nan', string(str2float('nan')))
172 call assert_equal(string(str2float('NaN')), 'nan') 176 call assert_equal('nan', string(str2float('NaN')))
173 endfunc 177 endfunc
174 178
175 func Test_floor() 179 func Test_floor()
176 call assert_equal(string(floor(2.0)), '2.0') 180 call assert_equal('2.0', string(floor(2.0)))
177 call assert_equal(string(floor(2.11)), '2.0') 181 call assert_equal('2.0', string(floor(2.11)))
178 call assert_equal(string(floor(2.99)), '2.0') 182 call assert_equal('2.0', string(floor(2.99)))
179 call assert_equal(string(floor(-2.11)), '-3.0') 183 call assert_equal('-3.0', string(floor(-2.11)))
180 call assert_equal(string(floor(-2.99)), '-3.0') 184 call assert_equal('-3.0', string(floor(-2.99)))
181 call assert_equal(string(floor(0.0/0.0)), 'nan') 185 call assert_equal('nan', string(floor(0.0/0.0)))
182 call assert_equal(string(floor(1.0/0.0)), 'inf') 186 call assert_equal('inf', string(floor(1.0/0.0)))
183 call assert_equal(string(floor(-1.0/0.0)), '-inf') 187 call assert_equal('-inf', string(floor(-1.0/0.0)))
184 endfunc 188 endfunc
185 189
186 func Test_ceil() 190 func Test_ceil()
187 call assert_equal(string(ceil(2.0)), '2.0') 191 call assert_equal('2.0', string(ceil(2.0)))
188 call assert_equal(string(ceil(2.11)), '3.0') 192 call assert_equal('3.0', string(ceil(2.11)))
189 call assert_equal(string(ceil(2.99)), '3.0') 193 call assert_equal('3.0', string(ceil(2.99)))
190 call assert_equal(string(ceil(-2.11)), '-2.0') 194 call assert_equal('-2.0', string(ceil(-2.11)))
191 call assert_equal(string(ceil(-2.99)), '-2.0') 195 call assert_equal('-2.0', string(ceil(-2.99)))
192 call assert_equal(string(ceil(0.0/0.0)), 'nan') 196 call assert_equal('nan', string(ceil(0.0/0.0)))
193 call assert_equal(string(ceil(1.0/0.0)), 'inf') 197 call assert_equal('inf', string(ceil(1.0/0.0)))
194 call assert_equal(string(ceil(-1.0/0.0)), '-inf') 198 call assert_equal('-inf', string(ceil(-1.0/0.0)))
195 endfunc 199 endfunc
196 200
197 func Test_round() 201 func Test_round()
198 call assert_equal(string(round(2.1)), '2.0') 202 call assert_equal('2.0', string(round(2.1)))
199 call assert_equal(string(round(2.5)), '3.0') 203 call assert_equal('3.0', string(round(2.5)))
200 call assert_equal(string(round(2.9)), '3.0') 204 call assert_equal('3.0', string(round(2.9)))
201 call assert_equal(string(round(-2.1)), '-2.0') 205 call assert_equal('-2.0', string(round(-2.1)))
202 call assert_equal(string(round(-2.5)), '-3.0') 206 call assert_equal('-3.0', string(round(-2.5)))
203 call assert_equal(string(round(-2.9)), '-3.0') 207 call assert_equal('-3.0', string(round(-2.9)))
204 call assert_equal(string(round(0.0/0.0)), 'nan') 208 call assert_equal('nan', string(round(0.0/0.0)))
205 call assert_equal(string(round(1.0/0.0)), 'inf') 209 call assert_equal('inf', string(round(1.0/0.0)))
206 call assert_equal(string(round(-1.0/0.0)), '-inf') 210 call assert_equal('-inf', string(round(-1.0/0.0)))
207 endfunc 211 endfunc
208 212
209 func Test_trunc() 213 func Test_trunc()
210 call assert_equal(string(trunc(2.1)), '2.0') 214 call assert_equal('2.0', string(trunc(2.1)))
211 call assert_equal(string(trunc(2.5)), '2.0') 215 call assert_equal('2.0', string(trunc(2.5)))
212 call assert_equal(string(trunc(2.9)), '2.0') 216 call assert_equal('2.0', string(trunc(2.9)))
213 call assert_equal(string(trunc(-2.1)), '-2.0') 217 call assert_equal('-2.0', string(trunc(-2.1)))
214 call assert_equal(string(trunc(-2.5)), '-2.0') 218 call assert_equal('-2.0', string(trunc(-2.5)))
215 call assert_equal(string(trunc(-2.9)), '-2.0') 219 call assert_equal('-2.0', string(trunc(-2.9)))
216 call assert_equal(string(trunc(0.0/0.0)), 'nan') 220 call assert_equal('nan', string(trunc(0.0/0.0)))
217 call assert_equal(string(trunc(1.0/0.0)), 'inf') 221 call assert_equal('inf', string(trunc(1.0/0.0)))
218 call assert_equal(string(trunc(-1.0/0.0)), '-inf') 222 call assert_equal('-inf', string(trunc(-1.0/0.0)))
219 endfunc 223 endfunc
220 224
221 func Test_isnan() 225 func Test_isnan()
222 call assert_equal(isnan(1.0), 0) 226 call assert_equal(0, isnan(1.0))
223 call assert_equal(isnan(0.0/0.0), 1) 227 call assert_equal(1, isnan(0.0/0.0))
224 call assert_equal(isnan(1.0/0.0), 0) 228 call assert_equal(0, isnan(1.0/0.0))
225 call assert_equal(isnan('a'), 0) 229 call assert_equal(0, isnan('a'))
226 call assert_equal(isnan([]), 0) 230 call assert_equal(0, isnan([]))
227 endfunc 231 endfunc