fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / integer.t
blobc04b5e4dd1578f1b543c9edc36942454121a6507
1 #!./parrot
2 # Copyright (C) 2001-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/pmc/integer.t - Integer basic type
9 =head1 SYNOPSIS
11     % prove t/pmc/integer.t
13 =head1 DESCRIPTION
15 Tests the Integer PMC.
17 =cut
19 .sub 'test' :main
20     .include 'test_more.pir'
22     plan(61)
23     test_init()
24     test_basic_math()
25     test_truthiness_and_definedness()
26     test_set_string_native()
27     test_isa()
28     test_interface()
29     test_ne()
30     test_gt()
31     test_ge()
32     test_istrue_isfalse()
33     test_if_unless()
34     test_add()
35     test_arithmetic()
36     test_get_as_base()
37     test_get_as_base10()
38     test_get_as_base_various()
39     test_get_as_base_bounds_check()
40     test_cmp_subclass()
41     test_cmp_RT59336()
42 .end
44 .sub test_init
45     .local pmc i1, i2
46     i1 = new ['Integer']
47     is(i1, 0, "Default value of Integer is 0")
48     i1 = 42
49     i2 = new ['Integer'], i1
50     is(i2, 42, "Initialize with argument set correct value")
51 .end
53 .sub test_get_as_base_bounds_check
54     throws_substring(<<'CODE', 'get_as_base: base out of bounds', 'get_as_base lower bound check')
55     .sub main
56         $P0 = new ['Integer']
57         $P0 = 42
58         $S0 = $P0.'get_as_base'(1)
59         say $S0
60     .end
61 CODE
62     throws_substring(<<'CODE', 'get_as_base: base out of bounds', 'get_as_base upper bound check')
63     .sub main
64         $P0 = new ['Integer']
65         $P0 = 42
66         $S0 = $P0.'get_as_base'(37)
67         say $S0
68     .end
69 CODE
70 .end
72 .sub test_basic_math
73     .local pmc int_1
74     int_1 = new ['Integer']
75     is(int_1,0)
76     int_1 = 1
77     is(int_1,1)
78     int_1 += 777777
79     int_1 -= 777776
80     is(int_1,2)
81     int_1 *= -333333
82     int_1 /= -222222
83     is(int_1,3)
84     inc int_1
85     inc int_1
86     dec int_1
87     is(int_1,4)
88     neg int_1
89     dec int_1
90     neg int_1
91     is(int_1,5)
92 .end
95 .sub test_truthiness_and_definedness
96     .local pmc int_1
97     int_1 = new ['Integer']
99     nok(int_1, "A newly created Integer is not true")
101     .local int is_defined
103     is_defined = defined int_1
105     nok(int_1, "A newly created Integer is not defined")
107     int_1 = -999999999
109     ok(int_1, "-999999999 is true")
111     is_defined = defined int_1
113     ok(int_1, "-999999999 is defined")
115 .end
118 .sub test_set_string_native
119     .local pmc pmc1
120     pmc1 = new ['Integer']
121     pmc1 = "-123456789"
122     is(pmc1, -123456789)
123 .end
126 .sub test_isa
127     .local pmc pmc1
128     pmc1 = new ['Integer']
130     .local int pmc1_is_a
131     pmc1_is_a = isa pmc1, "Integer"
132     isa_ok(pmc1, "Integer")
133 .end
135 .sub test_interface
136     .local pmc pmc1
137     pmc1 = new ['Integer']
138     .local int bool1
139     does bool1, pmc1, "scalar"
140     is(bool1,1)
141     does bool1, pmc1, "integer"
142     is(bool1,1)
143     does bool1, pmc1, "no_interface"
144     is(bool1,0)
145 .end
147 .sub test_ne
148     .local pmc pmc1
149     pmc1 = new ['Integer']
150     .local int int1
151     pmc1 = 10
152     int1 = 20
153     ne pmc1, int1, OK1
154     ok(0)
155     goto next_test
156 OK1:
157     ok(1)
159 next_test:
161     int1 = 10
162     ne pmc1, int1, BAD2
163     branch OK2
164 BAD2:
165     ok(0)
166     goto fin
167 OK2:
168     ok(1)
169 fin:
170 .end
173 .sub test_gt
174     .local pmc pmc1
175     pmc1 = new ['Integer']
176     .local int int1
177     pmc1 = 10
178     int1 = 5
179     gt pmc1, int1, OK1
180     ok(0)
181     goto next_test1
182 OK1:
183     ok(1)
185 next_test1:
186     int1 = 10
187     gt pmc1, int1, BAD2
188     branch OK2
189 BAD2:
190     ok(0)
191 OK2:
192     ok(1)
194 next_test2:
195     int1 = 20
196     gt pmc1, int1, BAD3
197     branch OK3
198 BAD3:
199     ok(0)
200     goto fin
201 OK3:
202     ok(1)
203 fin:
204 .end
207 .sub test_ge
208     .local pmc pmc1
209     pmc1 = new ['Integer']
210     .local int int1
211     pmc1 = 10
212     int1 = 5
213     ge pmc1, int1, OK1
214     ok(0)
215     goto next_test1
216 OK1:
217     ok(1)
218     int1 = 10
220 next_test1:
221     ge pmc1, int1, OK2
222     ok(0)
223     goto next_test2
224 OK2:
225     ok(1)
226     int1 = 20
227 next_test2:
228     ge pmc1, int1, BAD3
229     branch OK3
230 BAD3:
231     ok(0)
232     goto fin
233 OK3:
234     ok(1)
235 fin:
236 .end
239 .sub test_istrue_isfalse
240     .local pmc pmc1
241     pmc1 = new ['Integer']
242     .local int int1
243     pmc1 = 10
244     istrue int1, pmc1
245     is(1,int1)
246     isfalse int1, pmc1
247     is(0,int1)
248     pmc1 = 0
249     istrue int1, pmc1
250     is(0,int1)
251     isfalse int1, pmc1
252     is(1,int1)
253 .end
256 .sub test_if_unless
257       new $P0, ['Integer']
258       set $P0, 10
259       if $P0, OK1
260       ok(0)
261       goto test1
262 OK1:
263       ok(1)
264 test1:
265       unless $P0, BAD2
266       branch OK2
267 BAD2:
268       ok(0)
269       goto test2
270 OK2:
271       ok(1)
272       set $P0, 0
273 test2:
274       if $P0, BAD3
275       branch OK3
276 BAD3:
277       ok(0)
278       goto test3
279 OK3:
280       ok(1)
281 test3:
282       unless $P0, OK4
283       ok(0)
284       goto fin
285 OK4:
286       ok(1)
287 fin:
288 .end
290 .sub test_add
291    new $P0, ['Integer']
292    set $P0, 5
293    new $P1, ['Integer']
294    set $P1, 10
295    new $P2, ['Integer']
296    add $P2, $P0, $P1
297    set $S0, $P2
298    is($S0,15)
299    set $P0, "20"
300    set $P1, "30"
301    add $P2, $P1, $P0
302    set $S0, $P2
303    is($S0,50)
304 .end
306 .sub test_arithmetic
307     $P0 = new ['Integer']
308     $P1 = new ['Integer']
309     set $P0, 6
310     set $P1, 2
312     add $P2, $P0, $P1
313     is($P2,8)
314     $P2 = add $P0, $P1
315     is($P2,8)
316     sub $P2, $P0, $P1
317     is($P2,4)
318     mul $P2, $P0, $P1
319     is($P2,12)
320     div $P2, $P0, $P1
321     is($P2,3)
322     mod $P2, $P0, $P1
323     is($P2,0)
324 .end
327 .sub test_get_as_base
328     $P0 = new ['Integer']
329     $P0 = 42
330     $I0 = can $P0, 'get_as_base'
331     ok($I0,'Integers can get_as_base')
332 .end
334 .sub test_get_as_base10
335     $P0 = new ['Integer']
336     $P0 = 42
338     $S0 = $P0.'get_as_base'(10)
339     is($S0,42)
340 .end
342 .sub test_get_as_base_various
343     $P0 = new ['Integer']
344     $P0 = 42
346     $S0 = $P0.'get_as_base'(2)
347     is($S0,101010)
349     $S0 = $P0.'get_as_base'(3)
350     is($S0,1120)
352     $S0 = $P0.'get_as_base'(5)
353     is($S0,132)
355     $S0 = $P0.'get_as_base'(7)
356     is($S0,60)
358     $S0 = $P0.'get_as_base'(11)
359     is($S0,39)
361     $S0 = $P0.'get_as_base'(13)
362     is($S0,33)
364     $S0 = $P0.'get_as_base'(17)
365     is($S0,28)
367     $S0 = $P0.'get_as_base'(19)
368     is($S0,24)
370     $S0 = $P0.'get_as_base'(23)
371     is($S0,'1j')
373     $S0 = $P0.'get_as_base'(29)
374     is($S0,'1d')
376     $S0 = $P0.'get_as_base'(31)
377     is($S0,'1b')
378 .end
380 .sub test_cmp_subclass
381     $P0 = subclass 'Integer', 'Int'
383     $P1 = new ['Int']
384     $P1 = 1
385     $P2 = new ['Int']
386     $P2 = 2
388     $I0 = cmp $P1, $P2
389     is($I0,-1)
390     $I0 = cmp $P1, $P1
391     is($I0,0)
392     $I0 = cmp $P2, $P1
393     is($I0,1)
394 .end
396 .sub test_cmp_RT59336
397     $P0 = new ['Integer']
398     $P0 = 2147483600
400 test_10:
401     if $P0 > -10 goto pass
402     ok(0)
403     goto test_1000
404 pass:
405     ok(1)
407 test_1000:
408     if $P0 > -1000 goto pass2
409     ok(0)
410     goto fin
411 pass2:
412     ok(1)
413 fin:
414 .end
416 # Local Variables:
417 #   mode: pir
418 #   fill-column: 100
419 # End:
420 # vim: expandtab shiftwidth=4 ft=pir: