fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / dynpmc / rational.t
blob882bdeedfcf8cd4e2cfc891b358b405045d6d1c9
1 #!./parrot
2 # Copyright (C) 2008-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/dynpmc/rational.t - Rational PMC
9 =head1 SYNOPSIS
11     % prove t/dynpmc/rational.t
13 =head1 DESCRIPTION
15 Tests the Rational PMC.
17 =cut
19 .sub main :main
20     .include 'test_more.pir'
21     .include 'iglobals.pasm'
22     .local pmc config_hash, interp
24     interp = getinterp
25     config_hash = interp[.IGLOBALS_CONFIG_HASH]
26     $S0 = config_hash['gmp']
28     unless $S0 goto no_gmp
29     plan(56)
30     goto gmp_tests
32   no_gmp:
33     # seems like plan(0) is not supported currently
34     plan(1)
35     ok(1,'GMP not found, skipping Rational tests')
36     .return()
38     # The following tests only run if GMP is installed
39  gmp_tests:
40     loadlib $P1, 'rational'
41     test_init()
42     test_version()
43     test_set_get_native_int()
44     test_set_get_native_float()
45     test_set_get_native_string()
47     test_set_get_int()
48     test_set_get_float()
49     test_set_get_string()
51     test_inc_dec()
52     test_add_int_inplace()
53     test_add_float_inplace()
55     test_add_int_pmc_inplace()
56     test_add_float_pmc_inplace()
57     test_add_rats_inplace()
59     test_subtract_int()
60     test_subtract_float()
61     test_subtract_int_pmc()
62     test_subtract_rats()
64     test_multiply_int()
65     test_multiply_float()
66     test_multiply_int_pmc()
67     test_multiply_float_pmc()
68     test_multiply_rats()
70     test_divide_int()
71     test_divide_float()
72     test_divide_int_pmc()
73     test_divide_float_pmc()
74     test_divide_rats()
76     test_neg()
77     test_abs()
78     test_cmp()
79     test_equal_tt1517()
80 .end
82 .sub test_neg
83     new $P2, 'Rational'
84     new $P3, 'Rational'
86     $P2 = "-3/2"
87     $P3 = -$P2
88     $P2 = -$P2
90     is($P2,'3/2','neg')
91     is($P3,'3/2','neg')
92 .end
94 .sub test_abs
95     new $P2, 'Rational'
96     new $P3, 'Rational'
98     $P2 = "-3/2"
99     $P3 = abs $P2
100     abs $P2
101     is($P2,'3/2','abs')
102     is($P3,'3/2','abs')
103 .end
105 .sub test_equal_tt1517
106     new $P2, 'Rational'
107     new $P3, 'Integer'
108     $P2 = "2/1"
109     $P3 = 2
110     if $P2 == $P3 goto pass
111     ok(0,'== on Rational and Integer PMC')
112     .return()
113   pass:
114     ok(1,'== on Rational and Integer PMC')
115 .end
117 .sub test_cmp
118     new $P2, 'Rational'
119     new $P3, 'Rational'
121     $P2 = "3/2"
122     $P3 = "6/4"
124     if $P2 == $P3 goto EQ
125     goto NE
126   EQ:
127     ok(1,'== on Rational PMC')
128     goto END_EQ
129   NE:
130     ok(0,'== on Rational PMC')
131   END_EQ:
133     $P3 = "7/4"
134     cmp $I1, $P2, $P3
135     cmp $I2, $P3, $P2
136     is($I1,-1,'cmp on Rational PMC')
137     is($I2,1,'cmp on Rational PMC')
138 .end
140 .sub test_divide_int
141     new $P1, 'Rational'
142     new $P2, 'Rational'
143     $I1 = 7
145     $P1 = "3/2"
146     $P2 = $P1 / $I1
147     $P1 = $P1 / $I1
148     is($P1,'3/14','divide int')
149     is($P2,'3/14','divide int')
150 .end
152 .sub test_divide_float
153     new $P1, 'Rational'
154     new $P2, 'Rational'
155     $N1 = 7.
157     $P1 = "3/2"
158     $P2 = $P1 / $N1
159     $P1 = $P1 / $N1
160     is($P1,'3/14','divide float')
161     is($P2,'3/14','divide float')
163 .end
165 .sub test_divide_int_pmc
166     new $P2, 'Rational'
167     new $P3, 'Rational'
168     new $P4, 'Integer'
170     $P4 = 7
172     $P2 = "3/2"
173     $P3 = $P2 / $P4
174     $P2 = $P2 / $P4
175     is($P2,'3/14','divide Integer PMC')
176     is($P3,'3/14','divide Integer PMC')
177 .end
179 .sub test_divide_float_pmc
180     new $P2, 'Rational'
181     new $P3, 'Rational'
182     new $P4, 'Float'
184     $P4 = 7.
186     $P2 = "3/2"
187     $P3 = $P2 / $P4
188     $P2 = $P2 / $P4
189     is($P2,'3/14','divide Float PMC')
190     is($P3,'3/14','divide Float PMC')
191 .end
193 .sub test_divide_rats
194     new $P1, 'Rational'
195     new $P2, 'Rational'
196     new $P3, 'Rational'
198     $P2 = "3/2"
199     $P3 = "5/2"
201     $P1 = $P2 / $P3
202     $P2 = $P2 / $P3
203     is($P1,'3/5','divide Rational PMC')
204     is($P2,'3/5','divide Rational PMC')
205 .end
207 .sub test_multiply_int
208     new $P1, 'Rational'
209     new $P2, 'Rational'
210     $I1 = 7
212     $P1 = "3/2"
213     $P2 = $P1 * $I1
214     $P1 = $P1 * $I1
215     is($P1,'21/2','multiply int')
216     is($P2,'21/2','multiply int')
217 .end
219 .sub test_multiply_float
220     new $P1, 'Rational'
221     new $P2, 'Rational'
222     $N1 = 7.
224     $P1 = "3/2"
225     $P2 = $P1 * $N1
226     $P1 = $P1 * $N1
227     is($P1,'21/2','multiply float')
228     is($P2,'21/2','multiply float')
229 .end
231 .sub test_multiply_int_pmc
232     new $P2, 'Rational'
233     new $P3, 'Rational'
234     new $P4, 'Integer'
236     $P4 = 7
238     $P2 = "3/2"
239     $P3 = $P2 * $P4
240     $P2 = $P2 * $P4
241     is($P2,'21/2','multiply Integer PMC')
242     is($P3,'21/2','multiply Integer PMC')
243 .end
245 .sub test_multiply_float_pmc
246     new $P2, 'Rational'
247     new $P3, 'Rational'
248     new $P4, 'Float'
250     $P4 = 7.
252     $P2 = "3/2"
253     $P3 = $P2 * $P4
254     $P2 = $P2 * $P4
255     is($P2,'21/2','multiply Float PMC')
256     is($P3,'21/2','multiply Float PMC')
258 .end
260 .sub test_multiply_rats
261     new $P1, 'Rational'
262     new $P2, 'Rational'
263     new $P3, 'Rational'
265     $P2 = "3/2"
266     $P3 = "5/2"
268     $P1 = $P2 * $P3
269     $P2 = $P2 * $P3
270     is($P1,'15/4','multiply Rational PMC')
271     is($P2,'15/4','multiply Rational PMC')
272 .end
274 .sub test_subtract_rats
275     new $P1, 'Rational'
276     new $P2, 'Rational'
277     new $P3, 'Rational'
279     $P2 = "3/2"
280     $P3 = "5/2"
282     $P1 = $P2 - $P3
283     $P2 = $P2 - $P3
284     is($P1,-1,'subtract Rational inplace')
285     is($P2,-1,'subtract Rational inplace')
287 .end
289 .sub test_subtract_int
290     new $P1, 'Rational'
291     new $P2, 'Rational'
292     $I1 = 7
294     $P1 = "3/2"
295     $P2 = $P1 - $I1
296     $P1 = $P1 - $I1
297     $P1 = $P1 - $I1
298     is($P1,'-25/2','subtract int inplace')
299     is($P2,'-11/2','subtract int inplace')
300 .end
302 .sub test_subtract_float
303     new $P1, 'Rational'
304     new $P2, 'Rational'
305     $N1 = 7.
307     $P1 = "3/2"
308     $P2 = $P1 - $N1
309     $P1 = $P1 - $N1
310     $P1 = $P1 - $N1
311     is($P1,'-25/2','subtract float inplace')
312     is($P2,'-11/2','subtract float inplace')
313 .end
315 .sub test_subtract_int_pmc
316     new $P2, 'Rational'
317     new $P3, 'Rational'
318     new $P4, 'Integer'
320     $P4 = 7
322     $P2 = "3/2"
323     $P3 = $P2 - $P4
324     $P2 = $P2 - $P4
325     is($P2,'-11/2','subtract Integer PMC inplace')
326     is($P3,'-11/2','subtract Integer PMC inplace')
327 .end
329 .sub test_add_rats_inplace
330     new $P1, 'Rational'
331     new $P2, 'Rational'
332     new $P3, 'Rational'
334     $P2 = "3/2"
335     $P3 = "5/2"
337     $P1 = $P2 + $P3
338     $P2 = $P2 + $P3
339     is($P1,4,'adding rationals inplace')
340     is($P2,4,'adding rationals inplace')
341 .end
343 .sub test_add_int_pmc_inplace
344     new $P2, 'Rational'
345     new $P3, 'Rational'
346     new $P4, 'Integer'
348     $P4 = 7
350     $P2 = "3/2"
351     $P3 = $P2 + $P4
352     $P2 = $P2 + $P4
353     is($P2,'17/2','add Integer PMCs inplace')
354     is($P3,'17/2','add Integer PMCs inplace')
355 .end
357 .sub test_add_float_pmc_inplace
358     new $P2, 'Rational'
359     new $P3, 'Rational'
360     new $P4, 'Float'
362     $P4 = 7.
364     $P2 = "3/2"
365     $P3 = $P2 + $P4
366     $P2 = $P2 + $P4
367     is($P2,'17/2','add Float PMCs inplace')
368     is($P3,'17/2','add Float PMCs inplace')
369 .end
371 .sub test_add_int_inplace
372     new $P1, 'Rational'
373     new $P2, 'Rational'
374     $I1 = 7
376     $P1 = "3/2"
377     $P2 = $P1 + $I1
378     $P1 = $P1 + $I1
379     $P1 = $P1 + $I1
380     is($P1,'31/2','add integers inplace')
381     is($P2,'17/2','add integers inplace')
382 .end
384 .sub test_add_float_inplace
385     new $P1, 'Rational'
386     new $P2, 'Rational'
387     $N1 = 7.
389     $P1 = "3/2"
390     $P2 = $P1 + $N1
391     $P1 = $P1 + $N1
392     $P1 = $P1 + $N1
393     is($P1,'31/2','add floats inplace')
394     is($P2,'17/2','add floats inplace')
395 .end
398 .sub test_init
399     new $P1, 'Rational'
400     ok($P1,'initialization')
401 .end
403 .sub test_version
404     new $P1, 'Rational'
405     $S1 = $P1.'version'()
406     ok($S1,'can get version number')
407 .end
409 .sub test_set_get_native_int
410     new $P1, 'Rational'
412     $I1 = 42
413     $P1 = $I1
414     $I2 = $P1
415     is($I2,42,'set and get native int')
416 .end
418 .sub test_set_get_int
419     new $P1, 'Rational'
420     new $P2, 'Integer'
421     new $P3, 'Integer'
423     $P2 = 7
424     $P1 = $P2
425     $P3 = $P1
426     is($P3,7,'set and get int')
427 .end
429 .sub test_set_get_float
430     new $P1, 'Rational'
432     new $P2, 'Float'
433     new $P3, 'Float'
435     $P2 = 7.110000
436     $P1 = $P2
437     $P3 = $P1
438     is($P3,7.11,'set and set float',0.0001)
439 .end
441 .sub test_inc_dec
442     new $P1, 'Rational'
444     $P1 = "7/4"
445     inc $P1
446     is($P1,'11/4','increment a rational')
447     dec $P1
448     dec $P1
449     is($P1,'3/4','decrement a rational')
450 .end
452 .sub test_set_get_string
453     new $P1, 'Rational'
454     new $P2, 'String'
455     new $P3, 'String'
457     $P2 = "7/4"
458     $P1 = $P2
459     $P3 = $P1
460     is($P3,"7/4",'set and get string')
461 .end
463 .sub test_set_get_native_float
464     new $P0, 'Rational'
466     $N0 = 11.1
467     $P0 = $N0
468     $N1 = $P0
469     is($N1,11.1,'set and get a native float')
470 .end
472 .sub test_set_get_native_string
473     new $P1, 'Rational'
475     $S1 = "7/4"
476     $P1 = $S1
477     $S2 = $P1
478     is($S2,'7/4','set and get native string')
479 .end
481 # Local Variables:
482 #   mode: pir
483 #   fill-column: 100
484 # End:
485 # vim: expandtab shiftwidth=4 ft=pir: