author | Claus Gittinger <cg@exept.de> |
Wed, 03 Aug 2011 15:12:23 +0200 | |
changeset 608 | 72ad19f340f0 |
parent 606 | 42c26f8c0ce6 |
child 609 | 378ef1ea8892 |
permissions | -rw-r--r-- |
69 | 1 |
"{ Package: 'exept:regression' }" |
58 | 2 |
|
70 | 3 |
"{ NameSpace: RegressionTests }" |
4 |
||
95 | 5 |
TestCase subclass:#BlockTest |
608 | 6 |
instanceVariableNames:'process' |
58 | 7 |
classVariableNames:'' |
8 |
poolDictionaries:'' |
|
181 | 9 |
category:'tests-Regression' |
58 | 10 |
! |
11 |
||
12 |
||
606 | 13 |
!BlockTest methodsFor:'helpers - eqeq defect'! |
334
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
14 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
15 |
g |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
16 |
^ True "/ the class here |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
17 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
18 |
"Created: / 31-08-2007 / 17:40:37 / cg" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
19 |
! |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
20 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
21 |
h |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
22 |
^ True "/ the class here |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
23 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
24 |
"Created: / 31-08-2007 / 17:40:39 / cg" |
606 | 25 |
! ! |
26 |
||
27 |
!BlockTest methodsFor:'helpers - mkreal defect'! |
|
28 |
||
29 |
backgroundBlockWithMethodReturningHelper |
|
30 |
"/ had this bug in one situation: |
|
31 |
"/ a block was forked away |
|
32 |
"/ the method returns (its context is moved from the stack to the heap) |
|
33 |
"/ the block sees wrong method-vars |
|
34 |
||
35 |
|var1 var2 var3 var4 backgroundAction sema| |
|
36 |
||
37 |
sema := Semaphore new. |
|
38 |
||
39 |
backgroundAction := |
|
40 |
[ |
|
41 |
var1 := self getMeVar:1 sema:sema. |
|
42 |
self assert:(var1 = #[1]). |
|
43 |
var2 := self getMeVar:2 sema:sema. |
|
44 |
self assert:(var2 = #[2]). |
|
45 |
var3 := self getMeVar:3 sema:sema. |
|
46 |
self assert:(var3 = #[3]). |
|
47 |
var4 := self getMeVar:4 sema:sema. |
|
48 |
self assert:(var4 = #[4]). |
|
49 |
sema signal. |
|
50 |
]. |
|
608 | 51 |
process := backgroundAction newProcess. |
52 |
process priority:3. |
|
53 |
process resumt. |
|
606 | 54 |
^ sema |
55 |
||
56 |
"Created: / 02-08-2011 / 18:56:44 / cg" |
|
334
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
57 |
! |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
58 |
|
606 | 59 |
getMeVar:arg sema:sema |
60 |
|t| |
|
61 |
||
62 |
t := ByteArray with:arg. |
|
63 |
sema wait. |
|
64 |
%{ |
|
65 |
__markInterrupted(__context); |
|
66 |
%}. |
|
67 |
^ t |
|
68 |
||
69 |
"Created: / 02-08-2011 / 18:57:20 / cg" |
|
70 |
! ! |
|
71 |
||
608 | 72 |
!BlockTest methodsFor:'running'! |
73 |
||
74 |
tearDown |
|
75 |
|p| |
|
76 |
||
77 |
(p := process notil) ifTrue:[ |
|
78 |
process := nil. |
|
79 |
p terminate. |
|
80 |
] |
|
81 |
||
82 |
"Created: / 03-08-2011 / 15:11:11 / cg" |
|
83 |
! ! |
|
84 |
||
606 | 85 |
!BlockTest methodsFor:'tests - eqeq defects'! |
86 |
||
334
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
87 |
testBlockWithEQEQ_1 |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
88 |
|b v| |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
89 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
90 |
b := [ self g == self h ]. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
91 |
v := b value. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
92 |
self assert:(v == true). |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
93 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
94 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
95 |
" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
96 |
self new testBlockWithEQEQ_1 |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
97 |
" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
98 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
99 |
"Created: / 31-08-2007 / 17:41:59 / cg" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
100 |
! |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
101 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
102 |
testBlockWithEQEQ_2 |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
103 |
|b v| |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
104 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
105 |
b := [ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
106 |
%{ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
107 |
#ifdef FOO |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
108 |
%}. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
109 |
self thisIsNeverCalled. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
110 |
%{ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
111 |
#endif |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
112 |
%}. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
113 |
self g == self h |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
114 |
]. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
115 |
v := b value. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
116 |
self assert:(v == true). |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
117 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
118 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
119 |
" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
120 |
self new testBlockWithEQEQ_2 |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
121 |
" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
122 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
123 |
"Created: / 31-08-2007 / 17:42:02 / cg" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
124 |
! |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
125 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
126 |
testBlockWithEQEQ_3 |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
127 |
|b p v| |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
128 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
129 |
p := self. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
130 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
131 |
[ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
132 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
133 |
b := [ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
134 |
%{ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
135 |
#ifdef FOO |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
136 |
%}. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
137 |
self thisIsNeverCalled. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
138 |
%{ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
139 |
#endif |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
140 |
%}. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
141 |
p g == p h |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
142 |
]. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
143 |
] value. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
144 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
145 |
v := b value. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
146 |
self assert:(v == true). |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
147 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
148 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
149 |
" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
150 |
self new testBlockWithEQEQ_3 |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
151 |
" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
152 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
153 |
"Created: / 31-08-2007 / 17:44:07 / cg" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
154 |
! |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
155 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
156 |
testBlockWithEQEQ_4 |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
157 |
|b p v Tmp| |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
158 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
159 |
p := self. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
160 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
161 |
[ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
162 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
163 |
b := [ |foo| |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
164 |
%{ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
165 |
#ifdef FOO |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
166 |
%}. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
167 |
foo := Timestamp now. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
168 |
Tmp isNil ifTrue:[ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
169 |
Tmp := 'flags' copy. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
170 |
] ifFalse:[ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
171 |
ObjectMemory stopBackgroundCollector. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
172 |
]. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
173 |
self thisIsNeverCalled. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
174 |
%{ |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
175 |
#endif |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
176 |
%}. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
177 |
p g == p h |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
178 |
]. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
179 |
] perform:((Base64Coder decode:'dmFsdWU=') asString asSymbol). |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
180 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
181 |
v := b value. |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
182 |
self assert:(v == true). |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
183 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
184 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
185 |
" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
186 |
self new testBlockWithEQEQ_4 |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
187 |
" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
188 |
|
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
189 |
"Created: / 31-08-2007 / 17:44:38 / cg" |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
190 |
! ! |
a9657208d19b
oops - bytecode version generated wrong jitted code
Claus Gittinger <cg@exept.de>
parents:
181
diff
changeset
|
191 |
|
606 | 192 |
!BlockTest methodsFor:'tests - mkreal defect'! |
193 |
||
194 |
testBackgroundBlockWithMethodReturning |
|
195 |
"/ had this bug in one situation: |
|
196 |
"/ a block was forked away |
|
197 |
"/ the method returns (its context is moved from the stack to the heap) |
|
198 |
"/ the block sees wrong method-vars |
|
199 |
||
200 |
|sema| |
|
201 |
||
202 |
sema := self backgroundBlockWithMethodReturningHelper. |
|
203 |
sema signal. |
|
204 |
||
205 |
sema wait. |
|
206 |
||
207 |
"Created: / 02-08-2011 / 20:00:44 / cg" |
|
208 |
! ! |
|
209 |
||
95 | 210 |
!BlockTest methodsFor:'varArgBlocks'! |
58 | 211 |
|
97 | 212 |
getBlock1 |
213 |
|b| |
|
214 |
||
215 |
b := [:arg | Transcript |
|
216 |
show:'invoked with arg:'; |
|
217 |
showCR:arg |
|
218 |
]. |
|
219 |
^ b |
|
220 |
! |
|
221 |
||
58 | 222 |
getVarArgBlock1 |
223 |
|b| |
|
224 |
||
225 |
b := [:argList | Transcript |
|
70 | 226 |
show:'invoked with args:'; |
227 |
showCR:argList |
|
228 |
] asVarArgBlock. |
|
58 | 229 |
^ b |
230 |
||
231 |
||
232 |
! |
|
233 |
||
234 |
getVarArgBlock2 |
|
235 |
|b| |
|
236 |
||
237 |
b := [:argList | Transcript |
|
70 | 238 |
show:'invoked with args:'; |
239 |
showCR:argList. |
|
240 |
argList |
|
241 |
] asVarArgBlock. |
|
58 | 242 |
^ b |
243 |
||
244 |
||
245 |
! |
|
246 |
||
247 |
getVarArgBlock3 |
|
248 |
|b| |
|
249 |
||
250 |
b := [:argList | Transcript |
|
70 | 251 |
show:'invoked with args:'; |
252 |
showCR:argList. |
|
253 |
argList size |
|
254 |
] asVarArgBlock. |
|
58 | 255 |
^ b |
256 |
||
257 |
||
258 |
! |
|
259 |
||
97 | 260 |
testBlock1 |
261 |
|b| |
|
262 |
||
263 |
b := self getBlock1. |
|
264 |
||
265 |
b code notNil ifTrue:[ |
|
266 |
Transcript showCR:'before call: *** blocks code is jitted' |
|
267 |
] ifFalse:[ |
|
268 |
Transcript showCR:'before call: blocks code is NOT jitted' |
|
269 |
]. |
|
270 |
b value:nil. |
|
271 |
b code notNil ifTrue:[ |
|
272 |
Transcript showCR:'after call: blocks code is jitted' |
|
273 |
] ifFalse:[ |
|
274 |
Transcript showCR:'after call: *** blocks code is NOT jitted' |
|
275 |
]. |
|
276 |
||
277 |
b value:#foo. |
|
278 |
b value:1. |
|
279 |
b value:2 |
|
280 |
||
281 |
" |
|
282 |
self new testBlock1 |
|
283 |
" |
|
284 |
! |
|
285 |
||
58 | 286 |
testVarArgBlock1 |
287 |
|b| |
|
288 |
||
289 |
b := self getVarArgBlock1. |
|
290 |
||
291 |
b value. |
|
60 | 292 |
b code notNil ifTrue:[ |
95 | 293 |
Transcript showCR:'blocks code is jitted' |
60 | 294 |
] ifFalse:[ |
95 | 295 |
Transcript showCR:'*** blocks code is NOT jitted' |
60 | 296 |
]. |
297 |
||
298 |
b value. |
|
58 | 299 |
b value:'arg1'. |
300 |
b value:'arg1' value:'arg2' value:'arg3' value:'arg4' |
|
301 |
||
302 |
" |
|
95 | 303 |
self new testVarArgBlock1 |
58 | 304 |
" |
305 |
! |
|
306 |
||
307 |
testVarArgBlock2 |
|
308 |
|b| |
|
309 |
||
310 |
b := self getVarArgBlock2. |
|
311 |
||
60 | 312 |
b value. |
313 |
b code notNil ifTrue:[ |
|
95 | 314 |
Transcript showCR:'blocks code is jitted' |
60 | 315 |
] ifFalse:[ |
95 | 316 |
Transcript showCR:'*** blocks code is NOT jitted' |
60 | 317 |
]. |
318 |
||
95 | 319 |
self assert:( b value = #() ). |
320 |
self assert:( (b value:1) = #(1) ). |
|
321 |
self assert:( (b value:1 value:2) = #(1 2) ). |
|
322 |
self assert:( (b value:1 value:2 value:3) = #(1 2 3) ). |
|
323 |
self assert:( (b value:1 value:2 value:3 value:4) = #(1 2 3 4) ). |
|
324 |
self assert:( (b valueWithArguments:#(1 2 3 4)) = #(1 2 3 4) ). |
|
58 | 325 |
|
95 | 326 |
self assert:( (b perform:#value) = #() ). |
327 |
self assert:( (b perform:#'value:' with:1) = #(1) ). |
|
328 |
self assert:( (b perform:#'value:value:' with:1 with:2) = #(1 2) ). |
|
329 |
self assert:( (b perform:#'value:value:value:' with:1 with:2 with:3) = #(1 2 3) ). |
|
330 |
self assert:( (b perform:#'value:value:value:value:' with:1 with:2 with:3 with:4) = #(1 2 3 4) ). |
|
331 |
self assert:( (b perform:#'valueWithArguments:' with:#(1 2 3 4)) = #(1 2 3 4) ). |
|
58 | 332 |
|
333 |
" |
|
95 | 334 |
self new testVarArgBlock2 |
58 | 335 |
" |
336 |
! |
|
337 |
||
338 |
testVarArgBlock3 |
|
339 |
|b| |
|
340 |
||
341 |
b := self getVarArgBlock3. |
|
342 |
||
60 | 343 |
b value. |
344 |
b code notNil ifTrue:[ |
|
95 | 345 |
Transcript showCR:'blocks code is jitted' |
60 | 346 |
] ifFalse:[ |
95 | 347 |
Transcript showCR:'*** blocks code is NOT jitted' |
60 | 348 |
]. |
349 |
||
95 | 350 |
self assert:( b value = 0 ). |
351 |
self assert:( (b value:1) = 1 ). |
|
352 |
self assert:( (b value:1 value:2) = 2 ). |
|
353 |
self assert:( (b value:1 value:2 value:3) = 3 ). |
|
354 |
self assert:( (b value:1 value:2 value:3 value:4) = 4 ). |
|
355 |
self assert:( (b valueWithArguments:#(1 2 3 4)) = 4 ). |
|
58 | 356 |
|
95 | 357 |
self assert:( (b perform:#value) = 0 ). |
358 |
self assert:( (b perform:#'value:' with:1) = 1 ). |
|
359 |
self assert:( (b perform:#'value:value:' with:1 with:2) = 2 ). |
|
360 |
self assert:( (b perform:#'value:value:value:' with:1 with:2 with:3) = 3 ). |
|
361 |
self assert:( (b perform:#'value:value:value:value:' with:1 with:2 with:3 with:4) = 4 ). |
|
362 |
self assert:( (b perform:#'valueWithArguments:' with:#(1 2 3 4)) = 4 ). |
|
58 | 363 |
|
364 |
" |
|
95 | 365 |
self new testVarArgBlock3 |
58 | 366 |
" |
367 |
! |
|
368 |
||
95 | 369 |
xtestAll |
370 |
self testVarArgBlocks. |
|
371 |
||
372 |
" |
|
373 |
self new xtestAll |
|
374 |
" |
|
375 |
! |
|
376 |
||
377 |
xtestVarArgBlocks |
|
58 | 378 |
self testVarArgBlock1. |
379 |
self testVarArgBlock2. |
|
380 |
self testVarArgBlock3. |
|
381 |
! ! |
|
382 |
||
383 |
!BlockTest class methodsFor:'documentation'! |
|
384 |
||
385 |
version |
|
386 |
^ '$Header$' |
|
608 | 387 |
! |
388 |
||
389 |
version_CVS |
|
390 |
^ '$Header$' |
|
58 | 391 |
! ! |