]> gitweb.factorcode.org Git - factor.git/blob - basis/math/functions/functions-tests.factor
bf275341f8889ee1bb947560333a58b24de43bf2
[factor.git] / basis / math / functions / functions-tests.factor
1 USING: kernel literals math math.constants math.functions math.libm
2 math.order math.ranges math.private sequences tools.test ;
3
4 IN: math.functions.tests
5
6 [ t ] [ 4 4 .00000001 ~ ] unit-test
7 [ t ] [ 4.0000001 4.0000001 .000001 ~ ] unit-test
8 [ f ] [ -4.0000001 4.0000001 .00001 ~ ] unit-test
9 [ t ] [ -.0000000000001 0 .0000000001 ~ ] unit-test
10 [ t ] [ 100 101 -.9 ~ ] unit-test
11 [ f ] [ 100 120 -.09 ~ ] unit-test
12 [ t ] [ 0 0 -.9 ~ ] unit-test
13 [ f ] [ 0 10 -.9 ~ ] unit-test
14
15 ! Lets get the argument order correct, eh?
16 [ 0.0 ] [ 0.0 1.0 fatan2 ] unit-test
17 [ 0.25 ] [ 2.0 -2.0 fpow ] unit-test
18
19 [ 4.0 ] [ 16 sqrt ] unit-test
20 [ 2.0 ] [ 4.0 0.5 ^ ] unit-test
21 [ C{ 0.0 4.0 } ] [ -16 sqrt ] unit-test
22
23 [ 4 ] [ 2 2 ^ ] unit-test
24 [ 1/4 ] [ 2 -2 ^ ] unit-test
25 [ t ] [ 2 0.5 ^ 2 ^ 2 2.00001 between? ] unit-test
26 [ t ] [ e pi i* ^ real-part -1.0 = ] unit-test
27 [ t ] [ e pi i* ^ imaginary-part -0.00001 0.00001 between? ] unit-test
28
29 [ 1/0. ] [ 2.0 1024 ^ ] unit-test
30 [ 0x1.0p-1024 ] [ 2.0 -1024 ^ ] unit-test
31
32 [ t ] [ 0 0 ^ fp-nan? ] unit-test
33 [ 0.0 ] [ 0.0 1.0 ^ ] unit-test
34 [ 1/0. ] [ 0 -2 ^ ] unit-test
35 [ t ] [ 0 0.0 ^ fp-nan? ] unit-test
36 [ t ] [ 0.0 0.0 ^ fp-nan? ] unit-test
37 [ 1/0. ] [ 0 -2.0 ^ ] unit-test
38 [ 0 ] [ 0 3.0 ^ ] unit-test
39 [ 0 ] [ 0 3 ^ ] unit-test
40
41 : factorial ( n -- n! ) [ 1 ] [ [1,b] 1 [ * ] reduce ] if-zero ;
42
43 [ 0.0 0 ] [ 0 frexp ] unit-test
44 [ 0.5 1 ] [ 1 frexp ] unit-test
45 [ -0.5 1 ] [ -1 frexp ] unit-test
46 [ 0.5 2 ] [ 2 frexp ] unit-test
47 [ -0.5 2 ] [ -2 frexp ] unit-test
48 [ 0.75 2 ] [ 3 frexp ] unit-test
49 [ -0.75 2 ] [ -3 frexp ] unit-test
50 [ 0.75 0 ] [ 0.75 frexp ] unit-test
51 [ -0.75 0 ] [ -0.75 frexp ] unit-test
52 [ 1/0. ] [ 1/0. frexp drop ] unit-test
53 [ -1/0. ] [ -1/0. frexp drop ] unit-test
54 [ t ] [ 0/0. frexp drop fp-nan? ] unit-test
55 [  0.75 10,002 t ] [  3 10,000 2^ * [ frexp ] [ bignum? ] bi ] unit-test
56 [ -0.75 10,002 t ] [ -3 10,000 2^ * [ frexp ] [ bignum? ] bi ] unit-test
57
58 { 0.0 } [ 0.0 1 ldexp ] unit-test
59 { -0.0 } [ -0.0 1 ldexp ] unit-test
60 { 1/0. } [ 1/0. 1 ldexp ] unit-test
61 { -1/0. } [ -1/0. 1 ldexp ] unit-test
62 { t } [ NAN: 90210 dup 1 ldexp [ fp-nan-payload ] same? ] unit-test
63 { 49152.0 } [ 12.0 12 ldexp ] unit-test
64 { 0x1.8p-9 } [ 12.0 -12 ldexp ] unit-test
65 { 49152 } [ 12 12 ldexp ] unit-test
66 { 0 } [ 12 -12 ldexp ] unit-test
67
68 [ 0.0 ] [ 1 log ] unit-test
69 [ 0.0 ] [ 1.0 log ] unit-test
70 [ 1.0 ] [ e log ] unit-test
71
72 CONSTANT: log-factorial-1000 0x1.71820d04e2eb6p12
73 CONSTANT: log10-factorial-1000 0x1.40f3593ed6f8ep11
74
75 [ $ log-factorial-1000 t ] [ 1000 factorial [ log ] [ bignum? ] bi ] unit-test
76 [ C{ $ log-factorial-1000 $ pi } t ] [ 1000 factorial neg [ log ] [ bignum? ] bi ] unit-test
77
78 [ 0.0 ] [ 1.0 log10 ] unit-test
79 [ 1.0 ] [ 10.0 log10 ] unit-test
80 [ 2.0 ] [ 100.0 log10 ] unit-test
81 [ 3.0 ] [ 1000.0 log10 ] unit-test
82 [ 4.0 ] [ 10000.0 log10 ] unit-test
83 [ $ log10-factorial-1000 t ] [ 1000 factorial [ log10 ] [ bignum? ] bi ] unit-test
84
85 [ t ] [ 1 e^ e 1.e-10 ~ ] unit-test
86 [ f ] [ 1 e^ 0/0. 1.e-10 ~ ] unit-test
87 [ f ] [ 0/0. 1 e^ 1.e-10 ~ ] unit-test
88 [ t ] [ 1.0 e^ e 1.e-10 ~ ] unit-test
89 [ t ] [ -1 e^ e * 1.0 1.e-10 ~ ] unit-test
90 [ f ] [ 1/0. 1/0. 1.e-10 ~ ] unit-test
91 [ f ] [ 1/0. -1/0. 1.e-10 ~ ] unit-test
92 [ f ] [ 1/0. 0/0. 1.e-10 ~ ] unit-test
93 [ f ] [ 0/0. -1/0. 1.e-10 ~ ] unit-test
94
95 [ 1.0 ] [ 0 cosh ] unit-test
96 [ 1.0 ] [ 0.0 cosh ] unit-test
97 [ 0.0 ] [ 1 acosh ] unit-test
98 [ 0.0 ] [ 1.0 acosh ] unit-test
99
100 [ 1.0 ] [ 0 cos ] unit-test
101 [ 1.0 ] [ 0.0 cos ] unit-test
102 [ 0.0 ] [ 1 acos ] unit-test
103 [ 0.0 ] [ 1.0 acos ] unit-test
104
105 [ 0.0 ] [ 0 sinh ] unit-test
106 [ 0.0 ] [ 0.0 sinh ] unit-test
107 [ 0.0 ] [ 0 asinh ] unit-test
108 [ 0.0 ] [ 0.0 asinh ] unit-test
109
110 [ 0.0 ] [ 0 sin ] unit-test
111 [ 0.0 ] [ 0.0 sin ] unit-test
112 [ 0.0 ] [ 0 asin ] unit-test
113 [ 0.0 ] [ 0.0 asin ] unit-test
114
115 [ 0.0 ] [ 0 tan ] unit-test
116 [ t ] [ pi 2 / tan 1.e10 > ] unit-test
117
118 [ t ] [ 10 atan real? ] unit-test
119 [ t ] [ 10.0 atan real? ] unit-test
120 [ f ] [ 10 atanh real? ] unit-test
121 [ f ] [ 10.0 atanh real? ] unit-test
122
123 [ t ] [ 10 asin sin 10 1.e-10 ~ ] unit-test
124 [ t ] [ -1 sqrt neg dup acos cos 1.e-10 ~ ] unit-test
125 [ t ] [ -100 atan tan -100 1.e-10 ~ ] unit-test
126 [ t ] [ 10 asinh sinh 10 1.e-10 ~ ] unit-test
127 [ t ] [ 10 atanh tanh 10 1.e-10 ~ ] unit-test
128 [ t ] [ 0.5 atanh tanh 0.5 1.e-10 ~ ] unit-test
129
130 [ 100 ] [ 100 100 gcd nip ] unit-test
131 [ 100 ] [ 1000 100 gcd nip ] unit-test
132 [ 100 ] [ 100 1000 gcd nip ] unit-test
133 [ 4 ] [ 132 64 gcd nip ] unit-test
134 [ 4 ] [ -132 64 gcd nip ] unit-test
135 [ 4 ] [ -132 -64 gcd nip ] unit-test
136 [ 4 ] [ 132 -64 gcd nip ] unit-test
137 [ 4 ] [ -132 -64 gcd nip ] unit-test
138
139 [ 100 ] [ 100 >bignum 100 >bignum gcd nip ] unit-test
140 [ 100 ] [ 1000 >bignum 100 >bignum gcd nip ] unit-test
141 [ 100 ] [ 100 >bignum 1000 >bignum gcd nip ] unit-test
142 [ 4 ] [ 132 >bignum 64 >bignum gcd nip ] unit-test
143 [ 4 ] [ -132 >bignum 64 >bignum gcd nip ] unit-test
144 [ 4 ] [ -132 >bignum -64 >bignum gcd nip ] unit-test
145 [ 4 ] [ 132 >bignum -64 >bignum gcd nip ] unit-test
146 [ 4 ] [ -132 >bignum -64 >bignum gcd nip ] unit-test
147
148 [ 6 ] [
149     1326264299060955293181542400000006
150     1591517158873146351817850880000000
151     gcd nip
152 ] unit-test
153
154 [ 11 ] [
155     13262642990609552931815424
156     159151715887314635181785
157     gcd nip
158 ] unit-test
159
160 [ 3 ] [
161     13262642990609552931
162     1591517158873146351
163     gcd nip
164 ] unit-test
165
166 [ 26525285981219 ] [
167     132626429906095
168     159151715887314
169     gcd nip
170 ] unit-test
171
172
173 : verify-gcd ( a b -- ? )
174     2dup gcd
175     [ rot * swap rem ] dip = ;
176
177 [ t ] [ 123 124 verify-gcd ] unit-test
178 [ t ] [ 50 120 verify-gcd ] unit-test
179
180 [ t ] [ 0 42 divisor? ] unit-test
181 [ t ] [ 42 7 divisor? ] unit-test
182 [ t ] [ 42 -7 divisor? ] unit-test
183 [ t ] [ 42 42 divisor? ] unit-test
184 [ f ] [ 42 16 divisor? ] unit-test
185
186 [ 3 ] [ 5 7 mod-inv ] unit-test
187 [ 78572682077 ] [ 234829342 342389423843 mod-inv ] unit-test
188
189 [ 2 10 mod-inv ] must-fail
190
191 [ t ] [ 15 37 137 ^mod 15 37 ^ 137 mod = ] unit-test
192
193 [ t ] [ 0 0 ^ fp-nan? ] unit-test
194 [ 1 ] [ 10 0 ^ ] unit-test
195 [ 1/8 ] [ 1/2 3 ^ ] unit-test
196 [ 1/8 ] [ 2 -3 ^ ] unit-test
197 [ t ] [ 1 100 shift 2 100 ^ = ] unit-test
198
199 [ 1 ] [ 7/8 ceiling ] unit-test
200 [ 2 ] [ 3/2 ceiling ] unit-test
201 [ 0 ] [ -7/8 ceiling ] unit-test
202 [ -1 ] [ -3/2 ceiling ] unit-test
203
204 [ 4.0 ] [ 4.5 truncate ] unit-test
205 [ 4.0 ] [ 4.5 floor ] unit-test
206 [ 5.0 ] [ 4.5 ceiling ] unit-test
207
208 [ -4.0 ] [ -4.5 truncate ] unit-test
209 [ -5.0 ] [ -4.5 floor ] unit-test
210 [ -4.0 ] [ -4.5 ceiling ] unit-test
211
212 [ -4.0 ] [ -4.0 truncate ] unit-test
213 [ -4.0 ] [ -4.0 floor ] unit-test
214 [ -4.0 ] [ -4.0 ceiling ] unit-test
215
216 [ -5 ] [ -9/2 round ] unit-test
217 [ -4 ] [ -22/5 round ] unit-test
218 [ 5 ] [ 9/2 round ] unit-test
219 [ 4 ] [ 22/5 round ] unit-test
220
221 [ -5.0 ] [ -4.5 round ] unit-test
222 [ -4.0 ] [ -4.4 round ] unit-test
223 [ 5.0 ] [ 4.5 round ] unit-test
224 [ 4.0 ] [ 4.4 round ] unit-test
225
226 [ 6 59967 ] [ 3837888 factor-2s ] unit-test
227 [ 6 -59967 ] [ -3837888 factor-2s ] unit-test
228
229 [ 1 ] [
230     183009416410801897
231     1067811677921310779
232     2135623355842621559
233     ^mod
234 ] unit-test
235
236 [ 1 ] [
237     183009416410801897
238     1067811677921310779
239     2135623355842621559
240     [ >bignum ] tri@ ^mod
241 ] unit-test
242
243 [ 1.0  ] [ 1.0 2.5 0.0 lerp ] unit-test
244 [ 2.5  ] [ 1.0 2.5 1.0 lerp ] unit-test
245 [ 1.75 ] [ 1.0 2.5 0.5 lerp ] unit-test
246
247 [ C{ 1 2 } ] [ C{ 1 2 } 1 ^ ] unit-test
248
249 { { t t t } } [
250     3 3 roots {
251         1.442249570307408
252         C{ -0.7211247851537038 1.249024766483407 }
253         C{ -0.7211247851537049 -1.249024766483406 }
254     } [ .01 ~ ] 2map
255 ] unit-test
256
257 { t } [ 3 15 roots [ 15 ^ 3 .01 ~ ] all? ] unit-test
258
259 { .5 } [ 0 sigmoid ] unit-test
260
261 { 1 } [ 12 signum ] unit-test
262 { -1 } [ -5.0 signum ] unit-test
263 { 0 } [ 0 signum ] unit-test
264 { t } [ C{ 3.0 -1.5 } signum C{ 0.8944271909999157 -0.4472135954999579 } 1e-10 ~ ] unit-test
265
266 { 1.0 } [ 1 2 copysign ] unit-test
267 { -1.0 } [ 1 -2 copysign ] unit-test
268 { 1.0 } [ -1 0 copysign ] unit-test
269 { -0.0 } [ 0 -1.0 copysign ] unit-test
270 { -1.0 } [ -1 -0.0 copysign ] unit-test
271 { 1.5 } [ -1.5 2 copysign ] unit-test
272 { -1.5 } [ -1.5 -2 copysign ] unit-test