fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / op / inf_nan.t
blobc3ebd9a64b340094fd8d8f7d63163a91c349b557
1 #!./parrot
2 # Copyright (C) 2009-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/op/inf_nan.t - Test math properties of Inf and NaN
9 =head1 SYNOPSIS
11     % prove t/op/inf_nan.t
13 =head1 DESCRIPTION
15 Tests for mathematical operations with Inf and Nan.
17 =cut
19 .sub main :main
20     .include 'test_more.pir'
21     plan(37)
23     test_basic_arith()
24     test_sqrt()
25     test_neg()
26     test_mix_nan_inf()
27     test_rounding_n()
28     test_rounding_i()
29     test_nan_complex()
30     test_fdiv_integer_pmc_nan()
31     test_fdiv_float_pmc_nan()
32     test_fdiv_float_integer_pmc_nan()
33     test_mod_float_integer_pmc_nan()
35 .end
37 .sub test_basic_arith
38     $N0 = 'Inf'
39     is($N0, 'Inf', 'basic arithmetic: =')
40     $N0 -= $N0
41     is($N0, 'NaN', '... -=')
42     $N0 *= -1
43     is($N0, 'NaN', '... *= -1')
44     $N0 *= 0
45     is($N0, 'NaN', '... *= 0')
46     $N0 += 5
47     is($N0, 'NaN', '... += 5')
48     $N0 -= 42
49     is($N0, 'NaN', '... -= 42')
50     inc $N0
51     is($N0, 'NaN', '... inc')
52     dec $N0
53     is($N0, 'NaN', '... dec')
54     $N2 = abs $N0
55     is($N2, 'NaN', '... abs NaN')
56     $N1 = 'Inf'
57     $N3 = abs $N1
58     is($N3, 'Inf', '... abs Inf')
59     $N1 = '-Inf'
60     $N3 = abs $N1
61     is($N3, 'Inf', '... abs -Inf')
62 .end
64 .sub test_sqrt
65     $N0 = 'Inf'
66     $N1 =  $N0
67     is($N1, 'Inf', 'sqrt: assignment')
68     $N0 = '-Inf'
69     $N1 = sqrt $N0
70     is($N1, 'NaN', '... sqrt -Inf')
71     $N0 = 'NaN'
72     $N1 = sqrt $N0
73     is($N1, 'NaN', '... sqrt NaN')
74     $N0 = -1
75     $N1 = sqrt $N0
76     is($N1, 'NaN', '... sqrt -1')
77 .end
79 .sub test_neg
80     $N0 = 'Inf'
81     $N1 = neg $N0
82     is($N1, '-Inf', 'negative: neg Inf')
83     $N0 = '-Inf'
84     $N1 = neg $N0
85     is($N1, 'Inf', '... neg -Inf')
86     $N0 = 'NaN'
87     $N1 = neg $N0
88     is($N1, 'NaN', '... neg NaN')
89 .end
91 .sub test_mix_nan_inf
92     $N0 = 'NaN'
93     $N1 = 'Inf'
94     $N0 *= $N1
95     is($N0, 'NaN', 'mixing NaN and Inf: NaN * Inf')
96     $N0 /= $N1
97     is($N0, 'NaN', '... NaN / Inf')
98     $N0 -= $N1
99     is($N0, 'NaN', '... NaN - Inf')
100     $N0 += $N1
101     is($N0, 'NaN', '... NaN + Inf')
102 .end
104 .sub test_rounding_n
105     $N0 = 'NaN'
106     $N1 = floor $N0
107     is($N1, 'NaN', 'rounding n: floor NaN')
108     $N2 = ceil $N0
109     is($N2, 'NaN', '... ceil NaN')
110     $N0 = 'Inf'
111     $N1 = floor $N0
112     is($N1, 'Inf', '... floor Inf')
113     $N2 = ceil $N0
114     is($N2, 'Inf', '... ceil Inf')
115     $N0 = '-Inf'
116     $N1 = floor $N0
117     is($N1, '-Inf', '... floor -Inf')
118     $N2 = ceil $N0
119     is($N2, '-Inf', '... ceil -Inf')
120 .end
122 #pir_output_is(<<'CODE',<<OUTPUT, "TT #370 Rounding inf/nan");
123 .sub test_rounding_i
124     $N0 = 'Inf'
125     $I0 = floor $N0
126     #is($I0, 'Inf', 'floor Inf')
127     skip(1, 'rounding nan/inf gives something like -2147483648')
128     $N0 = 'NaN'
129     $I0 = floor $N0
130     #is($I0, 'NaN', 'floor Inf')
131     skip(1, 'rounding nan/inf gives something like -2147483648')
132     $N0 = 'Inf'
133     $I0 = ceil $N0
134     #is($I0, 'Inf', 'floor Inf')
135     skip(1, 'rounding nan/inf gives something like -2147483648')
136     $N0 = 'NaN'
137     $I0 = ceil $N0
138     #is($I0, 'NaN', 'floor Inf')
139     skip(1, 'rounding nan/inf gives something like -2147483648')
140 .end
142 .sub test_nan_complex
143     $P1 = new ["Complex"]
144     $N0 = 'NaN'
145     set $P1, "1 + i"
146     $P1 += $N0
147     #is($P1, 'NaN', '1+i + NaN')
148     skip(1, '1+i + NaN should be NaN')
149 .end
151 .sub test_fdiv_integer_pmc_nan
152     $P1 = new "Integer"
153     $P2 = new "Integer"
154     $P2 = 1
155     $N0 = 'NaN'
156     fdiv $P1, $P2, $N0
157     #is($P1, 'NaN', 'fdiv with Integer PMCs and NaN')
158     skip(1, 'fdiv/mod do not play nicely with PMCs and NaN')
159 .end
161 .sub test_fdiv_float_pmc_nan
162     $P1 = new 'Float'
163     $P2 = new 'Float'
164     $P2 = 1
165     $N0 = 'NaN'
166     fdiv $P1, $P2, $N0
167     #is($P1, 'NaN','fdiv with Float PMCs and NaN')
168     skip(1, 'fdiv/mod do not play nicely with PMCs and NaN')
169 .end
171 .sub test_fdiv_float_integer_pmc_nan
172     $P1 = new 'Float'
173     $P2 = new 'Integer'
174     $P2 = 1
175     $N0 = 'NaN'
176     fdiv $P1, $P2, $N0
177     #is($P1, 'NaN', 'fdiv with Float and Integer PMCs and NaN')
178     skip(1, 'fdiv/mod do not play nicely with PMCs and NaN')
179 .end
181 .sub test_mod_float_integer_pmc_nan
182     $P1 = new 'Float'
183     $P2 = new 'Integer'
184     $P2 = 1
185     $N0 = 'NaN'
186     mod $P1, $P2, $N0
187     #is($P1, 'NaN', 'mod with Float and Integer PMCs and NaN')
188     skip(1, 'fdiv/mod do not play nicely with PMCs and NaN')
189 .end
191 # Local Variables:
192 #   mode: pir
193 #   fill-column: 100
194 # End:
195 # vim: expandtab shiftwidth=4 ft=pir: