-
Notifications
You must be signed in to change notification settings - Fork 138
/
codestring.t
189 lines (168 loc) · 3.73 KB
/
codestring.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#!perl
# Copyright (C) 2006-2007, The Perl Foundation.
# $Id$
use strict;
use warnings;
use lib qw( . lib ../lib ../../lib );
use Test::More;
use Parrot::Test tests => 10;
=head1 NAME
t/pmc/codestring.t - test the CodeString class
=head1 SYNOPSIS
% prove t/pmc/codestring.t
=head1 DESCRIPTION
Tests the CodeString class directly.
=cut
pir_output_is( <<'CODE', <<'OUTPUT', 'create a CodeString object' );
.sub main :main
.local pmc code
code = new 'CodeString'
code = 'ok 1'
say code
.end
CODE
ok 1
OUTPUT
pir_output_is( <<'CODE', <<'OUTPUT', 'calls to unique' );
.sub main :main
.local pmc code
code = new 'CodeString'
$P1 = code.'unique'('ok ')
say $P1
$P1 = code.'unique'()
say $P1
$P1 = code.'unique'('$P')
say $P1
.end
CODE
ok 10
11
$P12
OUTPUT
pir_output_is( <<'CODE', <<'OUTPUT', 'basic emit' );
.sub main :main
.local pmc code
code = new 'CodeString'
code.emit(' label:')
code.emit(' say "Hello, World"')
code.emit(' $I0 = 1')
code.emit(' $N0 = 0.1')
print code
.end
CODE
label:
say "Hello, World"
$I0 = 1
$N0 = 0.1
OUTPUT
pir_output_is( <<'CODE', <<'OUTPUT', 'emit with pos args' );
.sub main :main
.local pmc code
code = new 'CodeString'
code.emit(' label_%0:', 1234)
code.emit(' say "%0, %1"', 'Hello', 'World')
code.emit(' %0 = %2', '$I0', 24, 48)
print code
.end
CODE
label_1234:
say "Hello, World"
$I0 = 48
OUTPUT
pir_output_is( <<'CODE', <<'OUTPUT', 'emit with %, args' );
.sub main :main
.local pmc code
code = new 'CodeString'
code.emit(' label_%0:', 1234)
code.emit(' say "%,"', 'Hello')
code.emit(' say "%,"', 'Hello', 'World', 'of', 'Parrot')
print code
.end
CODE
label_1234:
say "Hello"
say "Hello, World, of, Parrot"
OUTPUT
pir_output_is( <<'CODE', <<'OUTPUT', 'emit with named args' );
.sub main :main
.local pmc code
code = new 'CodeString'
code.emit(' label_%a:', 'a'=>1234)
code.emit(' say "%b, %c"', 'b'=>'Hello', 'c'=>'World')
code.emit(' say "%d"', 'b'=>'Hello', 'c'=>'World')
print code
.end
CODE
label_1234:
say "Hello, World"
say "%d"
OUTPUT
pir_output_is( <<'CODE', <<'OUTPUT', 'emit with pos + named args' );
.sub main :main
.local pmc code
code = new 'CodeString'
code.emit(' label_%a:', 'a'=>1234)
code.emit(' %0 "%b, %c"', 'say', 'print', 'b'=>'H', 'c'=>'W')
code.emit(' say "%,, %c"', 'alpha', 'beta', 'b'=>'H', 'c'=>'W')
print code
.end
CODE
label_1234:
say "H, W"
say "alpha, beta, W"
OUTPUT
pir_output_is( <<'CODE', <<'OUTPUT', 'global unique #' );
.sub main :main
.local pmc code1, code2
code1 = new 'CodeString'
code2 = new 'CodeString'
.local string unique1, unique2
unique1 = code1.'unique'()
unique2 = code2.'unique'('$P')
say unique1
say unique2
.end
CODE
10
$P11
OUTPUT
pir_output_is( <<'CODE', <<'OUTPUT', 'namespace keys' );
.sub main :main
.local pmc code
code = new 'CodeString'
$S0 = code.'key'('abc')
say $S0
$S0 = code.'key'('abc', 'def')
say $S0
$P0 = split ' ', unicode:"abc def T\xe9st"
$S0 = code.'key'($P0 :flat)
say $S0
$S0 = code.'key'($P0)
say $S0
$S0 = code.'key'('_perl6', $P0)
say $S0
.end
CODE
["abc"]
["abc";"def"]
["abc";"def";unicode:"T\x{e9}st"]
["abc";"def";unicode:"T\x{e9}st"]
["_perl6";"abc";"def";unicode:"T\x{e9}st"]
OUTPUT
pir_output_is( <<'CODE', <<'OUTPUT', 'regression on first char repl bug' );
.sub main :main
.local pmc code
null $P0
code = new 'CodeString'
code.emit('new', 'n'=>$P0)
print code
.end
CODE
new
OUTPUT
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4: