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

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

Issue 1059583002: Extension method support to move us closer to a valid List implementation. (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 8 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; 1 var DeltaBlue;
2 (function(exports) { 2 (function(exports) {
3 'use strict'; 3 'use strict';
4 // Function main: () → dynamic 4 // Function main: () → dynamic
5 function main() { 5 function main() {
6 new DeltaBlue().report(); 6 new DeltaBlue().report();
7 } 7 }
8 class DeltaBlue extends BenchmarkBase.BenchmarkBase { 8 class DeltaBlue extends BenchmarkBase.BenchmarkBase {
9 DeltaBlue() { 9 DeltaBlue() {
10 super.BenchmarkBase("DeltaBlue"); 10 super.BenchmarkBase("DeltaBlue");
11 } 11 }
12 run() { 12 run() {
13 chainTest(100); 13 chainTest(100);
14 projectionTest(100); 14 projectionTest(100);
15 } 15 }
16 } 16 }
17 class Strength extends core.Object { 17 class Strength extends core.Object {
18 Strength(value, name) { 18 Strength(value, name) {
19 this.value = value; 19 this.value = value;
20 this.name = name; 20 this.name = name;
21 } 21 }
22 nextWeaker() { 22 nextWeaker() {
23 return /* Unimplemented const */new core.List$(Strength).from([STRONG_PREF ERRED, PREFERRED, STRONG_DEFAULT, NORMAL, WEAK_DEFAULT, WEAKEST]).get(this.value ); 23 return /* Unimplemented const */new core.List$(Strength).from([STRONG_PREF ERRED, PREFERRED, STRONG_DEFAULT, NORMAL, WEAK_DEFAULT, WEAKEST])[core.$get](thi s.value);
24 } 24 }
25 static stronger(s1, s2) { 25 static stronger(s1, s2) {
26 return dart.notNull(s1.value) < dart.notNull(s2.value); 26 return dart.notNull(s1.value) < dart.notNull(s2.value);
27 } 27 }
28 static weaker(s1, s2) { 28 static weaker(s1, s2) {
29 return dart.notNull(s1.value) > dart.notNull(s2.value); 29 return dart.notNull(s1.value) > dart.notNull(s2.value);
30 } 30 }
31 static weakest(s1, s2) { 31 static weakest(s1, s2) {
32 return Strength.weaker(s1, s2) ? s1 : s2; 32 return Strength.weaker(s1, s2) ? s1 : s2;
33 } 33 }
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 Variable(name, value) { 244 Variable(name, value) {
245 this.constraints = new core.List$(Constraint).from([]); 245 this.constraints = new core.List$(Constraint).from([]);
246 this.name = name; 246 this.name = name;
247 this.value = value; 247 this.value = value;
248 this.determinedBy = null; 248 this.determinedBy = null;
249 this.mark = 0; 249 this.mark = 0;
250 this.walkStrength = WEAKEST; 250 this.walkStrength = WEAKEST;
251 this.stay = true; 251 this.stay = true;
252 } 252 }
253 addConstraint(c) { 253 addConstraint(c) {
254 this.constraints.add(c); 254 this.constraints[core.$add](c);
255 } 255 }
256 removeConstraint(c) { 256 removeConstraint(c) {
257 this.constraints.remove(c); 257 this.constraints[core.$remove](c);
258 if (dart.equals(this.determinedBy, c)) 258 if (dart.equals(this.determinedBy, c))
259 this.determinedBy = null; 259 this.determinedBy = null;
260 } 260 }
261 } 261 }
262 class Planner extends core.Object { 262 class Planner extends core.Object {
263 Planner() { 263 Planner() {
264 this.currentMark = 0; 264 this.currentMark = 0;
265 } 265 }
266 incrementalAdd(c) { 266 incrementalAdd(c) {
267 let mark = this.newMark(); 267 let mark = this.newMark();
268 for (let overridden = c.satisfy(mark); overridden != null; overridden = ov erridden.satisfy(mark)) 268 for (let overridden = c.satisfy(mark); overridden != null; overridden = ov erridden.satisfy(mark))
269 ; 269 ;
270 } 270 }
271 incrementalRemove(c) { 271 incrementalRemove(c) {
272 let out = c.output(); 272 let out = c.output();
273 c.markUnsatisfied(); 273 c.markUnsatisfied();
274 c.removeFromGraph(); 274 c.removeFromGraph();
275 let unsatisfied = this.removePropagateFrom(out); 275 let unsatisfied = this.removePropagateFrom(out);
276 let strength = REQUIRED; 276 let strength = REQUIRED;
277 do { 277 do {
278 for (let i = 0; dart.notNull(i) < dart.notNull(unsatisfied.length); i = dart.notNull(i) + 1) { 278 for (let i = 0; dart.notNull(i) < dart.notNull(unsatisfied[core.$length] ); i = dart.notNull(i) + 1) {
279 let u = unsatisfied.get(i); 279 let u = unsatisfied[core.$get](i);
280 if (dart.equals(u.strength, strength)) 280 if (dart.equals(u.strength, strength))
281 this.incrementalAdd(u); 281 this.incrementalAdd(u);
282 } 282 }
283 strength = strength.nextWeaker(); 283 strength = strength.nextWeaker();
284 } while (!dart.equals(strength, WEAKEST)); 284 } while (!dart.equals(strength, WEAKEST));
285 } 285 }
286 newMark() { 286 newMark() {
287 return this.currentMark = dart.notNull(this.currentMark) + 1; 287 return this.currentMark = dart.notNull(this.currentMark) + 1;
288 } 288 }
289 makePlan(sources) { 289 makePlan(sources) {
290 let mark = this.newMark(); 290 let mark = this.newMark();
291 let plan = new Plan(); 291 let plan = new Plan();
292 let todo = sources; 292 let todo = sources;
293 while (dart.notNull(todo.length) > 0) { 293 while (dart.notNull(todo[core.$length]) > 0) {
294 let c = todo.removeLast(); 294 let c = todo[core.$removeLast]();
295 if (c.output().mark != mark && dart.notNull(c.inputsKnown(mark))) { 295 if (c.output().mark != mark && dart.notNull(c.inputsKnown(mark))) {
296 plan.addConstraint(c); 296 plan.addConstraint(c);
297 c.output().mark = mark; 297 c.output().mark = mark;
298 this.addConstraintsConsumingTo(c.output(), todo); 298 this.addConstraintsConsumingTo(c.output(), todo);
299 } 299 }
300 } 300 }
301 return plan; 301 return plan;
302 } 302 }
303 extractPlanFromConstraints(constraints) { 303 extractPlanFromConstraints(constraints) {
304 let sources = new core.List$(Constraint).from([]); 304 let sources = new core.List$(Constraint).from([]);
305 for (let i = 0; dart.notNull(i) < dart.notNull(constraints.length); i = da rt.notNull(i) + 1) { 305 for (let i = 0; dart.notNull(i) < dart.notNull(constraints[core.$length]); i = dart.notNull(i) + 1) {
306 let c = constraints.get(i); 306 let c = constraints[core.$get](i);
307 if (dart.notNull(c.isInput()) && dart.notNull(c.isSatisfied())) 307 if (dart.notNull(c.isInput()) && dart.notNull(c.isSatisfied()))
308 sources.add(c); 308 sources[core.$add](c);
309 } 309 }
310 return this.makePlan(sources); 310 return this.makePlan(sources);
311 } 311 }
312 addPropagate(c, mark) { 312 addPropagate(c, mark) {
313 let todo = new core.List$(Constraint).from([c]); 313 let todo = new core.List$(Constraint).from([c]);
314 while (dart.notNull(todo.length) > 0) { 314 while (dart.notNull(todo[core.$length]) > 0) {
315 let d = todo.removeLast(); 315 let d = todo[core.$removeLast]();
316 if (d.output().mark == mark) { 316 if (d.output().mark == mark) {
317 this.incrementalRemove(c); 317 this.incrementalRemove(c);
318 return false; 318 return false;
319 } 319 }
320 d.recalculate(); 320 d.recalculate();
321 this.addConstraintsConsumingTo(d.output(), todo); 321 this.addConstraintsConsumingTo(d.output(), todo);
322 } 322 }
323 return true; 323 return true;
324 } 324 }
325 removePropagateFrom(out) { 325 removePropagateFrom(out) {
326 out.determinedBy = null; 326 out.determinedBy = null;
327 out.walkStrength = WEAKEST; 327 out.walkStrength = WEAKEST;
328 out.stay = true; 328 out.stay = true;
329 let unsatisfied = new core.List$(Constraint).from([]); 329 let unsatisfied = new core.List$(Constraint).from([]);
330 let todo = new core.List$(Variable).from([out]); 330 let todo = new core.List$(Variable).from([out]);
331 while (dart.notNull(todo.length) > 0) { 331 while (dart.notNull(todo[core.$length]) > 0) {
332 let v = todo.removeLast(); 332 let v = todo[core.$removeLast]();
333 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints.length); i = dart.notNull(i) + 1) { 333 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[core.$lengt h]); i = dart.notNull(i) + 1) {
334 let c = v.constraints.get(i); 334 let c = v.constraints[core.$get](i);
335 if (!dart.notNull(c.isSatisfied())) 335 if (!dart.notNull(c.isSatisfied()))
336 unsatisfied.add(c); 336 unsatisfied[core.$add](c);
337 } 337 }
338 let determining = v.determinedBy; 338 let determining = v.determinedBy;
339 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints.length); i = dart.notNull(i) + 1) { 339 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[core.$lengt h]); i = dart.notNull(i) + 1) {
340 let next = v.constraints.get(i); 340 let next = v.constraints[core.$get](i);
341 if (dart.notNull(!dart.equals(next, determining)) && dart.notNull(next .isSatisfied())) { 341 if (dart.notNull(!dart.equals(next, determining)) && dart.notNull(next .isSatisfied())) {
342 next.recalculate(); 342 next.recalculate();
343 todo.add(next.output()); 343 todo[core.$add](next.output());
344 } 344 }
345 } 345 }
346 } 346 }
347 return unsatisfied; 347 return unsatisfied;
348 } 348 }
349 addConstraintsConsumingTo(v, coll) { 349 addConstraintsConsumingTo(v, coll) {
350 let determining = v.determinedBy; 350 let determining = v.determinedBy;
351 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints.length); i = dart.notNull(i) + 1) { 351 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[core.$length] ); i = dart.notNull(i) + 1) {
352 let c = v.constraints.get(i); 352 let c = v.constraints[core.$get](i);
353 if (dart.notNull(!dart.equals(c, determining)) && dart.notNull(c.isSatis fied())) 353 if (dart.notNull(!dart.equals(c, determining)) && dart.notNull(c.isSatis fied()))
354 coll.add(c); 354 coll[core.$add](c);
355 } 355 }
356 } 356 }
357 } 357 }
358 class Plan extends core.Object { 358 class Plan extends core.Object {
359 Plan() { 359 Plan() {
360 this.list = new core.List$(Constraint).from([]); 360 this.list = new core.List$(Constraint).from([]);
361 } 361 }
362 addConstraint(c) { 362 addConstraint(c) {
363 this.list.add(c); 363 this.list[core.$add](c);
364 } 364 }
365 size() { 365 size() {
366 return this.list.length; 366 return this.list[core.$length];
367 } 367 }
368 execute() { 368 execute() {
369 for (let i = 0; dart.notNull(i) < dart.notNull(this.list.length); i = dart .notNull(i) + 1) { 369 for (let i = 0; dart.notNull(i) < dart.notNull(this.list[core.$length]); i = dart.notNull(i) + 1) {
370 this.list.get(i).execute(); 370 this.list[core.$get](i).execute();
371 } 371 }
372 } 372 }
373 } 373 }
374 // Function chainTest: (int) → void 374 // Function chainTest: (int) → void
375 function chainTest(n) { 375 function chainTest(n) {
376 exports.planner = new Planner(); 376 exports.planner = new Planner();
377 let prev = null, first = null, last = null; 377 let prev = null, first = null, last = null;
378 for (let i = 0; dart.notNull(i) <= dart.notNull(n); i = dart.notNull(i) + 1) { 378 for (let i = 0; dart.notNull(i) <= dart.notNull(n); i = dart.notNull(i) + 1) {
379 let v = new Variable("v", 0); 379 let v = new Variable("v", 0);
380 if (prev != null) 380 if (prev != null)
(...skipping 19 matching lines...) Expand all
400 // Function projectionTest: (int) → void 400 // Function projectionTest: (int) → void
401 function projectionTest(n) { 401 function projectionTest(n) {
402 exports.planner = new Planner(); 402 exports.planner = new Planner();
403 let scale = new Variable("scale", 10); 403 let scale = new Variable("scale", 10);
404 let offset = new Variable("offset", 1000); 404 let offset = new Variable("offset", 1000);
405 let src = null, dst = null; 405 let src = null, dst = null;
406 let dests = new core.List$(Variable).from([]); 406 let dests = new core.List$(Variable).from([]);
407 for (let i = 0; dart.notNull(i) < dart.notNull(n); i = dart.notNull(i) + 1) { 407 for (let i = 0; dart.notNull(i) < dart.notNull(n); i = dart.notNull(i) + 1) {
408 src = new Variable("src", i); 408 src = new Variable("src", i);
409 dst = new Variable("dst", i); 409 dst = new Variable("dst", i);
410 dests.add(dst); 410 dests[core.$add](dst);
411 new StayConstraint(src, NORMAL); 411 new StayConstraint(src, NORMAL);
412 new ScaleConstraint(src, scale, offset, dst, REQUIRED); 412 new ScaleConstraint(src, scale, offset, dst, REQUIRED);
413 } 413 }
414 change(src, 17); 414 change(src, 17);
415 if (dst.value != 1170) 415 if (dst.value != 1170)
416 core.print("Projection 1 failed"); 416 core.print("Projection 1 failed");
417 change(dst, 1050); 417 change(dst, 1050);
418 if (src.value != 5) 418 if (src.value != 5)
419 core.print("Projection 2 failed"); 419 core.print("Projection 2 failed");
420 change(scale, 5); 420 change(scale, 5);
421 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) { 421 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) {
422 if (dests.get(i).value != dart.notNull(i) * 5 + 1000) 422 if (dests[core.$get](i).value != dart.notNull(i) * 5 + 1000)
423 core.print("Projection 3 failed"); 423 core.print("Projection 3 failed");
424 } 424 }
425 change(offset, 2000); 425 change(offset, 2000);
426 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) { 426 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) {
427 if (dests.get(i).value != dart.notNull(i) * 5 + 2000) 427 if (dests[core.$get](i).value != dart.notNull(i) * 5 + 2000)
428 core.print("Projection 4 failed"); 428 core.print("Projection 4 failed");
429 } 429 }
430 } 430 }
431 // Function change: (Variable, int) → void 431 // Function change: (Variable, int) → void
432 function change(v, newValue) { 432 function change(v, newValue) {
433 let edit = new EditConstraint(v, PREFERRED); 433 let edit = new EditConstraint(v, PREFERRED);
434 let plan = exports.planner.extractPlanFromConstraints(new core.List$(EditCon straint).from([edit])); 434 let plan = exports.planner.extractPlanFromConstraints(new core.List$(EditCon straint).from([edit]));
435 for (let i = 0; dart.notNull(i) < 10; i = dart.notNull(i) + 1) { 435 for (let i = 0; dart.notNull(i) < 10; i = dart.notNull(i) + 1) {
436 v.value = newValue; 436 v.value = newValue;
437 plan.execute(); 437 plan.execute();
(...skipping 22 matching lines...) Expand all
460 exports.BinaryConstraint = BinaryConstraint; 460 exports.BinaryConstraint = BinaryConstraint;
461 exports.ScaleConstraint = ScaleConstraint; 461 exports.ScaleConstraint = ScaleConstraint;
462 exports.EqualityConstraint = EqualityConstraint; 462 exports.EqualityConstraint = EqualityConstraint;
463 exports.Variable = Variable; 463 exports.Variable = Variable;
464 exports.Planner = Planner; 464 exports.Planner = Planner;
465 exports.Plan = Plan; 465 exports.Plan = Plan;
466 exports.chainTest = chainTest; 466 exports.chainTest = chainTest;
467 exports.projectionTest = projectionTest; 467 exports.projectionTest = projectionTest;
468 exports.change = change; 468 exports.change = change;
469 })(DeltaBlue || (DeltaBlue = {})); 469 })(DeltaBlue || (DeltaBlue = {}));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698