fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / op / vivify.t
blob60f08cbb0685527a7c21d14e15eea9a1b63f902d
1 #!./parrot
2 # Copyright (C) 2009-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/op/vivify.t - the vivify opcode
9 =head1 SYNOPSIS
11      % prove t/op/vivify.t
13 =head1 DESCRIPTION
15 Tests Parrot's experimental vivify opcode.
17 =cut
19 .sub 'main' :main
20     .include 'test_more.pir'
22     plan(25)
24     test_vivify_keyed_pmc()
25     test_vivify_keyed_int()
26     test_vivify_keyed_str()
27     # END_OF_TESTS
28 .end
30 .sub 'test_vivify_keyed_int'
31     $P0    = new [ 'Hash' ]
32     $P1    = box 111
33     $P0[1] = $P1
34     $P0[3] = $P1
36     $P3 = vivify $P0, 1, [ 'Integer' ]
37     is( $P3, 111, 'vivify should return existing element unmodified' )
38     $P1 = 123
39     is( $P3, 123, '... the exact PMC itself' )
41     $P4 = $P0[1]
42     $I0 = issame $P1, $P4
43     ok( $I0, ' ... existing entry in Hash should be unmodified')
45     $P3 = vivify $P0, 3, [ 'Integer' ]
46     is( $P3, 123, '... even if stored in multiple locations' )
48     $P3 = vivify $P0, 2, [ 'Integer' ]
49     is( $P3, 0, 'vivify should create new PMC if not-existent' )
50     isa_ok( $P3, 'Integer', 'new PMC should have requested type' )
52     $P4 = $P0[2]
53     $I0 = issame $P3, $P4
54     ok( $I0, ' ... and should be bound in Hash')
55 .end
57 .sub 'test_vivify_keyed_str'
58     $P0          = new [ 'Hash' ]
59     $P1          = box 111
60     $P0['one']   = $P1
61     $P0['three'] = $P1
63     $P3 = vivify $P0, 'one', [ 'Integer' ]
64     is( $P3, 111, 'vivify should return existing element unmodified' )
65     $P1 = 123
66     is( $P3, 123, '... the exact PMC itself' )
68     $P4 = $P0['one']
69     $I0 = issame $P1, $P4
70     ok( $I0, ' ... existing entry in Hash should be unmodified')
72     $P3 = vivify $P0, 'three', [ 'Integer' ]
73     is( $P3, 123, '... even if stored in multiple locations' )
75     $P3 = vivify $P0, 'two', [ 'Integer' ]
76     is( $P3, 0, 'vivify should create new PMC if not-existent' )
77     isa_ok( $P3, 'Integer', 'new PMC should have requested type' )
79     $P4 = $P0['two']
80     $I0 = issame $P3, $P4
81     ok( $I0, ' ... and should be bound in Hash')
82 .end
84 .sub 'test_vivify_keyed_pmc'
85     $P0          = new [ 'Hash' ]
86     $P1          = box 111
88     .local pmc str_key
89     str_key      = box 'foo'
90     $P0[str_key] = $P1
92     .local pmc int_key
93     int_key      = box 435
94     $P0[int_key] = $P1
96     $P3          = vivify $P0, str_key, [ 'String' ]
97     is( $P3, 111, 'vivify should return existing element unmodified' )
99     $P1          = 123
100     is( $P3, 123, '... the exact PMC itself' )
102     $P4 = $P0[str_key]
103     $I0 = issame $P1, $P4
104     ok( $I0, ' ... existing entry in Hash should be unmodified')
106     $P3 = vivify $P0, int_key, [ 'String' ]
107     is( $P3, 123, '... even if stored in multiple locations' )
109     $P4 = $P0[int_key]
110     $I0 = issame $P1, $P4
111     ok( $I0, ' ... existing entry in Hash should be unmodified')
113     str_key = 'baz'
114     $P3 = vivify $P0, str_key, [ 'String' ]
115     is( $P3, '', 'vivify should return new PMC if keyed PMC is not there' )
116     isa_ok( $P3, 'String', 'new PMC should have given type' )
118     $P4 = $P0[str_key]
119     $I0 = issame $P3, $P4
120     ok( $I0, ' ... and should be bound in Hash')
122     int_key = 789
123     $P3 = vivify $P0, int_key, [ 'String' ]
124     is( $P3, '', 'vivify should return new PMC if keyed PMC is not there' )
125     isa_ok( $P3, 'String', 'new PMC should have given type' )
127     $P4 = $P0[int_key]
128     $I0 = issame $P3, $P4
129     ok( $I0, ' ... and should be bound in Hash')
130 .end
132 # Local Variables:
133 #   mode: pir
134 #   fill-column: 100
135 # End:
136 # vim: expandtab shiftwidth=4 ft=pir: