Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(295)

Side by Side Diff: test/mjsunit/mjsunit.js

Issue 933863002: [strong] make --use-strong flag work in d8 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/d8.cc ('k') | test/mjsunit/strong/use-strong-flag.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2008 the V8 project authors. All rights reserved. 1 // Copyright 2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 return true; 195 return true;
196 } 196 }
197 197
198 198
199 function deepEquals(a, b) { 199 function deepEquals(a, b) {
200 if (a === b) { 200 if (a === b) {
201 // Check for -0. 201 // Check for -0.
202 if (a === 0) return (1 / a) === (1 / b); 202 if (a === 0) return (1 / a) === (1 / b);
203 return true; 203 return true;
204 } 204 }
205 if (typeof a != typeof b) return false; 205 if (typeof a !== typeof b) return false;
206 if (typeof a == "number") return isNaN(a) && isNaN(b); 206 if (typeof a === "number") return isNaN(a) && isNaN(b);
207 if (typeof a !== "object" && typeof a !== "function") return false; 207 if (typeof a !== "object" && typeof a !== "function") return false;
208 // Neither a nor b is primitive. 208 // Neither a nor b is primitive.
209 var objectClass = classOf(a); 209 var objectClass = classOf(a);
210 if (objectClass !== classOf(b)) return false; 210 if (objectClass !== classOf(b)) return false;
211 if (objectClass === "RegExp") { 211 if (objectClass === "RegExp") {
212 // For RegExp, just compare pattern and flags using its toString. 212 // For RegExp, just compare pattern and flags using its toString.
213 return (a.toString() === b.toString()); 213 return (a.toString() === b.toString());
214 } 214 }
215 // Functions are only identical to themselves. 215 // Functions are only identical to themselves.
216 if (objectClass === "Function") return false; 216 if (objectClass === "Function") return false;
217 if (objectClass === "Array") { 217 if (objectClass === "Array") {
218 var elementCount = 0; 218 var elementCount = 0;
219 if (a.length != b.length) { 219 if (a.length !== b.length) {
220 return false; 220 return false;
221 } 221 }
222 for (var i = 0; i < a.length; i++) { 222 for (var i = 0; i < a.length; i++) {
223 if (!deepEquals(a[i], b[i])) return false; 223 if (!deepEquals(a[i], b[i])) return false;
224 } 224 }
225 return true; 225 return true;
226 } 226 }
227 if (objectClass == "String" || objectClass == "Number" || 227 if (objectClass === "String" || objectClass === "Number" ||
228 objectClass == "Boolean" || objectClass == "Date") { 228 objectClass === "Boolean" || objectClass === "Date") {
229 if (a.valueOf() !== b.valueOf()) return false; 229 if (a.valueOf() !== b.valueOf()) return false;
230 } 230 }
231 return deepObjectEquals(a, b); 231 return deepObjectEquals(a, b);
232 } 232 }
233 233
234 assertSame = function assertSame(expected, found, name_opt) { 234 assertSame = function assertSame(expected, found, name_opt) {
235 // TODO(mstarzinger): We should think about using Harmony's egal operator 235 // TODO(mstarzinger): We should think about using Harmony's egal operator
236 // or the function equivalent Object.is() here. 236 // or the function equivalent Object.is() here.
237 if (found === expected) { 237 if (found === expected) {
238 if (expected !== 0 || (1 / expected) == (1 / found)) return; 238 if (expected !== 0 || (1 / expected) === (1 / found)) return;
239 } else if ((expected !== expected) && (found !== found)) { 239 } else if ((expected !== expected) && (found !== found)) {
240 return; 240 return;
241 } 241 }
242 fail(PrettyPrint(expected), found, name_opt); 242 fail(PrettyPrint(expected), found, name_opt);
243 }; 243 };
244 244
245 245
246 assertEquals = function assertEquals(expected, found, name_opt) { 246 assertEquals = function assertEquals(expected, found, name_opt) {
247 if (!deepEquals(found, expected)) { 247 if (!deepEquals(found, expected)) {
248 fail(PrettyPrint(expected), found, name_opt); 248 fail(PrettyPrint(expected), found, name_opt);
249 } 249 }
250 }; 250 };
251 251
252 252
253 assertEqualsDelta = 253 assertEqualsDelta =
254 function assertEqualsDelta(expected, found, delta, name_opt) { 254 function assertEqualsDelta(expected, found, delta, name_opt) {
255 assertTrue(Math.abs(expected - found) <= delta, name_opt); 255 assertTrue(Math.abs(expected - found) <= delta, name_opt);
256 }; 256 };
257 257
258 258
259 assertArrayEquals = function assertArrayEquals(expected, found, name_opt) { 259 assertArrayEquals = function assertArrayEquals(expected, found, name_opt) {
260 var start = ""; 260 var start = "";
261 if (name_opt) { 261 if (name_opt) {
262 start = name_opt + " - "; 262 start = name_opt + " - ";
263 } 263 }
264 assertEquals(expected.length, found.length, start + "array length"); 264 assertEquals(expected.length, found.length, start + "array length");
265 if (expected.length == found.length) { 265 if (expected.length === found.length) {
266 for (var i = 0; i < expected.length; ++i) { 266 for (var i = 0; i < expected.length; ++i) {
267 assertEquals(expected[i], found[i], 267 assertEquals(expected[i], found[i],
268 start + "array element at index " + i); 268 start + "array element at index " + i);
269 } 269 }
270 } 270 }
271 }; 271 };
272 272
273 273
274 assertPropertiesEqual = function assertPropertiesEqual(expected, found, 274 assertPropertiesEqual = function assertPropertiesEqual(expected, found,
275 name_opt) { 275 name_opt) {
276 // Check properties only. 276 // Check properties only.
277 if (!deepObjectEquals(expected, found)) { 277 if (!deepObjectEquals(expected, found)) {
278 fail(expected, found, name_opt); 278 fail(expected, found, name_opt);
279 } 279 }
280 }; 280 };
281 281
282 282
283 assertToStringEquals = function assertToStringEquals(expected, found, 283 assertToStringEquals = function assertToStringEquals(expected, found,
284 name_opt) { 284 name_opt) {
285 if (expected != String(found)) { 285 if (expected !== String(found)) {
286 fail(expected, found, name_opt); 286 fail(expected, found, name_opt);
287 } 287 }
288 }; 288 };
289 289
290 290
291 assertTrue = function assertTrue(value, name_opt) { 291 assertTrue = function assertTrue(value, name_opt) {
292 assertEquals(true, value, name_opt); 292 assertEquals(true, value, name_opt);
293 }; 293 };
294 294
295 295
(...skipping 12 matching lines...) Expand all
308 assertNotNull = function assertNotNull(value, name_opt) { 308 assertNotNull = function assertNotNull(value, name_opt) {
309 if (value === null) { 309 if (value === null) {
310 fail("not null", value, name_opt); 310 fail("not null", value, name_opt);
311 } 311 }
312 }; 312 };
313 313
314 314
315 assertThrows = function assertThrows(code, type_opt, cause_opt) { 315 assertThrows = function assertThrows(code, type_opt, cause_opt) {
316 var threwException = true; 316 var threwException = true;
317 try { 317 try {
318 if (typeof code == 'function') { 318 if (typeof code === 'function') {
319 code(); 319 code();
320 } else { 320 } else {
321 eval(code); 321 eval(code);
322 } 322 }
323 threwException = false; 323 threwException = false;
324 } catch (e) { 324 } catch (e) {
325 if (typeof type_opt == 'function') { 325 if (typeof type_opt === 'function') {
326 assertInstanceof(e, type_opt); 326 assertInstanceof(e, type_opt);
327 } 327 }
328 if (arguments.length >= 3) { 328 if (arguments.length >= 3) {
329 assertEquals(e.type, cause_opt); 329 assertEquals(e.type, cause_opt);
330 } 330 }
331 // Success. 331 // Success.
332 return; 332 return;
333 } 333 }
334 throw new MjsUnitAssertionError("Did not throw exception"); 334 throw new MjsUnitAssertionError("Did not throw exception");
335 }; 335 };
336 336
337 337
338 assertInstanceof = function assertInstanceof(obj, type) { 338 assertInstanceof = function assertInstanceof(obj, type) {
339 if (!(obj instanceof type)) { 339 if (!(obj instanceof type)) {
340 var actualTypeName = null; 340 var actualTypeName = null;
341 var actualConstructor = Object.getPrototypeOf(obj).constructor; 341 var actualConstructor = Object.getPrototypeOf(obj).constructor;
342 if (typeof actualConstructor == "function") { 342 if (typeof actualConstructor === "function") {
343 actualTypeName = actualConstructor.name || String(actualConstructor); 343 actualTypeName = actualConstructor.name || String(actualConstructor);
344 } 344 }
345 fail("Object <" + PrettyPrint(obj) + "> is not an instance of <" + 345 fail("Object <" + PrettyPrint(obj) + "> is not an instance of <" +
346 (type.name || type) + ">" + 346 (type.name || type) + ">" +
347 (actualTypeName ? " but of < " + actualTypeName + ">" : "")); 347 (actualTypeName ? " but of < " + actualTypeName + ">" : ""));
348 } 348 }
349 }; 349 };
350 350
351 351
352 assertDoesNotThrow = function assertDoesNotThrow(code, name_opt) { 352 assertDoesNotThrow = function assertDoesNotThrow(code, name_opt) {
353 try { 353 try {
354 if (typeof code == 'function') { 354 if (typeof code === 'function') {
355 code(); 355 code();
356 } else { 356 } else {
357 eval(code); 357 eval(code);
358 } 358 }
359 } catch (e) { 359 } catch (e) {
360 fail("threw an exception: ", e.message || e, name_opt); 360 fail("threw an exception: ", e.message || e, name_opt);
361 } 361 }
362 }; 362 };
363 363
364 assertUnreachable = function assertUnreachable(name_opt) { 364 assertUnreachable = function assertUnreachable(name_opt) {
(...skipping 14 matching lines...) Expand all
379 "fun", "sync", "return %GetOptimizationStatus(fun, sync);"); 379 "fun", "sync", "return %GetOptimizationStatus(fun, sync);");
380 } catch (e) { 380 } catch (e) {
381 throw new Error("natives syntax not allowed"); 381 throw new Error("natives syntax not allowed");
382 } 382 }
383 } 383 }
384 return OptimizationStatusImpl(fun, sync_opt); 384 return OptimizationStatusImpl(fun, sync_opt);
385 } 385 }
386 386
387 assertUnoptimized = function assertUnoptimized(fun, sync_opt, name_opt) { 387 assertUnoptimized = function assertUnoptimized(fun, sync_opt, name_opt) {
388 if (sync_opt === undefined) sync_opt = ""; 388 if (sync_opt === undefined) sync_opt = "";
389 assertTrue(OptimizationStatus(fun, sync_opt) != 1, name_opt); 389 assertTrue(OptimizationStatus(fun, sync_opt) !== 1, name_opt);
390 } 390 }
391 391
392 assertOptimized = function assertOptimized(fun, sync_opt, name_opt) { 392 assertOptimized = function assertOptimized(fun, sync_opt, name_opt) {
393 if (sync_opt === undefined) sync_opt = ""; 393 if (sync_opt === undefined) sync_opt = "";
394 assertTrue(OptimizationStatus(fun, sync_opt) != 2, name_opt); 394 assertTrue(OptimizationStatus(fun, sync_opt) !== 2, name_opt);
395 } 395 }
396 396
397 })(); 397 })();
OLDNEW
« no previous file with comments | « src/d8.cc ('k') | test/mjsunit/strong/use-strong-flag.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698