[cage] Fix pgegrep, which was merely an innocent bystander in the Great Namespace...
[parrot.git] / t / op / number.t
blob2f00d22b4b7928bd4b8a78095a6b30fc0fdb756a
1 #!parrot
2 # Copyright (C) 2001-2009, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/op/number.t - Number Registers
9 =head1 SYNOPSIS
11     % prove t/op/number.t
13 =head1 DESCRIPTION
15 Tests the use of Parrot floating-point number registers.
17 =cut
19 .sub main :main
20     .include 'test_more.pir'
22     plan(173)
23     test_set_n_nc()
24     test_set_n()
25     test_add_n_n_n()
26     test_add_n_n()
27     test_sub_n_n_n()
28     test_sub_n_n()
29     test_abs_n_i_ic_n_nc()
30     test_mul_i()
31     test_div_i()
32     test_mod_n()
33     test_cmod_n()
34     test_eq_n_ic()
35     test_eq_nc_ic()
36     test_ne_n_ic()
37     test_ne_n_nc_ic()
38     test_lt_n_ic()
39     test_lt_nc_ic()
40     test_le_n_ic()
41     test_le_nc_ic()
42     test_gt_n_ic()
43     test_gt_nc_ic()
44     test_ge_n_ic()
45     test_ge_nc_ic()
46     test_if_n_ic()
47     test_inc_n()
48     test_dec_n()
49     test_set_i_n()
50     test_clearn()
51     test_neg_n()
52     test_neg_0_dot_0()
53     test_mul_n_n()
54     test_fact_n_i()
55     test_fact_n_ic()
56     test_exchange()
57     test_op_n_nc_nc()
58     test_lt_nc_nc_ic()
59     test_string_gt_num()
60     test_null()
61     test_dot_dig_parsing()
62     test_sqrt_n_n()
63     test_exception_div_n_n_by_zero()
64     test_exception_div_n_nc_by_zero()
65     test_exception_div_n_n_n_by_zero()
66     test_exception_div_n_nc_n_by_zero()
67     test_exception_div_n_n_nc_by_zero()
68     test_exception_fdiv_n_n_by_zero()
69     test_exception_fdiv_n_nc_by_zero()
70     test_exception_fdiv_n_n_n_by_zero()
71     test_exception_fdiv_n_nc_n_by_zero()
72     test_exception_fdiv_n_n_nc_by_zero()
73     test_exception_cmod_n_n_n_by_zero()
74     test_exception_cmod_n_nc_n_by_zero()
75     test_exception_cmod_n_n_nc_by_zero()
76     test_mod_n_n_n_by_zero()
77     test_mod_n_nc_n_by_zero()
78     test_mod_n_n_nc_by_zero()
79     # END_OF_TESTS
80 .end
82 .macro exception_is ( M )
83     .local pmc exception
84     .local string message
85     .get_results (exception)
87     message = exception['message']
88     is( message, .M, .M )
89 .endm
91 .sub test_set_n_nc
92     set     $N0, 1.0
93     set     $N1, 4.0
94     set     $N2, 16.0
95     set     $N3, 64.0
96     set     $N4, 256.0
97     set     $N5, 1024.0
98     set     $N6, 4096.0
99     set     $N7, 16384.0
100     set     $N8, 65536.0
101     set     $N9, 262144.0
102     set     $N10, 1048576.0
103     set     $N11, 4194304.0
104     set     $N12, 16777216.0
105     set     $N13, 67108864.0
106     set     $N14, 268435456.0
107     set     $N15, 1073741824.0
108     set     $N16, 4294967296.0
109     set     $N17, 17179869184.0
110     set     $N18, 68719476736.0
111     set     $N19, 274877906944.0
112     set     $N20, 1099511627776.0
113     set     $N21, 4398046511104.0
114     set     $N22, 17592186044416.0
115     set     $N23, 70368744177664.0
116     set     $N24, 281474976710656.0
117     set     $N25, 1.12589990684262e+15
118     is( $N0, "1", 'set_n_nc' )
119     is( $N1, "4", 'set_n_nc' )
120     is( $N2, "16", 'set_n_nc' )
121     is( $N3, "64", 'set_n_nc' )
122     is( $N4, "256", 'set_n_nc' )
123     is( $N5, "1024", 'set_n_nc' )
124     is( $N6, "4096", 'set_n_nc' )
125     is( $N7, "16384", 'set_n_nc' )
126     is( $N8, "65536", 'set_n_nc' )
127     is( $N9, "262144", 'set_n_nc' )
128     is( $N10, "1048576", 'set_n_nc' )
129     is( $N11, "4194304", 'set_n_nc' )
130     is( $N12, "16777216", 'set_n_nc' )
131     is( $N13, "67108864", 'set_n_nc' )
132     is( $N14, "268435456", 'set_n_nc' )
133     is( $N15, "1073741824", 'set_n_nc' )
134     is( $N16, "4294967296", 'set_n_nc' )
135     is( $N17, "17179869184", 'set_n_nc' )
136     is( $N18, "68719476736", 'set_n_nc' )
137     is( $N19, "274877906944", 'set_n_nc' )
138     is( $N20, "1099511627776", 'set_n_nc' )
139     is( $N21, "4398046511104", 'set_n_nc' )
140     is( $N22, "17592186044416", 'set_n_nc' )
141     is( $N23, "70368744177664", 'set_n_nc' )
142     is( $N24, "281474976710656", 'set_n_nc' )
143     is( $N25, "1.12589990684262e+15", 'set_n_nc' )
144 .end
146 .sub test_set_n
147     set     $N0, 42.0
148     set     $N1, $N0
149     is( $N1, "42", 'set_n' )
150 .end
152 .sub test_add_n_n_n
153     set     $N0, 1.0
154     add     $N1, $N0, $N0
155     is( $N1, "2", 'add_n_n_n' )
156     add     $N2, $N0, $N1
157     is( $N2, "3", 'add_n_n_n' )
158     add     $N2, $N2, $N2
159     is( $N2, "6", 'add_n_n_n' )
160 .end
162 .sub test_add_n_n
163     set     $N0, 1.0
164     add     $N0, $N0
165     is( $N0, "2", 'add_n_n' )
166     set     $N1, 1.0
167     add     $N0, $N1
168     is( $N0, "3", 'add_n_n' )
169     add     $N0, 3.0
170     is( $N0, "6", 'add_n_n' )
171 .end
173 .sub test_sub_n_n_n
174     set     $N0, 424242.0
175     set     $N1, 4200.0
176     sub     $N2, $N0, $N1
177     is( $N2, "420042", 'sub_n_n_n' )
178 .end
180 .sub test_sub_n_n
181     set     $N0, 424242.0
182     set     $N1, 4200.0
183     sub     $N0, $N1
184     is( $N0, "420042", 'sub_n_n' )
185     sub     $N0, $N0
186     is( $N0, "0", 'sub_n_n' )
187 .end
189 .sub test_abs_n_i_ic_n_nc
190     set     $I0, -1
191     abs     $N0, $I0
192     abs     $N1, -1
193     set     $I1, 1
194     abs     $N2, $I1
195     abs     $N3, 1
196     set     $N4, -1
197     abs     $N4, $N4
198     abs     $N5, -1.0
199     set     $N6, 1.0
200     abs     $N6, $N6
201     abs     $N7, 1.0
202     is( $N0, "1", 'abs(n, i|ic|n|nc)' )
203     is( $N1, "1", 'abs(n, i|ic|n|nc)' )
204     is( $N2, "1", 'abs(n, i|ic|n|nc)' )
205     is( $N3, "1", 'abs(n, i|ic|n|nc)' )
206     is( $N4, "1", 'abs(n, i|ic|n|nc)' )
207     is( $N5, "1", 'abs(n, i|ic|n|nc)' )
208     is( $N6, "1", 'abs(n, i|ic|n|nc)' )
209     is( $N7, "1", 'abs(n, i|ic|n|nc)' )
210 .end
212 .sub test_mul_i
213     set     $N0, 2.0
214     mul     $N1, $N0, $N0
215     mul     $N1, $N1, $N0
216     mul     $N1, $N1, $N0
217     mul     $N1, $N1, $N0
218     mul     $N1, $N1, $N0
219     mul     $N1, $N1, $N0
220     mul     $N1, $N1, $N0
221     is( $N1, "256", 'mul_i' )
222 .end
224 .sub test_div_i
225     set     $N0, 10.0
226     set     $N1, 2.0
227     div     $N2, $N0, $N1
228     is( $N2, "5", 'div_i' )
229     set     $N3, 7.0
230     set     $N4, 2.0
231     div     $N3, $N3, $N4
232     is( $N3, "3.5", 'div_i' )
233     set     $N5, 9.0
234     set     $N6, -4.0
235     div     $N7, $N5, $N6
236     is( $N7, "-2.25", 'div_i' )
237 .end
239 .sub test_mod_n
240     set     $N0, 5.0
241     set     $N1, 0.0
242     mod     $N2, $N0, $N1
243     is( $N2, "5", 'mod_n' )
244     set     $N0, 0.0
245     set     $N1, 3.0
246     mod     $N2, $N0, $N1
247     is( $N2, "0", 'mod_n' )
248     set     $N0, 5.0
249     set     $N1, 3.0
250     mod     $N2, $N0, $N1
251     is( $N2, "2", 'mod_n' )
252     set     $N0, 5.0
253     set     $N1, -3.0
254     mod     $N2, $N0, $N1
255     is( $N2, "-1", 'mod_n' )
256     set     $N0, -5.0
257     set     $N1, 3.0
258     mod     $N2, $N0, $N1
259     is( $N2, "1", 'mod_n' )
260     set     $N0, -5.0
261     set     $N1, -3.0
262     mod     $N2, $N0, $N1
263     is( $N2, "-2", 'mod_n' )
264 .end
266 .sub test_cmod_n
267     set     $N0, 5.000
268     set     $N1, 3.000
269     cmod    $N2, $N0, $N1
270     is( $N2, "2", 'cmod_n' )
271 .end
273 .sub test_eq_n_ic
274     set     $N0, 5.000001
275     set     $N1, 5.000001
276     set     $N2, 5.000002
277     eq      $N0, $N1, ONE
278     branch  ERROR
279     ok( 0, 'test eq_n_ic bad' )
280   ONE:
281     ok( 1, 'eq_n_ic ok 1')
282     eq      $N1, $N2, ERROR
283     branch  TWO
284     ok( 0, 'eq_n_ic bad 1' )
285   TWO:
286     ok( 1, 'eq_n_ic ok 2')
287     goto END
288   ERROR:
289     ok( 0, 'eq_n_ic bad 2' )
290   END:
291 .end
293 .sub test_eq_nc_ic
294     set     $N0, 1.000001
295     eq      $N0, 1, ERROR
296     branch  ONE
297     ok( 0, 'eq_nc_ic')
298   ONE:
299     ok( 1, 'eq_nc_ic ok 1')
300     eq      $N0, 1.000001, TWO
301     branch  ERROR
302     ok( 0, 'eq_nc_ic')
303   TWO:
304     ok( 1, 'eq_nc_ic ok 2')
305     goto END
306   ERROR:
307     ok( 0, 'eq_nc_ic')
308   END:
309 .end
311 .sub test_ne_n_ic
312     set     $N0, -22.222222
313     set     $N1, -22.222222
314     set     $N2, 0.0
315     ne      $N0, $N2, ONE
316     branch  ERROR
317     ok( 0, 'ne_n_ic')
318   ONE:
319     ok( 1, 'ne_n_ic ok 1')
320     ne      $N0, $N1, ERROR
321     branch  TWO
322     ok( 0, 'ne_n_ic')
323   TWO:
324     ok( 1, 'ne_n_ic ok 2')
325     goto END
326   ERROR:
327     ok( 0, 'ne_n_ic')
328   END:
329 .end
331 .sub test_ne_n_nc_ic
332     set     $N0, 1073741824.0
333     ne      $N0, 1073741824.0, nok1
334     ok( 1, 'ne_n_nc_ic ok 1')
335     branch  ONE
336   nok1:
337     ok( 0, 'ne_n_nc_ic')
338   ONE:
339     ne      $N0, 0.0, TWO
340     branch  ERROR
341   TWO:
342     ok( 1, 'ne_n_nc_ic ok 2')
343     goto END
344   ERROR:
345     ok( 0, 'ne_n_nc_ic')
346   END:
347 .end
349 .sub test_lt_n_ic
350     set     $N0, 1000.0
351     set     $N1, 500.0
352     set     $N2, 0.0
353     set     $N3, 0.0
354     lt      $N1, $N0, ONE
355     branch  ERROR
356     ok( 0, 'lt_n_ic')
357   ONE:
358     ok( 1, 'lt_n_ic ok 1')
359     lt      $N0, $N1, ERROR
360     branch  TWO
361     ok( 0, 'lt_n_ic')
362   TWO:
363     ok( 1, 'lt_n_ic ok 2')
364     lt      $N2, $N3, ERROR
365     branch  THREE
366     ok( 0, 'lt_n_ic')
367   THREE:
368     ok( 1, 'lt_n_ic ok 3')
369     goto END
370   ERROR:
371     ok( 0, 'lt_n_ic')
372   END:
373 .end
375 .sub test_lt_nc_ic
376     set     $N0, 1000.0
377     set     $N1, 500.0
378     set     $N2, 0.0
379     lt      $N0, 500.0, ERROR
380     branch  ONE
381     ok( 0, 'lt_nc_ic')
382   ONE:
383     ok( 1, 'lt_nc_ic ok 1')
384     lt      $N1, 1000.0, TWO
385     branch  ERROR
386     ok( 0, 'lt_nc_ic')
387   TWO:
388     ok( 1, 'lt_nc_ic ok 2')
389     lt      $N0, 0.0, ERROR
390     branch  THREE
391     ok( 0, 'lt_nc_ic')
392   THREE:
393     ok( 1, 'lt_nc_ic ok 3')
394     goto END
395   ERROR:
396     ok( 0, 'lt_nc_ic')
397   END:
398 .end
400 .sub test_le_n_ic
401     set     $N0, 1000.0
402     set     $N1, 500.0
403     set     $N2, 0.0
404     set     $N3, 0.0
405     le      $N1, $N0, ONE
406     branch  ERROR
407     ok( 0, 'le_n_ic')
408   ONE:
409     ok( 1, 'le_n_ic ok 1')
410     le      $N0, $N1, ERROR
411     branch  TWO
412     ok( 0, 'le_n_ic')
413   TWO:
414     ok( 1, 'le_n_ic ok 2')
415     le      $N2, $N3, THREE
416     branch  ERROR
417     ok( 0, 'le_n_ic')
418   THREE:
419     ok( 1, 'le_n_ic ok 3')
420     goto END
421   ERROR:
422     ok( 0, 'le_n_ic')
423   END:
424 .end
426 .sub test_le_nc_ic
427     set     $N0, 1000.0
428     set     $N1, 500.0
429     set     $N2, 0.0
430     le      $N0, 500.0, ERROR
431     branch  ONE
432     ok( 0, 'le_nc_ic')
433   ONE:
434     ok( 1, 'le_nc_ic ok 1')
435     le      $N1, 1000.0, TWO
436     branch  ERROR
437     ok( 0, 'le_nc_ic')
438   TWO:
439     ok( 1, 'le_nc_ic ok 2')
440     le      $N2, 0.0, THREE
441     branch  ERROR
442     ok( 0, 'le_nc_ic')
443   THREE:
444     ok( 1, 'le_nc_ic ok 3')
445     goto END
446   ERROR:
447     ok( 0, 'le_nc_ic')
448   END:
449 .end
451 .sub test_gt_n_ic
452     set     $N0, 500.0
453     set     $N1, 1000.0
454     set     $N2, 0.0
455     set     $N3, 0.0
456     gt      $N1, $N0, ONE
457     branch  ERROR
458     ok( 0, 'gt_n_ic')
459   ONE:
460     ok( 1, 'gt_n_ic ok 1')
461     gt      $N0, $N1, ERROR
462     branch  TWO
463     ok( 0, 'gt_n_ic')
464   TWO:
465     ok( 1, 'gt_n_ic ok 2')
466     gt      $N2, $N3, ERROR
467     branch  THREE
468     ok( 0, 'gt_n_ic')
469   THREE:
470     ok( 1, 'gt_n_ic ok 3')
471     goto END
472   ERROR:
473     ok( 0, 'gt_n_ic')
474   END:
475 .end
477 .sub test_gt_nc_ic
478     set     $N0, 500.0
479     set     $N1, 1000.0
480     set     $N2, 0.0
481     gt      $N0, 1000.0, ERROR
482     branch  ONE
483     ok( 0, 'gt_nc_ic')
484   ONE:
485     ok( 1, 'gt_nc_ic ok 1')
486     gt      $N1, 500.0, TWO
487     branch  ERROR
488     ok( 0, 'gt_nc_ic')
489   TWO:
490     ok( 1, 'gt_nc_ic ok 2')
491     gt      $N2, 0.0, ERROR
492     branch  THREE
493     ok( 0, 'gt_nc_ic')
494   THREE:
495     ok( 1, 'gt_nc_ic ok 3')
496     goto END
497   ERROR:
498     ok( 0, 'gt_nc_ic')
499   END:
500 .end
502 .sub test_ge_n_ic
503     set     $N0, 500.0
504     set     $N1, 1000.0
505     set     $N2, 0.0
506     set     $N3, 0.0
507     ge      $N1, $N0, ONE
508     branch  ERROR
509     ok( 0, 'ge_n_ic')
510   ONE:
511     ok( 1, 'ge_n_ic ok 1')
512     ge      $N0, $N1, ERROR
513     branch  TWO
514     ok( 0, 'ge_n_ic')
515   TWO:
516     ok( 1, 'ge_n_ic ok 2')
517     ge      $N2, $N3, THREE
518     branch  ERROR
519     ok( 0, 'ge_n_ic')
520   THREE:
521     ok( 1, 'ge_n_ic ok 3')
522     goto END
523   ERROR:
524     ok( 0, 'ge_n_ic')
525   END:
526 .end
528 .sub test_ge_nc_ic
529     set     $N0, 500.0
530     set     $N1, 1000.0
531     set     $N2, 0.0
532     ge      $N0, 1000.0, ERROR
533     branch  ONE
534     ok( 0, 'ge_nc_ic')
535   ONE:
536     ok( 1, 'ge_nc_ic ok 1')
537     ge      $N1, 500.0, TWO
538     branch  ERROR
539     ok( 0, 'ge_nc_ic')
540   TWO:
541     ok( 1, 'ge_nc_ic ok 2')
542     ge      $N2, 0.0, THREE
543     branch  ERROR
544     ok( 0, 'ge_nc_ic')
545   THREE:
546     ok( 1, 'ge_nc_ic ok 3')
547     goto END
548   ERROR:
549     ok( 0, 'ge_nc_ic')
550   END:
551 .end
553 .sub test_if_n_ic
554     set     $N0, 1000.0
555     set     $N1, 500.0
556     set     $N2, 0.0
557     if      $N0, ONE
558     branch  ERROR
559     ok( 0, 'if_n_ic')
560   ONE:
561     ok( 1, 'if_n_ic ok 1')
562     if      $N1, TWO
563     branch  ERROR
564     ok( 0, 'if_n_ic')
565   TWO:
566     ok( 1, 'if_n_ic ok 2')
567     if      $N2, ERROR
568     branch  THREE
569     ok( 0, 'if_n_ic')
570   THREE:
571     ok( 1, 'if_n_ic ok 3')
572     goto END
573   ERROR:
574     ok( 0, 'if_n_ic')
575   END:
576 .end
578 .sub test_inc_n
579     set     $N0, 0.0
580     inc     $N0
581     is( $N0, "1", 'inc_n' )
582     inc     $N0
583     inc     $N0
584     inc     $N0
585     inc     $N0
586     is( $N0, "5", 'inc_n' )
587 .end
589 .sub test_dec_n
590     set     $N0, 0.0
591     dec     $N0
592     is( $N0, "-1", 'dec_n' )
593     dec     $N0
594     dec     $N0
595     dec     $N0
596     dec     $N0
597     is( $N0, "-5", 'dec_n' )
598 .end
600 .sub test_set_i_n
601     set     $N0, 0.0
602     set     $I0, $N0
603     is( $I0, "0", 'set_i_n' )
604     set     $N1, 2147483647.0
605     set     $I1, $N1
606     is( $I1, "2147483647", 'set_i_n' )
607     set     $N2, -2147483648.0
608     set     $I2, $N2
609     is( $I2, "-2147483648", 'set_i_n' )
610 .end
612 .sub test_clearn
613     set     $N0, 547972.0
614     set     $N1, 547972.0
615     set     $N2, 547972.0
616     set     $N3, 547972.0
617     set     $N4, 547972.0
618     set     $N5, 547972.0
619     set     $N6, 547972.0
620     set     $N7, 547972.0
621     set     $N8, 547972.0
622     set     $N9, 547972.0
623     set     $N10, 547972.0
624     set     $N11, 547972.0
625     set     $N12, 547972.0
626     set     $N13, 547972.0
627     set     $N14, 547972.0
628     set     $N15, 547972.0
629     set     $N16, 547972.0
630     set     $N17, 547972.0
631     set     $N18, 547972.0
632     set     $N19, 547972.0
633     set     $N20, 547972.0
634     set     $N21, 547972.0
635     set     $N22, 547972.0
636     set     $N23, 547972.0
637     set     $N24, 547972.0
638     set     $N25, 547972.0
639     set     $N26, 547972.0
640     set     $N27, 547972.0
641     set     $N28, 547972.0
642     set     $N29, 547972.0
643     set     $N30, 547972.0
644     set     $N31, 547972.0
645     clearn
646     is( $N0, "0", 'clearn' )
647     is( $N1, "0", 'clearn' )
648     is( $N2, "0", 'clearn' )
649     is( $N3, "0", 'clearn' )
650     is( $N4, "0", 'clearn' )
651     is( $N5, "0", 'clearn' )
652     is( $N6, "0", 'clearn' )
653     is( $N7, "0", 'clearn' )
654     is( $N8, "0", 'clearn' )
655     is( $N9, "0", 'clearn' )
656     is( $N10, "0", 'clearn' )
657     is( $N11, "0", 'clearn' )
658     is( $N12, "0", 'clearn' )
659     is( $N13, "0", 'clearn' )
660     is( $N14, "0", 'clearn' )
661     is( $N15, "0", 'clearn' )
662     is( $N16, "0", 'clearn' )
663     is( $N17, "0", 'clearn' )
664     is( $N18, "0", 'clearn' )
665     is( $N19, "0", 'clearn' )
666     is( $N20, "0", 'clearn' )
667     is( $N21, "0", 'clearn' )
668     is( $N22, "0", 'clearn' )
669     is( $N23, "0", 'clearn' )
670     is( $N24, "0", 'clearn' )
671     is( $N25, "0", 'clearn' )
672     is( $N26, "0", 'clearn' )
673     is( $N27, "0", 'clearn' )
674     is( $N28, "0", 'clearn' )
675     is( $N29, "0", 'clearn' )
676     is( $N30, "0", 'clearn' )
677     is( $N31, "0", 'clearn' )
678 .end
680 .sub test_neg_n
681     neg $N0,3.0
682     neg $N0,$N0
683     neg $N0
684     is( $N0, "-3", 'neg_n' )
685 .end
687 .sub test_neg_0_dot_0
688     load_bytecode 'config.pbc'
689     $P1 = _config()
690     $P2 = $P1['has_negative_zero']
691     unless $P2 goto negative_zero_todoed
693     set $N1, 0
694     neg $N1
695     is( $N1, "-0", 'neg 0.0' )
696     .return ()
698   negative_zero_todoed:
699     todo(0, '-0.0 not implemented, TT #313')
700 .end
702 .sub test_mul_n_n
703     set $N0,3.0
704     set $N1,4.0
705     mul $N0,$N1
706     is( $N0, "12", 'mul_n_n' )
707 .end
709 .sub test_fact_n_i
710     set $I0, 3
711     set $I1, 11
712     set $I2, 0
713     set $I3, -563
714     fact $N5, $I0
715     is( $N5, "6", 'fact_n_i' )
716     fact $N6, $I1
717     is( $N6, "39916800", 'fact_n_i' )
718     fact $N7, $I2
719     is( $N7, "1", 'fact_n_i' )
720     fact $N8, $I3
721     is( $N8, "1", 'fact_n_i' )
722 .end
724 .sub test_fact_n_ic
725     fact $N5, 3
726     is( $N5, "6", 'fact_n_ic' )
727     fact $N6, 11
728     is( $N6, "39916800", 'fact_n_ic' )
729     fact $N7, 0
730     is( $N7, "1", 'fact_n_ic' )
731     fact $N8, -563
732     is( $N8, "1", 'fact_n_ic' )
733 .end
735 .sub test_exchange
736     set $N1, 1.234560
737     set $N2, 9.876540
738     exchange $N1, $N2
739     is( $N1, "9.87654", 'exchange' )
740     is( $N2, "1.23456", 'exchange' )
741     set $N3, -100.200300
742     exchange $N3, $N3
743     is( $N3, "-100.2003", 'exchange' )
744 .end
746 .sub test_op_n_nc_nc
747     add $N1, 2.0, 3.0
748     is( $N1, "5", 'op_n_nc_nc' )
749     sub $N1, 2.0, 4.0
750     is( $N1, "-2", 'op_n_nc_nc' )
751 .end
753 .sub test_lt_nc_nc_ic
754     lt 2.0, 1.0, nok
755     ok( 1, 'lt_nc_nc_ic ok 1')
756     lt 3.0, 4.0, ok_2
757   nok:
758     ok( 0, 'lt_nc_nc_ic')
759     goto END
760   ok_2:
761     ok( 1, 'lt_nc_nc_ic ok 2')
762   END:
763 .end
765 .sub test_string_gt_num
766     set $S0, "1"
767     set $S1, "12.0"
768     set $S2, "-2.45"
769     set $S3, "25e2"
770     set $S4, "Banana"
771     set $N0, $S0
772     set $N1, $S1
773     set $N2, $S2
774     set $N3, $S3
775     set $N4, $S4
776     is( $N0, "1", 'string -> num' )
777     is( $N1, "12", 'string -> num' )
778     is( $N2, "-2.45", 'string -> num' )
779     is( $N3, "2500", 'string -> num' )
780     is( $N4, "0", 'string -> num' )
781 .end
783 .sub test_null
784     set $N31, 12.5
785     is( $N31, "12.5", 'null' )
786     null $N31
787     is( $N31, "0", 'null' )
788 .end
790 .sub test_dot_dig_parsing
791     set $N0, .5
792     is( $N0, "0.5", '.dig parsing' )
793 .end
795 # Don't check exact string representation. Last digit part can be different */
796 .sub test_sqrt_n_n
797     $P0 = new 'Float'
798     $N1 = 2
799     $N2 = sqrt $N1
800     $P0 = $N2
801     is( $P0, 1.414213562373, 'sqrt_n_n',1e-6 )
803     $N2 = sqrt 2.0
804     $P0 = $N2
805     is( $P0, 1.414213562373, 'sqrt_n_n',1e-6 )
806 .end
808 .sub test_exception_div_n_n_by_zero
809     push_eh handler
810     set $N0, 0
811     set $N1, 10
812     div $N1, $N0
813   handler:
814     .exception_is( 'Divide by zero' )
815 .end
817 .sub test_exception_div_n_nc_by_zero
818     push_eh handler
819     set $N1, 10
820     div $N1, 0
821   handler:
822     .exception_is( 'Divide by zero' )
823 .end
825 .sub test_exception_div_n_n_n_by_zero
826     push_eh handler
827     set $N0, 0
828     set $N1, 10
829     div $N2, $N1, $N0
830   handler:
831     .exception_is( 'Divide by zero' )
832 .end
834 .sub test_exception_div_n_nc_n_by_zero
835     push_eh handler
836     set $N0, 0
837     div $N2, 10, $N0
838   handler:
839     .exception_is( 'Divide by zero' )
840 .end
842 .sub test_exception_div_n_n_nc_by_zero
843     push_eh handler
844     set $N1, 10
845     div $N2, $N1, 0
846   handler:
847     .exception_is( 'Divide by zero' )
848 .end
850 .sub test_exception_fdiv_n_n_by_zero
851     push_eh handler
852     set $N0, 0
853     set $N1, 10
854     fdiv $N1, $N0
855   handler:
856     .exception_is( 'Divide by zero' )
857 .end
859 .sub test_exception_fdiv_n_nc_by_zero
860     push_eh handler
861     set $N1, 10
862     fdiv $N1, 0
863   handler:
864     .exception_is( 'Divide by zero' )
865 .end
867 .sub test_exception_fdiv_n_n_n_by_zero
868     push_eh handler
869     set $N0, 0
870     set $N1, 10
871     fdiv $N2, $N1, $N0
872   handler:
873     .exception_is( 'Divide by zero' )
874 .end
876 .sub test_exception_fdiv_n_nc_n_by_zero
877     push_eh handler
878     set $N0, 0
879     fdiv $N2, 10, $N0
880   handler:
881     .exception_is( 'Divide by zero' )
882 .end
884 .sub test_exception_fdiv_n_n_nc_by_zero
885     push_eh handler
886     set $N1, 10
887     fdiv $N2, $N1, 0
888   handler:
889     .exception_is( 'Divide by zero' )
890 .end
892 .sub test_exception_cmod_n_n_n_by_zero
893     push_eh handler
894     set $N0, 0
895     set $N1, 10
896     cmod $N2, $N1, $N0
897   handler:
898     .exception_is( 'Divide by zero' )
899 .end
901 .sub test_exception_cmod_n_nc_n_by_zero
902     push_eh handler
903     set $N0, 0
904     cmod $N2, 10, $N0
905   handler:
906     .exception_is( 'Divide by zero' )
907 .end
909 .sub test_exception_cmod_n_n_nc_by_zero
910     push_eh handler
911     set $N1, 10
912     cmod $N2, $N1, 0
913   handler:
914     .exception_is( 'Divide by zero' )
915 .end
917 .sub test_mod_n_n_n_by_zero
918     set $N0, 0
919     set $N1, 10
920     mod $N2, $N1, $N0
921     is( $N2, "10", 'mod_n_n_n by zero' )
922 .end
924 .sub test_mod_n_nc_n_by_zero
925     set $N0, 0
926     mod $N2, 10, $N0
927     is( $N2, 10, 'mod_n_nc_n by zero' )
928 .end
930 .sub test_mod_n_n_nc_by_zero
931     set $N1, 10
932     mod $N2, $N1, 0
933     is( $N2, '10', 'mod_n_n_nc by zero' )
934 .end
936 # Local Variables:
937 #   mode: pir
938 #   cperl-indent-level: 4
939 #   fill-column: 100
940 # End:
941 # vim: expandtab shiftwidth=4 ft=pir: