fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / boolean.t
blob115d6b6da528e7a0ba260b8dc4d7e870b06b7ca2
1 #!./parrot
2 # Copyright (C) 2001-2007, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/pmc/boolean.t - Boolean Ops
9 =head1 SYNOPSIS
11     % prove t/pmc/boolean.t
13 =head1 DESCRIPTION
15 Tests C<Boolean> PMC. Checks comparison and logic operations for various
16 type combinations.
18 =cut
20 .sub main :main
21     .include 'test_more.pir'
22     plan(31)
23     init_null_tests()
24     init_int_tests()
25     instantiate_tests()
26     num_tests()
27     string_tests()
28     pmc_to_pmc_tests()
29     boolean_as_conditional()
30     logic_operations()
31     negation_tests()
32     interface_check()
33 .end
35 .sub init_null_tests
36     null $P0
37     $P1 = new ['Boolean'], $P0
38     set $I0, $P1
39     is($I0, 0, "init with null pmc gives false")
40 .end
42 .sub init_int_tests
43     $P0 = new ['Boolean']
45     set $I0, $P0
46     is($I0, 0,  "Boolean defaults to false")
48     set $I0, 1
49     set $P0, $I0
50     set $I1, $P0
51     is($I1, 1, "Boolean converts 1 to true")
53     set $P0, -4
54     set $I0, $P0
55     is($I0, 1, "Boolean converts negative int to true")
56 .end
58 .sub instantiate_tests
59     $P0 = new ['Boolean']
61     $P0 = 1
62     $P2 = get_class ['Boolean']
63     $P1 = new $P2, $P0
64     $I0 = $P1
65     is($I0, 1, "Boolean instantiated to true")
67     $P0 = 0
68     $P1 = new ['Boolean'], $P0
69     $I0 = $P1
70     is($I0, 0, "Boolean instantiated to false")
71 .end
73 .sub num_tests
75     $P0 = new ['Boolean']
76     set $N0, 0
77     set $P0, $N0
78     set $I0, $P0
79     is($I0, 0, "Boolean converts num 0 to false")
81     set $N0, 0.001
82     set $P0, $N0
83     set $I0, $P0
84     is($I0, 1, "Boolean converts non-0 num to true")
85 .end
87 .sub string_tests
88     $P0 = new ['Boolean']
90     set $S0, "0"
91     set $P0, $S0
92     set $I0, $P0
93     is($I0, 0, "Boolean converts string '0' to false")
95     set $S0, "foo"
96     set $P0, $S0
97     set $I0, $P0
98     is($I0, 1, "Boolean converts string 'foo' to true")
100     set $S0, ""
101     set $P0, $S0
102     set $I0, $P0
103     is($I0, 0, "Boolean converts empty string to false")
104 .end
106 .sub pmc_to_pmc_tests
107     $P0 = new ['Boolean']
108     $P1 = new ['Boolean']
110     set $P0, 1
111     clone $P1, $P0
112     set $I0, $P1
113     is($I0, 1, "cloned Boolean has correct value")
115     set $P0, 0
116     set $I0, $P1
117     is($I0, 1, "cloned Boolean is not a reference")
119     set $P1, 0
120     set $I0, $P1
121     is($I0, 0, "cloned Boolean can change value")
122 .end
124 .sub boolean_as_conditional
125     $P0 = new ['Boolean']
127     set $P0, 1
128     if $P0, OK_1
129     ok(0, "Boolean is broken as a conditional")
130     goto end
131 OK_1:
132     ok(1, "Boolean works as a conditional")
133 end:
134 .end
136 .sub logic_operations
137     $P0 = new ['Boolean']
138     $P1 = new ['Boolean']
139     $P2 = new ['Boolean']
141     set $P0, 1
142     set $P1, 0
143     or $P2, $P0, $P1
144     is($P2, 1, "1|0 == 1 for Booleans")
146     #$P0 = 0, $P1 = 1, $P2 = 1
147     or $P2, $P1, $P1
148     is($P2, 0, "0|0 == 0 for Booleans")
150     #$P0 = 0, $P1 = 1, $P2 = 0
151     and $P2, $P0, $P1
152     is($P2, 0, "0&1 == 0 for Booleans")
154     set $P0, 0
155     set $P1, 0
156     and $P2, $P0, $P1
157     is($P2, 0, "0&0 == 0 for Booleans")
159     #$P0 = 0, $P1 = 0, $P2 = 0
160     not $P1, $P1
161     is($P1, 1, "!0 == 1 for Booleans")
163     #$P0 = 0, $P1 = 1, $P2 = 0
164     not $P0, $P0
165     and $P2, $P0, $P1
166     is($P2, 1, "1&1 == 1 for Booleans")
168     #$P0 = 1, $P1 = 1, $P2 = 1
169     xor $P2, $P0, $P1
170     is($P2, 0, "1xor1 == 0 for Booleans")
172     #$P0 = 1, $P1 = 1, $P2 = 0
173     not $P0, $P0
174     xor $P2, $P0, $P1
175     is($P2, 1, "0xor1 == 1 for Booleans")
177     #$P0 = 0, $P1 = 1, $P2 = 1
178     not $P1, $P1
179     xor $P2, $P0, $P1
180     is($P2, 0, "0xor0 == 0 for Booleans")
182 .end
184 .sub negation_tests
185     $P0 = new ['Boolean']
186     $P1 = new ['Boolean']
188     set $P0, 1
189     neg $P1, $P0
190     is($P1, 1, "negated Boolean true is still true")
192     set $P0, 0
193     neg $P1, $P0
194     is($P1, 0, "negated Boolean false is still false")
196     set $P0, 1
197     neg $P0
198     is($P0, 1, "in-place negated Boolean true is still true")
200     set $P0, 0
201     neg $P0
202     is($P0, 0, "in-place negated Boolean false is still false")
203 .end
205 .sub interface_check
206     .local pmc p
207     .local int b
209     p = new ['Boolean']
210     does b, p, "scalar"
211     is(b, 1, "Boolean does scalar")
212     does b, p, "boolean"
213     is(b, 1, "Boolean does boolean (big surprise there)")
214     does b, p, "no_interface"
215     is(b, 0, "Boolean doesn't do no_interface")
216 .end
218 # Local Variables:
219 #   mode: pir
220 #   fill-column: 100
221 # End:
222 # vim: expandtab shiftwidth=4 ft=pir: