blob: fd6874d6a5a1d0952089c449b7958afaaaa906bc [file] [log] [blame]
Kristian Monsen25f61362010-05-21 11:50:48 +01001// Copyright 2010 the V8 project authors. All rights reserved.
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions are
4// met:
5//
6// * Redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer.
8// * Redistributions in binary form must reproduce the above
9// copyright notice, this list of conditions and the following
10// disclaimer in the documentation and/or other materials provided
11// with the distribution.
12// * Neither the name of Google Inc. nor the names of its
13// contributors may be used to endorse or promote products derived
14// from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28var except = "exception";
29
30var correct_answer_index = 0;
31var correct_answers = [
32 false, false, true, true, false, false, true, true,
33 true, false, false, true, true, false, false, true,
34 false, true, true, false, false, true, true, false,
35 true, true, false, false, true, true, false, false,
36except, except, true, true, except, except, true, true,
37except, except, false, true, except, except, false, true,
38except, except, true, false, except, except, true, false,
39except, except, false, false, except, except, false, false,
40 false, false, except, except, false, false, except, except,
41 true, false, except, except, true, false, except, except,
42 false, true, except, except, false, true, except, except,
43 true, true, except, except, true, true, except, except,
44except, except, except, except, except, except, except, except,
45except, except, except, except, except, except, except, except,
46except, except, except, except, except, except, except, except,
47except, except, except, except, except, except, except, except,
48 false, false, true, true, false, false, true, true,
49 true, false, false, true, false, false, true, true,
50 false, true, true, false, false, true, true, false,
51 true, true, false, false, false, true, true, false,
52except, except, true, true, except, except, true, true,
53except, except, false, true, except, except, true, true,
54except, except, true, false, except, except, true, false,
55except, except, false, false, except, except, true, false,
56 false, false, except, except, false, false, except, except,
57 true, false, except, except, true, false, except, except,
58 false, true, except, except, false, true, except, except,
59 true, true, except, except, true, true, except, except,
60except, except, except, except, except, except, except, except,
61except, except, except, except, except, except, except, except,
62except, except, except, except, except, except, except, except,
63except, except, except, except, except, except, except, except,
64 false, false, true, true, false, true, true, false,
65 true, false, false, true, true, true, false, false,
66 false, true, true, false, false, true, true, false,
67 true, true, false, false, true, true, false, false,
68except, except, true, true, except, except, true, true,
69except, except, false, true, except, except, false, true,
70except, except, true, false, except, except, true, false,
71except, except, false, false, except, except, false, false,
72 false, false, except, except, false, true, except, except,
73 true, false, except, except, true, true, except, except,
74 false, true, except, except, false, true, except, except,
75 true, true, except, except, true, true, except, except,
76except, except, except, except, except, except, except, except,
77except, except, except, except, except, except, except, except,
78except, except, except, except, except, except, except, except,
79except, except, except, except, except, except, except, except,
80 false, false, true, true, false, true, true, false,
81 true, false, false, true, false, true, true, false,
82 false, true, true, false, false, true, true, false,
83 true, true, false, false, false, true, true, false,
84except, except, true, true, except, except, true, true,
85except, except, false, true, except, except, true, true,
86except, except, true, false, except, except, true, false,
87except, except, false, false, except, except, true, false,
88 false, false, except, except, false, true, except, except,
89 true, false, except, except, true, true, except, except,
90 false, true, except, except, false, true, except, except,
91 true, true, except, except, true, true, except, except,
92except, except, except, except, except, except, except, except,
93except, except, except, except, except, except, except, except,
94except, except, except, except, except, except, except, except,
95except, except, except, except, except, except, except, except,
96 false, false, true, true, false, false, true, true,
97 true, false, false, true, false, false, true, true,
98 false, true, true, false, true, true, false, false,
99 true, true, false, false, true, true, false, false,
100except, except, true, true, except, except, true, true,
101except, except, false, true, except, except, true, true,
102except, except, true, false, except, except, false, false,
103except, except, false, false, except, except, false, false,
104 false, false, except, except, false, false, except, except,
105 true, false, except, except, false, false, except, except,
106 false, true, except, except, true, true, except, except,
107 true, true, except, except, true, true, except, except,
108except, except, except, except, except, except, except, except,
109except, except, except, except, except, except, except, except,
110except, except, except, except, except, except, except, except,
111except, except, except, except, except, except, except, except,
112 false, false, true, true, false, false, true, true,
113 true, false, false, true, false, false, true, true,
114 false, true, true, false, true, true, false, false,
115 true, true, false, false, true, true, false, false,
116except, except, true, true, except, except, true, true,
117except, except, false, true, except, except, true, true,
118except, except, true, false, except, except, false, false,
119except, except, false, false, except, except, false, false,
120 false, false, except, except, false, false, except, except,
121 true, false, except, except, false, false, except, except,
122 false, true, except, except, true, true, except, except,
123 true, true, except, except, true, true, except, except,
124except, except, except, except, except, except, except, except,
125except, except, except, except, except, except, except, except,
126except, except, except, except, except, except, except, except,
127except, except, except, except, except, except, except, except,
128 false, false, true, true, true, true, false, false,
129 true, false, false, true, true, true, false, false,
130 false, true, true, false, true, true, false, false,
131 true, true, false, false, true, true, false, false,
132except, except, true, true, except, except, true, true,
133except, except, false, true, except, except, true, true,
134except, except, true, false, except, except, false, false,
135except, except, false, false, except, except, false, false,
136 false, false, except, except, true, true, except, except,
137 true, false, except, except, true, true, except, except,
138 false, true, except, except, true, true, except, except,
139 true, true, except, except, true, true, except, except,
140except, except, except, except, except, except, except, except,
141except, except, except, except, except, except, except, except,
142except, except, except, except, except, except, except, except,
143except, except, except, except, except, except, except, except,
144 false, false, true, true, true, true, false, false,
145 true, false, false, true, true, true, false, false,
146 false, true, true, false, true, true, false, false,
147 true, true, false, false, true, true, false, false,
148except, except, true, true, except, except, true, true,
149except, except, false, true, except, except, true, true,
150except, except, true, false, except, except, false, false,
151except, except, false, false, except, except, false, false,
152 false, false, except, except, true, true, except, except,
153 true, false, except, except, true, true, except, except,
154 false, true, except, except, true, true, except, except,
155 true, true, except, except, true, true, except, except,
156except, except, except, except, except, except, except, except,
157except, except, except, except, except, except, except, except,
158except, except, except, except, except, except, except, except,
159except, except, except, except, except, except, except, except,
160 false, false, true, true, false, false, true, true,
161 true, false, false, true, true, true, false, false,
162 false, true, true, false, false, false, true, true,
163 true, true, false, false, true, true, false, false,
164except, except, true, true, except, except, true, true,
165except, except, false, true, except, except, false, false,
166except, except, true, false, except, except, true, true,
167except, except, false, false, except, except, false, false,
168 false, false, except, except, false, false, except, except,
169 true, false, except, except, true, true, except, except,
170 false, true, except, except, false, false, except, except,
171 true, true, except, except, true, true, except, except,
172except, except, except, except, except, except, except, except,
173except, except, except, except, except, except, except, except,
174except, except, except, except, except, except, except, except,
175except, except, except, except, except, except, except, except,
176 false, false, true, true, false, false, true, true,
177 true, false, false, true, false, false, true, true,
178 false, true, true, false, false, false, true, true,
179 true, true, false, false, false, false, true, true,
180except, except, true, true, except, except, true, true,
181except, except, false, true, except, except, true, true,
182except, except, true, false, except, except, true, true,
183except, except, false, false, except, except, true, true,
184 false, false, except, except, false, false, except, except,
185 true, false, except, except, true, true, except, except,
186 false, true, except, except, false, false, except, except,
187 true, true, except, except, true, true, except, except,
188except, except, except, except, except, except, except, except,
189except, except, except, except, except, except, except, except,
190except, except, except, except, except, except, except, except,
191except, except, except, except, except, except, except, except,
192 false, false, true, true, false, false, true, true,
193 true, false, false, true, true, true, false, false,
194 false, true, true, false, false, false, true, true,
195 true, true, false, false, true, true, false, false,
196except, except, true, true, except, except, true, true,
197except, except, false, true, except, except, false, false,
198except, except, true, false, except, except, true, true,
199except, except, false, false, except, except, false, false,
200 false, false, except, except, false, false, except, except,
201 true, false, except, except, true, true, except, except,
202 false, true, except, except, false, false, except, except,
203 true, true, except, except, true, true, except, except,
204except, except, except, except, except, except, except, except,
205except, except, except, except, except, except, except, except,
206except, except, except, except, except, except, except, except,
207except, except, except, except, except, except, except, except,
208 false, false, true, true, false, false, true, true,
209 true, false, false, true, false, false, true, true,
210 false, true, true, false, false, false, true, true,
211 true, true, false, false, false, false, true, true,
212except, except, true, true, except, except, true, true,
213except, except, false, true, except, except, true, true,
214except, except, true, false, except, except, true, true,
215except, except, false, false, except, except, true, true,
216 false, false, except, except, false, false, except, except,
217 true, false, except, except, true, true, except, except,
218 false, true, except, except, false, false, except, except,
219 true, true, except, except, true, true, except, except,
220except, except, except, except, except, except, except, except,
221except, except, except, except, except, except, except, except,
222except, except, except, except, except, except, except, except,
223except, except, except, except, except, except, except, except,
224 false, false, true, true, false, false, true, true,
225 true, false, false, true, false, false, true, true,
226 false, true, true, false, true, true, false, false,
227 true, true, false, false, true, true, false, false,
228except, except, true, true, except, except, true, true,
229except, except, false, true, except, except, true, true,
230except, except, true, false, except, except, false, false,
231except, except, false, false, except, except, false, false,
232 false, false, except, except, false, false, except, except,
233 true, false, except, except, false, false, except, except,
234 false, true, except, except, true, true, except, except,
235 true, true, except, except, true, true, except, except,
236except, except, except, except, except, except, except, except,
237except, except, except, except, except, except, except, except,
238except, except, except, except, except, except, except, except,
239except, except, except, except, except, except, except, except,
240 false, false, true, true, false, false, true, true,
241 true, false, false, true, false, false, true, true,
242 false, true, true, false, true, true, false, false,
243 true, true, false, false, true, true, false, false,
244except, except, true, true, except, except, true, true,
245except, except, false, true, except, except, true, true,
246except, except, true, false, except, except, false, false,
247except, except, false, false, except, except, false, false,
248 false, false, except, except, false, false, except, except,
249 true, false, except, except, false, false, except, except,
250 false, true, except, except, true, true, except, except,
251 true, true, except, except, true, true, except, except,
252except, except, except, except, except, except, except, except,
253except, except, except, except, except, except, except, except,
254except, except, except, except, except, except, except, except,
255except, except, except, except, except, except, except, except,
256 false, false, true, true, true, true, false, false,
257 true, false, false, true, true, true, false, false,
258 false, true, true, false, true, true, false, false,
259 true, true, false, false, true, true, false, false,
260except, except, true, true, except, except, true, true,
261except, except, false, true, except, except, true, true,
262except, except, true, false, except, except, false, false,
263except, except, false, false, except, except, false, false,
264 false, false, except, except, true, true, except, except,
265 true, false, except, except, true, true, except, except,
266 false, true, except, except, true, true, except, except,
267 true, true, except, except, true, true, except, except,
268except, except, except, except, except, except, except, except,
269except, except, except, except, except, except, except, except,
270except, except, except, except, except, except, except, except,
271except, except, except, except, except, except, except, except,
272 false, false, true, true, true, true, false, false,
273 true, false, false, true, true, true, false, false,
274 false, true, true, false, true, true, false, false,
275 true, true, false, false, true, true, false, false,
276except, except, true, true, except, except, true, true,
277except, except, false, true, except, except, true, true,
278except, except, true, false, except, except, false, false,
279except, except, false, false, except, except, false, false,
280 false, false, except, except, true, true, except, except,
281 true, false, except, except, true, true, except, except,
282 false, true, except, except, true, true, except, except,
283 true, true, except, except, true, true, except, except,
284except, except, except, except, except, except, except, except,
285except, except, except, except, except, except, except, except,
286except, except, except, except, except, except, except, except,
287except, except, except, except, except, except, except, except];
288
289for (var i = 0; i < 256; i++) {
290 Test(i & 1, i & 2, i & 4, i & 8, i & 0x10, i & 0x20, i & 0x40, i & 0x80);
291}
292
293
294function InstanceTest(x, func) {
295 try {
296 var answer = (x instanceof func);
297 assertEquals(correct_answers[correct_answer_index], answer);
298 } catch (e) {
299 assertTrue(/prototype/.test(e));
300 assertEquals(correct_answers[correct_answer_index], except);
301 }
302 correct_answer_index++;
303}
304
305
306function Test(a, b, c, d, e, f, g, h) {
307 var Foo = function() { }
308 var Bar = function() { }
309
310 if (c) Foo.prototype = 12;
311 if (d) Bar.prototype = 13;
312 var x = a ? new Foo() : new Bar();
313 var y = b ? new Foo() : new Bar();
314 InstanceTest(x, Foo);
315 InstanceTest(y, Foo);
316 InstanceTest(x, Bar);
317 InstanceTest(y, Bar);
318 if (e) x.__proto__ = Bar.prototype;
319 if (f) y.__proto__ = Foo.prototype;
320 if (g) {
321 x.__proto__ = y;
322 } else {
323 if (h) y.__proto__ = x
324 }
325 InstanceTest(x, Foo);
326 InstanceTest(y, Foo);
327 InstanceTest(x, Bar);
328 InstanceTest(y, Bar);
329}