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

Side by Side Diff: test/codegen/expect/DeltaBlue.js

Issue 1153003003: fixes #40, extension methods for primitive types (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 6 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
OLDNEW
1 var DeltaBlue = dart.defineLibrary(DeltaBlue, {}); 1 var DeltaBlue = dart.defineLibrary(DeltaBlue, {});
2 var BenchmarkBase = dart.import(BenchmarkBase); 2 var BenchmarkBase = dart.import(BenchmarkBase);
3 var core = dart.import(core); 3 var core = dart.import(core);
4 (function(exports, BenchmarkBase, core) { 4 (function(exports, BenchmarkBase, core) {
5 'use strict'; 5 'use strict';
6 function main() { 6 function main() {
7 new DeltaBlue().report(); 7 new DeltaBlue().report();
8 } 8 }
9 dart.fn(main); 9 dart.fn(main);
10 class DeltaBlue extends BenchmarkBase.BenchmarkBase { 10 class DeltaBlue extends BenchmarkBase.BenchmarkBase {
11 DeltaBlue() { 11 DeltaBlue() {
12 super.BenchmarkBase("DeltaBlue"); 12 super.BenchmarkBase("DeltaBlue");
13 } 13 }
14 run() { 14 run() {
15 chainTest(100); 15 chainTest(100);
16 projectionTest(100); 16 projectionTest(100);
17 } 17 }
18 } 18 }
19 dart.setSignature(DeltaBlue, { 19 dart.setSignature(DeltaBlue, {
20 constructors: () => ({DeltaBlue: [DeltaBlue, []]}) 20 constructors: () => ({DeltaBlue: [DeltaBlue, []]})
21 }); 21 });
22 class Strength extends core.Object { 22 class Strength extends core.Object {
23 Strength(value, name) { 23 Strength(value, name) {
24 this.value = value; 24 this.value = value;
25 this.name = name; 25 this.name = name;
26 } 26 }
27 nextWeaker() { 27 nextWeaker() {
28 return dart.const(dart.setType([STRONG_PREFERRED, PREFERRED, STRONG_DEFAUL T, NORMAL, WEAK_DEFAULT, WEAKEST], core.List$(Strength)))[core.$get](this.value) ; 28 return dart.const(dart.list([STRONG_PREFERRED, PREFERRED, STRONG_DEFAULT, NORMAL, WEAK_DEFAULT, WEAKEST], Strength))[dartx.get](this.value);
29 } 29 }
30 static stronger(s1, s2) { 30 static stronger(s1, s2) {
31 return dart.notNull(s1.value) < dart.notNull(s2.value); 31 return dart.notNull(s1.value) < dart.notNull(s2.value);
32 } 32 }
33 static weaker(s1, s2) { 33 static weaker(s1, s2) {
34 return dart.notNull(s1.value) > dart.notNull(s2.value); 34 return dart.notNull(s1.value) > dart.notNull(s2.value);
35 } 35 }
36 static weakest(s1, s2) { 36 static weakest(s1, s2) {
37 return Strength.weaker(s1, s2) ? s1 : s2; 37 return Strength.weaker(s1, s2) ? s1 : s2;
38 } 38 }
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 execute() { 305 execute() {
306 this.output().value = this.input().value; 306 this.output().value = this.input().value;
307 } 307 }
308 } 308 }
309 dart.setSignature(EqualityConstraint, { 309 dart.setSignature(EqualityConstraint, {
310 constructors: () => ({EqualityConstraint: [EqualityConstraint, [Variable, Va riable, Strength]]}), 310 constructors: () => ({EqualityConstraint: [EqualityConstraint, [Variable, Va riable, Strength]]}),
311 methods: () => ({execute: [dart.void, []]}) 311 methods: () => ({execute: [dart.void, []]})
312 }); 312 });
313 class Variable extends core.Object { 313 class Variable extends core.Object {
314 Variable(name, value) { 314 Variable(name, value) {
315 this.constraints = dart.setType([], core.List$(Constraint)); 315 this.constraints = dart.list([], Constraint);
316 this.name = name; 316 this.name = name;
317 this.value = value; 317 this.value = value;
318 this.determinedBy = null; 318 this.determinedBy = null;
319 this.mark = 0; 319 this.mark = 0;
320 this.walkStrength = WEAKEST; 320 this.walkStrength = WEAKEST;
321 this.stay = true; 321 this.stay = true;
322 } 322 }
323 addConstraint(c) { 323 addConstraint(c) {
324 this.constraints[core.$add](c); 324 this.constraints[dartx.add](c);
325 } 325 }
326 removeConstraint(c) { 326 removeConstraint(c) {
327 this.constraints[core.$remove](c); 327 this.constraints[dartx.remove](c);
328 if (dart.equals(this.determinedBy, c)) 328 if (dart.equals(this.determinedBy, c))
329 this.determinedBy = null; 329 this.determinedBy = null;
330 } 330 }
331 } 331 }
332 dart.setSignature(Variable, { 332 dart.setSignature(Variable, {
333 constructors: () => ({Variable: [Variable, [core.String, core.int]]}), 333 constructors: () => ({Variable: [Variable, [core.String, core.int]]}),
334 methods: () => ({ 334 methods: () => ({
335 addConstraint: [dart.void, [Constraint]], 335 addConstraint: [dart.void, [Constraint]],
336 removeConstraint: [dart.void, [Constraint]] 336 removeConstraint: [dart.void, [Constraint]]
337 }) 337 })
338 }); 338 });
339 class Planner extends core.Object { 339 class Planner extends core.Object {
340 Planner() { 340 Planner() {
341 this.currentMark = 0; 341 this.currentMark = 0;
342 } 342 }
343 incrementalAdd(c) { 343 incrementalAdd(c) {
344 let mark = this.newMark(); 344 let mark = this.newMark();
345 for (let overridden = c.satisfy(mark); overridden != null; overridden = ov erridden.satisfy(mark)) 345 for (let overridden = c.satisfy(mark); overridden != null; overridden = ov erridden.satisfy(mark))
346 ; 346 ;
347 } 347 }
348 incrementalRemove(c) { 348 incrementalRemove(c) {
349 let out = c.output(); 349 let out = c.output();
350 c.markUnsatisfied(); 350 c.markUnsatisfied();
351 c.removeFromGraph(); 351 c.removeFromGraph();
352 let unsatisfied = this.removePropagateFrom(out); 352 let unsatisfied = this.removePropagateFrom(out);
353 let strength = REQUIRED; 353 let strength = REQUIRED;
354 do { 354 do {
355 for (let i = 0; dart.notNull(i) < dart.notNull(unsatisfied[core.$length] ); i = dart.notNull(i) + 1) { 355 for (let i = 0; dart.notNull(i) < dart.notNull(unsatisfied.length); i = dart.notNull(i) + 1) {
356 let u = unsatisfied[core.$get](i); 356 let u = unsatisfied[dartx.get](i);
357 if (dart.equals(u.strength, strength)) 357 if (dart.equals(u.strength, strength))
358 this.incrementalAdd(u); 358 this.incrementalAdd(u);
359 } 359 }
360 strength = strength.nextWeaker(); 360 strength = strength.nextWeaker();
361 } while (!dart.equals(strength, WEAKEST)); 361 } while (!dart.equals(strength, WEAKEST));
362 } 362 }
363 newMark() { 363 newMark() {
364 return this.currentMark = dart.notNull(this.currentMark) + 1; 364 return this.currentMark = dart.notNull(this.currentMark) + 1;
365 } 365 }
366 makePlan(sources) { 366 makePlan(sources) {
367 let mark = this.newMark(); 367 let mark = this.newMark();
368 let plan = new Plan(); 368 let plan = new Plan();
369 let todo = sources; 369 let todo = sources;
370 while (dart.notNull(todo[core.$length]) > 0) { 370 while (dart.notNull(todo.length) > 0) {
371 let c = todo[core.$removeLast](); 371 let c = todo[dartx.removeLast]();
372 if (c.output().mark != mark && dart.notNull(c.inputsKnown(mark))) { 372 if (c.output().mark != mark && dart.notNull(c.inputsKnown(mark))) {
373 plan.addConstraint(c); 373 plan.addConstraint(c);
374 c.output().mark = mark; 374 c.output().mark = mark;
375 this.addConstraintsConsumingTo(c.output(), todo); 375 this.addConstraintsConsumingTo(c.output(), todo);
376 } 376 }
377 } 377 }
378 return plan; 378 return plan;
379 } 379 }
380 extractPlanFromConstraints(constraints) { 380 extractPlanFromConstraints(constraints) {
381 let sources = dart.setType([], core.List$(Constraint)); 381 let sources = dart.list([], Constraint);
382 for (let i = 0; dart.notNull(i) < dart.notNull(constraints[core.$length]); i = dart.notNull(i) + 1) { 382 for (let i = 0; dart.notNull(i) < dart.notNull(constraints.length); i = da rt.notNull(i) + 1) {
383 let c = constraints[core.$get](i); 383 let c = constraints[dartx.get](i);
384 if (dart.notNull(c.isInput()) && dart.notNull(c.isSatisfied())) 384 if (dart.notNull(c.isInput()) && dart.notNull(c.isSatisfied()))
385 sources[core.$add](c); 385 sources[dartx.add](c);
386 } 386 }
387 return this.makePlan(sources); 387 return this.makePlan(sources);
388 } 388 }
389 addPropagate(c, mark) { 389 addPropagate(c, mark) {
390 let todo = dart.setType([c], core.List$(Constraint)); 390 let todo = dart.list([c], Constraint);
391 while (dart.notNull(todo[core.$length]) > 0) { 391 while (dart.notNull(todo.length) > 0) {
392 let d = todo[core.$removeLast](); 392 let d = todo[dartx.removeLast]();
393 if (d.output().mark == mark) { 393 if (d.output().mark == mark) {
394 this.incrementalRemove(c); 394 this.incrementalRemove(c);
395 return false; 395 return false;
396 } 396 }
397 d.recalculate(); 397 d.recalculate();
398 this.addConstraintsConsumingTo(d.output(), todo); 398 this.addConstraintsConsumingTo(d.output(), todo);
399 } 399 }
400 return true; 400 return true;
401 } 401 }
402 removePropagateFrom(out) { 402 removePropagateFrom(out) {
403 out.determinedBy = null; 403 out.determinedBy = null;
404 out.walkStrength = WEAKEST; 404 out.walkStrength = WEAKEST;
405 out.stay = true; 405 out.stay = true;
406 let unsatisfied = dart.setType([], core.List$(Constraint)); 406 let unsatisfied = dart.list([], Constraint);
407 let todo = dart.setType([out], core.List$(Variable)); 407 let todo = dart.list([out], Variable);
408 while (dart.notNull(todo[core.$length]) > 0) { 408 while (dart.notNull(todo.length) > 0) {
409 let v = todo[core.$removeLast](); 409 let v = todo[dartx.removeLast]();
410 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[core.$lengt h]); i = dart.notNull(i) + 1) { 410 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints.length); i = dart.notNull(i) + 1) {
411 let c = v.constraints[core.$get](i); 411 let c = v.constraints[dartx.get](i);
412 if (!dart.notNull(c.isSatisfied())) 412 if (!dart.notNull(c.isSatisfied()))
413 unsatisfied[core.$add](c); 413 unsatisfied[dartx.add](c);
414 } 414 }
415 let determining = v.determinedBy; 415 let determining = v.determinedBy;
416 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[core.$lengt h]); i = dart.notNull(i) + 1) { 416 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints.length); i = dart.notNull(i) + 1) {
417 let next = v.constraints[core.$get](i); 417 let next = v.constraints[dartx.get](i);
418 if (dart.notNull(!dart.equals(next, determining)) && dart.notNull(next .isSatisfied())) { 418 if (dart.notNull(!dart.equals(next, determining)) && dart.notNull(next .isSatisfied())) {
419 next.recalculate(); 419 next.recalculate();
420 todo[core.$add](next.output()); 420 todo[dartx.add](next.output());
421 } 421 }
422 } 422 }
423 } 423 }
424 return unsatisfied; 424 return unsatisfied;
425 } 425 }
426 addConstraintsConsumingTo(v, coll) { 426 addConstraintsConsumingTo(v, coll) {
427 let determining = v.determinedBy; 427 let determining = v.determinedBy;
428 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[core.$length] ); i = dart.notNull(i) + 1) { 428 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints.length); i = dart.notNull(i) + 1) {
429 let c = v.constraints[core.$get](i); 429 let c = v.constraints[dartx.get](i);
430 if (dart.notNull(!dart.equals(c, determining)) && dart.notNull(c.isSatis fied())) 430 if (dart.notNull(!dart.equals(c, determining)) && dart.notNull(c.isSatis fied()))
431 coll[core.$add](c); 431 coll[dartx.add](c);
432 } 432 }
433 } 433 }
434 } 434 }
435 dart.setSignature(Planner, { 435 dart.setSignature(Planner, {
436 methods: () => ({ 436 methods: () => ({
437 incrementalAdd: [dart.void, [Constraint]], 437 incrementalAdd: [dart.void, [Constraint]],
438 incrementalRemove: [dart.void, [Constraint]], 438 incrementalRemove: [dart.void, [Constraint]],
439 newMark: [core.int, []], 439 newMark: [core.int, []],
440 makePlan: [Plan, [core.List$(Constraint)]], 440 makePlan: [Plan, [core.List$(Constraint)]],
441 extractPlanFromConstraints: [Plan, [core.List$(Constraint)]], 441 extractPlanFromConstraints: [Plan, [core.List$(Constraint)]],
442 addPropagate: [core.bool, [Constraint, core.int]], 442 addPropagate: [core.bool, [Constraint, core.int]],
443 removePropagateFrom: [core.List$(Constraint), [Variable]], 443 removePropagateFrom: [core.List$(Constraint), [Variable]],
444 addConstraintsConsumingTo: [dart.void, [Variable, core.List$(Constraint)]] 444 addConstraintsConsumingTo: [dart.void, [Variable, core.List$(Constraint)]]
445 }) 445 })
446 }); 446 });
447 class Plan extends core.Object { 447 class Plan extends core.Object {
448 Plan() { 448 Plan() {
449 this.list = dart.setType([], core.List$(Constraint)); 449 this.list = dart.list([], Constraint);
450 } 450 }
451 addConstraint(c) { 451 addConstraint(c) {
452 this.list[core.$add](c); 452 this.list[dartx.add](c);
453 } 453 }
454 size() { 454 size() {
455 return this.list[core.$length]; 455 return this.list.length;
456 } 456 }
457 execute() { 457 execute() {
458 for (let i = 0; dart.notNull(i) < dart.notNull(this.list[core.$length]); i = dart.notNull(i) + 1) { 458 for (let i = 0; dart.notNull(i) < dart.notNull(this.list.length); i = dart .notNull(i) + 1) {
459 this.list[core.$get](i).execute(); 459 this.list[dartx.get](i).execute();
460 } 460 }
461 } 461 }
462 } 462 }
463 dart.setSignature(Plan, { 463 dart.setSignature(Plan, {
464 methods: () => ({ 464 methods: () => ({
465 addConstraint: [dart.void, [Constraint]], 465 addConstraint: [dart.void, [Constraint]],
466 size: [core.int, []], 466 size: [core.int, []],
467 execute: [dart.void, []] 467 execute: [dart.void, []]
468 }) 468 })
469 }); 469 });
470 function chainTest(n) { 470 function chainTest(n) {
471 exports.planner = new Planner(); 471 exports.planner = new Planner();
472 let prev = null, first = null, last = null; 472 let prev = null, first = null, last = null;
473 for (let i = 0; dart.notNull(i) <= dart.notNull(n); i = dart.notNull(i) + 1) { 473 for (let i = 0; dart.notNull(i) <= dart.notNull(n); i = dart.notNull(i) + 1) {
474 let v = new Variable("v", 0); 474 let v = new Variable("v", 0);
475 if (prev != null) 475 if (prev != null)
476 new EqualityConstraint(prev, v, REQUIRED); 476 new EqualityConstraint(prev, v, REQUIRED);
477 if (i == 0) 477 if (i == 0)
478 first = v; 478 first = v;
479 if (i == n) 479 if (i == n)
480 last = v; 480 last = v;
481 prev = v; 481 prev = v;
482 } 482 }
483 new StayConstraint(last, STRONG_DEFAULT); 483 new StayConstraint(last, STRONG_DEFAULT);
484 let edit = new EditConstraint(first, PREFERRED); 484 let edit = new EditConstraint(first, PREFERRED);
485 let plan = exports.planner.extractPlanFromConstraints(dart.setType([edit], c ore.List$(Constraint))); 485 let plan = exports.planner.extractPlanFromConstraints(dart.list([edit], Cons traint));
486 for (let i = 0; dart.notNull(i) < 100; i = dart.notNull(i) + 1) { 486 for (let i = 0; dart.notNull(i) < 100; i = dart.notNull(i) + 1) {
487 first.value = i; 487 first.value = i;
488 plan.execute(); 488 plan.execute();
489 if (last.value != i) { 489 if (last.value != i) {
490 core.print("Chain test failed:"); 490 core.print("Chain test failed:");
491 core.print(`Expected last value to be ${i} but it was ${last.value}.`); 491 core.print(`Expected last value to be ${i} but it was ${last.value}.`);
492 } 492 }
493 } 493 }
494 } 494 }
495 dart.fn(chainTest, dart.void, [core.int]); 495 dart.fn(chainTest, dart.void, [core.int]);
496 function projectionTest(n) { 496 function projectionTest(n) {
497 exports.planner = new Planner(); 497 exports.planner = new Planner();
498 let scale = new Variable("scale", 10); 498 let scale = new Variable("scale", 10);
499 let offset = new Variable("offset", 1000); 499 let offset = new Variable("offset", 1000);
500 let src = null, dst = null; 500 let src = null, dst = null;
501 let dests = dart.setType([], core.List$(Variable)); 501 let dests = dart.list([], Variable);
502 for (let i = 0; dart.notNull(i) < dart.notNull(n); i = dart.notNull(i) + 1) { 502 for (let i = 0; dart.notNull(i) < dart.notNull(n); i = dart.notNull(i) + 1) {
503 src = new Variable("src", i); 503 src = new Variable("src", i);
504 dst = new Variable("dst", i); 504 dst = new Variable("dst", i);
505 dests[core.$add](dst); 505 dests[dartx.add](dst);
506 new StayConstraint(src, NORMAL); 506 new StayConstraint(src, NORMAL);
507 new ScaleConstraint(src, scale, offset, dst, REQUIRED); 507 new ScaleConstraint(src, scale, offset, dst, REQUIRED);
508 } 508 }
509 change(src, 17); 509 change(src, 17);
510 if (dst.value != 1170) 510 if (dst.value != 1170)
511 core.print("Projection 1 failed"); 511 core.print("Projection 1 failed");
512 change(dst, 1050); 512 change(dst, 1050);
513 if (src.value != 5) 513 if (src.value != 5)
514 core.print("Projection 2 failed"); 514 core.print("Projection 2 failed");
515 change(scale, 5); 515 change(scale, 5);
516 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) { 516 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) {
517 if (dests[core.$get](i).value != dart.notNull(i) * 5 + 1000) 517 if (dests[dartx.get](i).value != dart.notNull(i) * 5 + 1000)
518 core.print("Projection 3 failed"); 518 core.print("Projection 3 failed");
519 } 519 }
520 change(offset, 2000); 520 change(offset, 2000);
521 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) { 521 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) {
522 if (dests[core.$get](i).value != dart.notNull(i) * 5 + 2000) 522 if (dests[dartx.get](i).value != dart.notNull(i) * 5 + 2000)
523 core.print("Projection 4 failed"); 523 core.print("Projection 4 failed");
524 } 524 }
525 } 525 }
526 dart.fn(projectionTest, dart.void, [core.int]); 526 dart.fn(projectionTest, dart.void, [core.int]);
527 function change(v, newValue) { 527 function change(v, newValue) {
528 let edit = new EditConstraint(v, PREFERRED); 528 let edit = new EditConstraint(v, PREFERRED);
529 let plan = exports.planner.extractPlanFromConstraints(dart.setType([edit], c ore.List$(EditConstraint))); 529 let plan = exports.planner.extractPlanFromConstraints(dart.list([edit], Edit Constraint));
530 for (let i = 0; dart.notNull(i) < 10; i = dart.notNull(i) + 1) { 530 for (let i = 0; dart.notNull(i) < 10; i = dart.notNull(i) + 1) {
531 v.value = newValue; 531 v.value = newValue;
532 plan.execute(); 532 plan.execute();
533 } 533 }
534 edit.destroyConstraint(); 534 edit.destroyConstraint();
535 } 535 }
536 dart.fn(change, dart.void, [Variable, core.int]); 536 dart.fn(change, dart.void, [Variable, core.int]);
537 exports.planner = null; 537 exports.planner = null;
538 // Exports: 538 // Exports:
539 exports.main = main; 539 exports.main = main;
(...skipping 16 matching lines...) Expand all
556 exports.BinaryConstraint = BinaryConstraint; 556 exports.BinaryConstraint = BinaryConstraint;
557 exports.ScaleConstraint = ScaleConstraint; 557 exports.ScaleConstraint = ScaleConstraint;
558 exports.EqualityConstraint = EqualityConstraint; 558 exports.EqualityConstraint = EqualityConstraint;
559 exports.Variable = Variable; 559 exports.Variable = Variable;
560 exports.Planner = Planner; 560 exports.Planner = Planner;
561 exports.Plan = Plan; 561 exports.Plan = Plan;
562 exports.chainTest = chainTest; 562 exports.chainTest = chainTest;
563 exports.projectionTest = projectionTest; 563 exports.projectionTest = projectionTest;
564 exports.change = change; 564 exports.change = change;
565 })(DeltaBlue, BenchmarkBase, core); 565 })(DeltaBlue, BenchmarkBase, core);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698