[t] Convert t/dynpmc/rational.t to PIR
[parrot.git] / t / dynpmc / rational.t
blobb92bf6147d6f665d19ce01ab61fdd335902a1f22
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     loadlib $P1, 'rational'
23     .local pmc config_hash, interp
25     plan(55)
26     interp = getinterp
27     config_hash = interp[.IGLOBALS_CONFIG_HASH]
28     $S0 = config_hash['gmp']
30     test_init()
31     test_version()
33     # The following tests only run if GMP is installed
34     unless $S0 goto done
35     test_set_get_native_int()
36     test_set_get_native_float()
37     test_set_get_native_string()
39     test_set_get_int()
40     test_set_get_float()
41     test_set_get_string()
43     test_inc_dec()
44     test_add_int_inplace()
45     test_add_float_inplace()
47     test_add_int_pmc_inplace()
48     test_add_float_pmc_inplace()
49     test_add_rats_inplace()
51     test_subtract_int()
52     test_subtract_float()
53     test_subtract_int_pmc()
54     test_subtract_rats()
56     test_multiply_int()
57     test_multiply_float()
58     test_multiply_int_pmc()
59     test_multiply_float_pmc()
60     test_multiply_rats()
62     test_divide_int()
63     test_divide_float()
64     test_divide_int_pmc()
65     test_divide_float_pmc()
66     test_divide_rats()
68     test_neg()
69     test_abs()
70     test_cmp()
71   done:
72     .return()
73 .end
75 .sub test_neg
76     new $P2, 'Rational'
77     new $P3, 'Rational'
79     $P2 = "-3/2"
80     $P3 = -$P2
81     $P2 = -$P2
83     is($P2,'3/2','neg')
84     is($P3,'3/2','neg')
85 .end
87 .sub test_abs
88     new $P2, 'Rational'
89     new $P3, 'Rational'
91     $P2 = "-3/2"
92     $P3 = abs $P2
93     abs $P2
94     is($P2,'3/2','abs')
95     is($P3,'3/2','abs')
96 .end
98 .sub test_cmp
99     new $P2, 'Rational'
100     new $P3, 'Rational'
102     $P2 = "3/2"
103     $P3 = "6/4"
105     if $P2 == $P3 goto EQ
106     goto NE
107   EQ:
108     ok(1,'== on Rational PMC')
109     goto END_EQ
110   NE:
111     ok(0,'== on Rational PMC')
112   END_EQ:
114     $P3 = "7/4"
115     cmp $I1, $P2, $P3
116     cmp $I2, $P3, $P2
117     is($I1,-1,'cmp on Rational PMC')
118     is($I2,1,'cmp on Rational PMC')
119 .end
121 .sub test_divide_int
122     new $P1, 'Rational'
123     new $P2, 'Rational'
124     $I1 = 7
126     $P1 = "3/2"
127     $P2 = $P1 / $I1
128     $P1 = $P1 / $I1
129     is($P1,'3/14','divide int')
130     is($P2,'3/14','divide int')
131 .end
133 .sub test_divide_float
134     new $P1, 'Rational'
135     new $P2, 'Rational'
136     $N1 = 7.
138     $P1 = "3/2"
139     $P2 = $P1 / $N1
140     $P1 = $P1 / $N1
141     is($P1,'3/14','divide float')
142     is($P2,'3/14','divide float')
144 .end
146 .sub test_divide_int_pmc
147     new $P2, 'Rational'
148     new $P3, 'Rational'
149     new $P4, 'Integer'
151     $P4 = 7
153     $P2 = "3/2"
154     $P3 = $P2 / $P4
155     $P2 = $P2 / $P4
156     is($P2,'3/14','divide Integer PMC')
157     is($P3,'3/14','divide Integer PMC')
158 .end
160 .sub test_divide_float_pmc
161     new $P2, 'Rational'
162     new $P3, 'Rational'
163     new $P4, 'Float'
165     $P4 = 7.
167     $P2 = "3/2"
168     $P3 = $P2 / $P4
169     $P2 = $P2 / $P4
170     is($P2,'3/14','divide Float PMC')
171     is($P3,'3/14','divide Float PMC')
172 .end
174 .sub test_divide_rats
175     new $P1, 'Rational'
176     new $P2, 'Rational'
177     new $P3, 'Rational'
179     $P2 = "3/2"
180     $P3 = "5/2"
182     $P1 = $P2 / $P3
183     $P2 = $P2 / $P3
184     is($P1,'3/5','divide Rational PMC')
185     is($P2,'3/5','divide Rational PMC')
186 .end
188 .sub test_multiply_int
189     new $P1, 'Rational'
190     new $P2, 'Rational'
191     $I1 = 7
193     $P1 = "3/2"
194     $P2 = $P1 * $I1
195     $P1 = $P1 * $I1
196     is($P1,'21/2','multiply int')
197     is($P2,'21/2','multiply int')
198 .end
200 .sub test_multiply_float
201     new $P1, 'Rational'
202     new $P2, 'Rational'
203     $N1 = 7.
205     $P1 = "3/2"
206     $P2 = $P1 * $N1
207     $P1 = $P1 * $N1
208     is($P1,'21/2','multiply float')
209     is($P2,'21/2','multiply float')
210 .end
212 .sub test_multiply_int_pmc
213     new $P2, 'Rational'
214     new $P3, 'Rational'
215     new $P4, 'Integer'
217     $P4 = 7
219     $P2 = "3/2"
220     $P3 = $P2 * $P4
221     $P2 = $P2 * $P4
222     is($P2,'21/2','multiply Integer PMC')
223     is($P3,'21/2','multiply Integer PMC')
224 .end
226 .sub test_multiply_float_pmc
227     new $P2, 'Rational'
228     new $P3, 'Rational'
229     new $P4, 'Float'
231     $P4 = 7.
233     $P2 = "3/2"
234     $P3 = $P2 * $P4
235     $P2 = $P2 * $P4
236     is($P2,'21/2','multiply Float PMC')
237     is($P3,'21/2','multiply Float PMC')
239 .end
241 .sub test_multiply_rats
242     new $P1, 'Rational'
243     new $P2, 'Rational'
244     new $P3, 'Rational'
246     $P2 = "3/2"
247     $P3 = "5/2"
249     $P1 = $P2 * $P3
250     $P2 = $P2 * $P3
251     is($P1,'15/4','multiply Rational PMC')
252     is($P2,'15/4','multiply Rational PMC')
253 .end
255 .sub test_subtract_rats
256     new $P1, 'Rational'
257     new $P2, 'Rational'
258     new $P3, 'Rational'
260     $P2 = "3/2"
261     $P3 = "5/2"
263     $P1 = $P2 - $P3
264     $P2 = $P2 - $P3
265     is($P1,-1,'subtract Rational inplace')
266     is($P2,-1,'subtract Rational inplace')
268 .end
270 .sub test_subtract_int
271     new $P1, 'Rational'
272     new $P2, 'Rational'
273     $I1 = 7
275     $P1 = "3/2"
276     $P2 = $P1 - $I1
277     $P1 = $P1 - $I1
278     $P1 = $P1 - $I1
279     is($P1,'-25/2','subtract int inplace')
280     is($P2,'-11/2','subtract int inplace')
281 .end
283 .sub test_subtract_float
284     new $P1, 'Rational'
285     new $P2, 'Rational'
286     $N1 = 7.
288     $P1 = "3/2"
289     $P2 = $P1 - $N1
290     $P1 = $P1 - $N1
291     $P1 = $P1 - $N1
292     is($P1,'-25/2','subtract float inplace')
293     is($P2,'-11/2','subtract float inplace')
294 .end
296 .sub test_subtract_int_pmc
297     new $P2, 'Rational'
298     new $P3, 'Rational'
299     new $P4, 'Integer'
301     $P4 = 7
303     $P2 = "3/2"
304     $P3 = $P2 - $P4
305     $P2 = $P2 - $P4
306     is($P2,'-11/2','subtract Integer PMC inplace')
307     is($P3,'-11/2','subtract Integer PMC inplace')
308 .end
310 .sub test_add_rats_inplace
311     new $P1, 'Rational'
312     new $P2, 'Rational'
313     new $P3, 'Rational'
315     $P2 = "3/2"
316     $P3 = "5/2"
318     $P1 = $P2 + $P3
319     $P2 = $P2 + $P3
320     is($P1,4,'adding rationals inplace')
321     is($P2,4,'adding rationals inplace')
322 .end
324 .sub test_add_int_pmc_inplace
325     new $P2, 'Rational'
326     new $P3, 'Rational'
327     new $P4, 'Integer'
329     $P4 = 7
331     $P2 = "3/2"
332     $P3 = $P2 + $P4
333     $P2 = $P2 + $P4
334     is($P2,'17/2','add Integer PMCs inplace')
335     is($P3,'17/2','add Integer PMCs inplace')
336 .end
338 .sub test_add_float_pmc_inplace
339     new $P2, 'Rational'
340     new $P3, 'Rational'
341     new $P4, 'Float'
343     $P4 = 7.
345     $P2 = "3/2"
346     $P3 = $P2 + $P4
347     $P2 = $P2 + $P4
348     is($P2,'17/2','add Float PMCs inplace')
349     is($P3,'17/2','add Float PMCs inplace')
350 .end
352 .sub test_add_int_inplace
353     new $P1, 'Rational'
354     new $P2, 'Rational'
355     $I1 = 7
357     $P1 = "3/2"
358     $P2 = $P1 + $I1
359     $P1 = $P1 + $I1
360     $P1 = $P1 + $I1
361     is($P1,'31/2','add integers inplace')
362     is($P2,'17/2','add integers inplace')
363 .end
365 .sub test_add_float_inplace
366     new $P1, 'Rational'
367     new $P2, 'Rational'
368     $N1 = 7.
370     $P1 = "3/2"
371     $P2 = $P1 + $N1
372     $P1 = $P1 + $N1
373     $P1 = $P1 + $N1
374     is($P1,'31/2','add floats inplace')
375     is($P2,'17/2','add floats inplace')
376 .end
379 .sub test_init
380     new $P1, 'Rational'
381     ok($P1,'initialization')
382 .end
384 .sub test_version
385     new $P1, 'Rational'
386     $S1 = $P1.'version'()
387     ok($S1,'can get version number')
388 .end
390 .sub test_set_get_native_int
391     new $P1, 'Rational'
393     $I1 = 42
394     $P1 = $I1
395     $I2 = $P1
396     is($I2,42,'set and get native int')
397 .end
399 .sub test_set_get_int
400     new $P1, 'Rational'
401     new $P2, 'Integer'
402     new $P3, 'Integer'
404     $P2 = 7
405     $P1 = $P2
406     $P3 = $P1
407     is($P3,7,'set and get int')
408 .end
410 .sub test_set_get_float
411     new $P1, 'Rational'
413     new $P2, 'Float'
414     new $P3, 'Float'
416     $P2 = 7.110000
417     $P1 = $P2
418     $P3 = $P1
419     is($P3,7.11,'set and set float',0.0001)
420 .end
422 .sub test_inc_dec
423     new $P1, 'Rational'
425     $P1 = "7/4"
426     inc $P1
427     is($P1,'11/4','increment a rational')
428     dec $P1
429     dec $P1
430     is($P1,'3/4','decrement a rational')
431 .end
433 .sub test_set_get_string
434     new $P1, 'Rational'
435     new $P2, 'String'
436     new $P3, 'String'
438     $P2 = "7/4"
439     $P1 = $P2
440     $P3 = $P1
441     is($P3,"7/4",'set and get string')
442 .end
444 .sub test_set_get_native_float
445     new $P0, 'Rational'
447     $N0 = 11.1
448     $P0 = $N0
449     $N1 = $P0
450     is($N1,11.1,'set and get a native float')
451 .end
453 .sub test_set_get_native_string
454     new $P1, 'Rational'
456     $S1 = "7/4"
457     $P1 = $S1
458     $S2 = $P1
459     is($S2,'7/4','set and get native string')
460 .end
462 # Local Variables:
463 #   mode: pir
464 #   fill-column: 100
465 # End:
466 # vim: expandtab shiftwidth=4 ft=pir: