| OLD | NEW |
| 1 dart_library.library('DeltaBlue', null, /* Imports */[ | 1 dart_library.library('DeltaBlue', null, /* Imports */[ |
| 2 "dart/_runtime", | 2 "dart/_runtime", |
| 3 'BenchmarkBase', | 3 'BenchmarkBase', |
| 4 'dart/core' | 4 'dart/core' |
| 5 ], /* Lazy imports */[ | 5 ], /* Lazy imports */[ |
| 6 ], function(exports, dart, BenchmarkBase, core) { | 6 ], function(exports, dart, BenchmarkBase, core) { |
| 7 'use strict'; | 7 'use strict'; |
| 8 let dartx = dart.dartx; | 8 let dartx = dart.dartx; |
| 9 function main() { | 9 function main() { |
| 10 new DeltaBlue().report(); | 10 new DeltaBlue().report(); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 this.chooseMethod(dart.as(mark, core.int)); | 73 this.chooseMethod(dart.as(mark, core.int)); |
| 74 if (!dart.notNull(this.isSatisfied())) { | 74 if (!dart.notNull(this.isSatisfied())) { |
| 75 if (dart.equals(this.strength, REQUIRED)) { | 75 if (dart.equals(this.strength, REQUIRED)) { |
| 76 core.print("Could not satisfy a required constraint!"); | 76 core.print("Could not satisfy a required constraint!"); |
| 77 } | 77 } |
| 78 return null; | 78 return null; |
| 79 } | 79 } |
| 80 this.markInputs(dart.as(mark, core.int)); | 80 this.markInputs(dart.as(mark, core.int)); |
| 81 let out = this.output(); | 81 let out = this.output(); |
| 82 let overridden = out.determinedBy; | 82 let overridden = out.determinedBy; |
| 83 if (overridden != null) | 83 if (overridden != null) overridden.markUnsatisfied(); |
| 84 overridden.markUnsatisfied(); | |
| 85 out.determinedBy = this; | 84 out.determinedBy = this; |
| 86 if (!dart.notNull(exports.planner.addPropagate(this, dart.as(mark, core.in
t)))) | 85 if (!dart.notNull(exports.planner.addPropagate(this, dart.as(mark, core.in
t)))) core.print("Cycle encountered"); |
| 87 core.print("Cycle encountered"); | |
| 88 out.mark = dart.as(mark, core.int); | 86 out.mark = dart.as(mark, core.int); |
| 89 return overridden; | 87 return overridden; |
| 90 } | 88 } |
| 91 destroyConstraint() { | 89 destroyConstraint() { |
| 92 if (dart.notNull(this.isSatisfied())) | 90 if (dart.notNull(this.isSatisfied())) exports.planner.incrementalRemove(th
is); |
| 93 exports.planner.incrementalRemove(this); | |
| 94 this.removeFromGraph(); | 91 this.removeFromGraph(); |
| 95 } | 92 } |
| 96 isInput() { | 93 isInput() { |
| 97 return false; | 94 return false; |
| 98 } | 95 } |
| 99 } | 96 } |
| 100 dart.setSignature(Constraint, { | 97 dart.setSignature(Constraint, { |
| 101 constructors: () => ({Constraint: [Constraint, [Strength]]}), | 98 constructors: () => ({Constraint: [Constraint, [Strength]]}), |
| 102 methods: () => ({ | 99 methods: () => ({ |
| 103 addConstraint: [dart.void, []], | 100 addConstraint: [dart.void, []], |
| (...skipping 19 matching lines...) Expand all Loading... |
| 123 isSatisfied() { | 120 isSatisfied() { |
| 124 return this.satisfied; | 121 return this.satisfied; |
| 125 } | 122 } |
| 126 markInputs(mark) {} | 123 markInputs(mark) {} |
| 127 output() { | 124 output() { |
| 128 return this.myOutput; | 125 return this.myOutput; |
| 129 } | 126 } |
| 130 recalculate() { | 127 recalculate() { |
| 131 this.myOutput.walkStrength = this.strength; | 128 this.myOutput.walkStrength = this.strength; |
| 132 this.myOutput.stay = !dart.notNull(this.isInput()); | 129 this.myOutput.stay = !dart.notNull(this.isInput()); |
| 133 if (dart.notNull(this.myOutput.stay)) | 130 if (dart.notNull(this.myOutput.stay)) this.execute(); |
| 134 this.execute(); | |
| 135 } | 131 } |
| 136 markUnsatisfied() { | 132 markUnsatisfied() { |
| 137 this.satisfied = false; | 133 this.satisfied = false; |
| 138 } | 134 } |
| 139 inputsKnown(mark) { | 135 inputsKnown(mark) { |
| 140 return true; | 136 return true; |
| 141 } | 137 } |
| 142 removeFromGraph() { | 138 removeFromGraph() { |
| 143 if (this.myOutput != null) | 139 if (this.myOutput != null) this.myOutput.removeConstraint(this); |
| 144 this.myOutput.removeConstraint(this); | |
| 145 this.satisfied = false; | 140 this.satisfied = false; |
| 146 } | 141 } |
| 147 } | 142 } |
| 148 dart.setSignature(UnaryConstraint, { | 143 dart.setSignature(UnaryConstraint, { |
| 149 constructors: () => ({UnaryConstraint: [UnaryConstraint, [Variable, Strength
]]}), | 144 constructors: () => ({UnaryConstraint: [UnaryConstraint, [Variable, Strength
]]}), |
| 150 methods: () => ({ | 145 methods: () => ({ |
| 151 addToGraph: [dart.void, []], | 146 addToGraph: [dart.void, []], |
| 152 chooseMethod: [dart.void, [core.int]], | 147 chooseMethod: [dart.void, [core.int]], |
| 153 isSatisfied: [core.bool, []], | 148 isSatisfied: [core.bool, []], |
| 154 markInputs: [dart.void, [core.int]], | 149 markInputs: [dart.void, [core.int]], |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 input() { | 215 input() { |
| 221 return this.direction == FORWARD ? this.v1 : this.v2; | 216 return this.direction == FORWARD ? this.v1 : this.v2; |
| 222 } | 217 } |
| 223 output() { | 218 output() { |
| 224 return this.direction == FORWARD ? this.v2 : this.v1; | 219 return this.direction == FORWARD ? this.v2 : this.v1; |
| 225 } | 220 } |
| 226 recalculate() { | 221 recalculate() { |
| 227 let ihn = this.input(), out = this.output(); | 222 let ihn = this.input(), out = this.output(); |
| 228 out.walkStrength = Strength.weakest(this.strength, ihn.walkStrength); | 223 out.walkStrength = Strength.weakest(this.strength, ihn.walkStrength); |
| 229 out.stay = ihn.stay; | 224 out.stay = ihn.stay; |
| 230 if (dart.notNull(out.stay)) | 225 if (dart.notNull(out.stay)) this.execute(); |
| 231 this.execute(); | |
| 232 } | 226 } |
| 233 markUnsatisfied() { | 227 markUnsatisfied() { |
| 234 this.direction = NONE; | 228 this.direction = NONE; |
| 235 } | 229 } |
| 236 inputsKnown(mark) { | 230 inputsKnown(mark) { |
| 237 let i = this.input(); | 231 let i = this.input(); |
| 238 return i.mark == mark || dart.notNull(i.stay) || i.determinedBy == null; | 232 return i.mark == mark || dart.notNull(i.stay) || i.determinedBy == null; |
| 239 } | 233 } |
| 240 removeFromGraph() { | 234 removeFromGraph() { |
| 241 if (this.v1 != null) | 235 if (this.v1 != null) this.v1.removeConstraint(this); |
| 242 this.v1.removeConstraint(this); | 236 if (this.v2 != null) this.v2.removeConstraint(this); |
| 243 if (this.v2 != null) | |
| 244 this.v2.removeConstraint(this); | |
| 245 this.direction = NONE; | 237 this.direction = NONE; |
| 246 } | 238 } |
| 247 } | 239 } |
| 248 dart.setSignature(BinaryConstraint, { | 240 dart.setSignature(BinaryConstraint, { |
| 249 constructors: () => ({BinaryConstraint: [BinaryConstraint, [Variable, Variab
le, Strength]]}), | 241 constructors: () => ({BinaryConstraint: [BinaryConstraint, [Variable, Variab
le, Strength]]}), |
| 250 methods: () => ({ | 242 methods: () => ({ |
| 251 chooseMethod: [dart.void, [core.int]], | 243 chooseMethod: [dart.void, [core.int]], |
| 252 addToGraph: [dart.void, []], | 244 addToGraph: [dart.void, []], |
| 253 isSatisfied: [core.bool, []], | 245 isSatisfied: [core.bool, []], |
| 254 markInputs: [dart.void, [core.int]], | 246 markInputs: [dart.void, [core.int]], |
| (...skipping 11 matching lines...) Expand all Loading... |
| 266 this.offset = offset; | 258 this.offset = offset; |
| 267 super.BinaryConstraint(src, dest, strength); | 259 super.BinaryConstraint(src, dest, strength); |
| 268 } | 260 } |
| 269 addToGraph() { | 261 addToGraph() { |
| 270 super.addToGraph(); | 262 super.addToGraph(); |
| 271 this.scale.addConstraint(this); | 263 this.scale.addConstraint(this); |
| 272 this.offset.addConstraint(this); | 264 this.offset.addConstraint(this); |
| 273 } | 265 } |
| 274 removeFromGraph() { | 266 removeFromGraph() { |
| 275 super.removeFromGraph(); | 267 super.removeFromGraph(); |
| 276 if (this.scale != null) | 268 if (this.scale != null) this.scale.removeConstraint(this); |
| 277 this.scale.removeConstraint(this); | 269 if (this.offset != null) this.offset.removeConstraint(this); |
| 278 if (this.offset != null) | |
| 279 this.offset.removeConstraint(this); | |
| 280 } | 270 } |
| 281 markInputs(mark) { | 271 markInputs(mark) { |
| 282 super.markInputs(mark); | 272 super.markInputs(mark); |
| 283 this.scale.mark = this.offset.mark = mark; | 273 this.scale.mark = this.offset.mark = mark; |
| 284 } | 274 } |
| 285 execute() { | 275 execute() { |
| 286 if (this.direction == FORWARD) { | 276 if (this.direction == FORWARD) { |
| 287 this.v2.value = dart.notNull(this.v1.value) * dart.notNull(this.scale.va
lue) + dart.notNull(this.offset.value); | 277 this.v2.value = dart.notNull(this.v1.value) * dart.notNull(this.scale.va
lue) + dart.notNull(this.offset.value); |
| 288 } else { | 278 } else { |
| 289 this.v1.value = ((dart.notNull(this.v2.value) - dart.notNull(this.offset
.value)) / dart.notNull(this.scale.value))[dartx.truncate](); | 279 this.v1.value = ((dart.notNull(this.v2.value) - dart.notNull(this.offset
.value)) / dart.notNull(this.scale.value))[dartx.truncate](); |
| 290 } | 280 } |
| 291 } | 281 } |
| 292 recalculate() { | 282 recalculate() { |
| 293 let ihn = this.input(), out = this.output(); | 283 let ihn = this.input(), out = this.output(); |
| 294 out.walkStrength = Strength.weakest(this.strength, ihn.walkStrength); | 284 out.walkStrength = Strength.weakest(this.strength, ihn.walkStrength); |
| 295 out.stay = dart.notNull(ihn.stay) && dart.notNull(this.scale.stay) && dart
.notNull(this.offset.stay); | 285 out.stay = dart.notNull(ihn.stay) && dart.notNull(this.scale.stay) && dart
.notNull(this.offset.stay); |
| 296 if (dart.notNull(out.stay)) | 286 if (dart.notNull(out.stay)) this.execute(); |
| 297 this.execute(); | |
| 298 } | 287 } |
| 299 } | 288 } |
| 300 dart.setSignature(ScaleConstraint, { | 289 dart.setSignature(ScaleConstraint, { |
| 301 constructors: () => ({ScaleConstraint: [ScaleConstraint, [Variable, Variable
, Variable, Variable, Strength]]}), | 290 constructors: () => ({ScaleConstraint: [ScaleConstraint, [Variable, Variable
, Variable, Variable, Strength]]}), |
| 302 methods: () => ({execute: [dart.void, []]}) | 291 methods: () => ({execute: [dart.void, []]}) |
| 303 }); | 292 }); |
| 304 class EqualityConstraint extends BinaryConstraint { | 293 class EqualityConstraint extends BinaryConstraint { |
| 305 EqualityConstraint(v1, v2, strength) { | 294 EqualityConstraint(v1, v2, strength) { |
| 306 super.BinaryConstraint(v1, v2, strength); | 295 super.BinaryConstraint(v1, v2, strength); |
| 307 } | 296 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 321 this.determinedBy = null; | 310 this.determinedBy = null; |
| 322 this.mark = 0; | 311 this.mark = 0; |
| 323 this.walkStrength = WEAKEST; | 312 this.walkStrength = WEAKEST; |
| 324 this.stay = true; | 313 this.stay = true; |
| 325 } | 314 } |
| 326 addConstraint(c) { | 315 addConstraint(c) { |
| 327 this.constraints[dartx.add](c); | 316 this.constraints[dartx.add](c); |
| 328 } | 317 } |
| 329 removeConstraint(c) { | 318 removeConstraint(c) { |
| 330 this.constraints[dartx.remove](c); | 319 this.constraints[dartx.remove](c); |
| 331 if (dart.equals(this.determinedBy, c)) | 320 if (dart.equals(this.determinedBy, c)) this.determinedBy = null; |
| 332 this.determinedBy = null; | |
| 333 } | 321 } |
| 334 } | 322 } |
| 335 dart.setSignature(Variable, { | 323 dart.setSignature(Variable, { |
| 336 constructors: () => ({Variable: [Variable, [core.String, core.int]]}), | 324 constructors: () => ({Variable: [Variable, [core.String, core.int]]}), |
| 337 methods: () => ({ | 325 methods: () => ({ |
| 338 addConstraint: [dart.void, [Constraint]], | 326 addConstraint: [dart.void, [Constraint]], |
| 339 removeConstraint: [dart.void, [Constraint]] | 327 removeConstraint: [dart.void, [Constraint]] |
| 340 }) | 328 }) |
| 341 }); | 329 }); |
| 342 class Planner extends core.Object { | 330 class Planner extends core.Object { |
| 343 Planner() { | 331 Planner() { |
| 344 this.currentMark = 0; | 332 this.currentMark = 0; |
| 345 } | 333 } |
| 346 incrementalAdd(c) { | 334 incrementalAdd(c) { |
| 347 let mark = this.newMark(); | 335 let mark = this.newMark(); |
| 348 for (let overridden = c.satisfy(mark); overridden != null; overridden = ov
erridden.satisfy(mark)) | 336 for (let overridden = c.satisfy(mark); overridden != null; overridden = ov
erridden.satisfy(mark)) |
| 349 ; | 337 ; |
| 350 } | 338 } |
| 351 incrementalRemove(c) { | 339 incrementalRemove(c) { |
| 352 let out = c.output(); | 340 let out = c.output(); |
| 353 c.markUnsatisfied(); | 341 c.markUnsatisfied(); |
| 354 c.removeFromGraph(); | 342 c.removeFromGraph(); |
| 355 let unsatisfied = this.removePropagateFrom(out); | 343 let unsatisfied = this.removePropagateFrom(out); |
| 356 let strength = REQUIRED; | 344 let strength = REQUIRED; |
| 357 do { | 345 do { |
| 358 for (let i = 0; dart.notNull(i) < dart.notNull(unsatisfied[dartx.length]
); i = dart.notNull(i) + 1) { | 346 for (let i = 0; dart.notNull(i) < dart.notNull(unsatisfied[dartx.length]
); i = dart.notNull(i) + 1) { |
| 359 let u = unsatisfied[dartx.get](i); | 347 let u = unsatisfied[dartx.get](i); |
| 360 if (dart.equals(u.strength, strength)) | 348 if (dart.equals(u.strength, strength)) this.incrementalAdd(u); |
| 361 this.incrementalAdd(u); | |
| 362 } | 349 } |
| 363 strength = strength.nextWeaker(); | 350 strength = strength.nextWeaker(); |
| 364 } while (!dart.equals(strength, WEAKEST)); | 351 } while (!dart.equals(strength, WEAKEST)); |
| 365 } | 352 } |
| 366 newMark() { | 353 newMark() { |
| 367 return this.currentMark = dart.notNull(this.currentMark) + 1; | 354 return this.currentMark = dart.notNull(this.currentMark) + 1; |
| 368 } | 355 } |
| 369 makePlan(sources) { | 356 makePlan(sources) { |
| 370 let mark = this.newMark(); | 357 let mark = this.newMark(); |
| 371 let plan = new Plan(); | 358 let plan = new Plan(); |
| 372 let todo = sources; | 359 let todo = sources; |
| 373 while (dart.notNull(todo[dartx.length]) > 0) { | 360 while (dart.notNull(todo[dartx.length]) > 0) { |
| 374 let c = todo[dartx.removeLast](); | 361 let c = todo[dartx.removeLast](); |
| 375 if (c.output().mark != mark && dart.notNull(c.inputsKnown(mark))) { | 362 if (c.output().mark != mark && dart.notNull(c.inputsKnown(mark))) { |
| 376 plan.addConstraint(c); | 363 plan.addConstraint(c); |
| 377 c.output().mark = mark; | 364 c.output().mark = mark; |
| 378 this.addConstraintsConsumingTo(c.output(), todo); | 365 this.addConstraintsConsumingTo(c.output(), todo); |
| 379 } | 366 } |
| 380 } | 367 } |
| 381 return plan; | 368 return plan; |
| 382 } | 369 } |
| 383 extractPlanFromConstraints(constraints) { | 370 extractPlanFromConstraints(constraints) { |
| 384 let sources = dart.list([], Constraint); | 371 let sources = dart.list([], Constraint); |
| 385 for (let i = 0; dart.notNull(i) < dart.notNull(constraints[dartx.length]);
i = dart.notNull(i) + 1) { | 372 for (let i = 0; dart.notNull(i) < dart.notNull(constraints[dartx.length]);
i = dart.notNull(i) + 1) { |
| 386 let c = constraints[dartx.get](i); | 373 let c = constraints[dartx.get](i); |
| 387 if (dart.notNull(c.isInput()) && dart.notNull(c.isSatisfied())) | 374 if (dart.notNull(c.isInput()) && dart.notNull(c.isSatisfied())) sources[
dartx.add](c); |
| 388 sources[dartx.add](c); | |
| 389 } | 375 } |
| 390 return this.makePlan(sources); | 376 return this.makePlan(sources); |
| 391 } | 377 } |
| 392 addPropagate(c, mark) { | 378 addPropagate(c, mark) { |
| 393 let todo = dart.list([c], Constraint); | 379 let todo = dart.list([c], Constraint); |
| 394 while (dart.notNull(todo[dartx.length]) > 0) { | 380 while (dart.notNull(todo[dartx.length]) > 0) { |
| 395 let d = todo[dartx.removeLast](); | 381 let d = todo[dartx.removeLast](); |
| 396 if (d.output().mark == mark) { | 382 if (d.output().mark == mark) { |
| 397 this.incrementalRemove(c); | 383 this.incrementalRemove(c); |
| 398 return false; | 384 return false; |
| 399 } | 385 } |
| 400 d.recalculate(); | 386 d.recalculate(); |
| 401 this.addConstraintsConsumingTo(d.output(), todo); | 387 this.addConstraintsConsumingTo(d.output(), todo); |
| 402 } | 388 } |
| 403 return true; | 389 return true; |
| 404 } | 390 } |
| 405 removePropagateFrom(out) { | 391 removePropagateFrom(out) { |
| 406 out.determinedBy = null; | 392 out.determinedBy = null; |
| 407 out.walkStrength = WEAKEST; | 393 out.walkStrength = WEAKEST; |
| 408 out.stay = true; | 394 out.stay = true; |
| 409 let unsatisfied = dart.list([], Constraint); | 395 let unsatisfied = dart.list([], Constraint); |
| 410 let todo = dart.list([out], Variable); | 396 let todo = dart.list([out], Variable); |
| 411 while (dart.notNull(todo[dartx.length]) > 0) { | 397 while (dart.notNull(todo[dartx.length]) > 0) { |
| 412 let v = todo[dartx.removeLast](); | 398 let v = todo[dartx.removeLast](); |
| 413 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.lengt
h]); i = dart.notNull(i) + 1) { | 399 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.lengt
h]); i = dart.notNull(i) + 1) { |
| 414 let c = v.constraints[dartx.get](i); | 400 let c = v.constraints[dartx.get](i); |
| 415 if (!dart.notNull(c.isSatisfied())) | 401 if (!dart.notNull(c.isSatisfied())) unsatisfied[dartx.add](c); |
| 416 unsatisfied[dartx.add](c); | |
| 417 } | 402 } |
| 418 let determining = v.determinedBy; | 403 let determining = v.determinedBy; |
| 419 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.lengt
h]); i = dart.notNull(i) + 1) { | 404 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.lengt
h]); i = dart.notNull(i) + 1) { |
| 420 let next = v.constraints[dartx.get](i); | 405 let next = v.constraints[dartx.get](i); |
| 421 if (!dart.equals(next, determining) && dart.notNull(next.isSatisfied()
)) { | 406 if (!dart.equals(next, determining) && dart.notNull(next.isSatisfied()
)) { |
| 422 next.recalculate(); | 407 next.recalculate(); |
| 423 todo[dartx.add](next.output()); | 408 todo[dartx.add](next.output()); |
| 424 } | 409 } |
| 425 } | 410 } |
| 426 } | 411 } |
| 427 return unsatisfied; | 412 return unsatisfied; |
| 428 } | 413 } |
| 429 addConstraintsConsumingTo(v, coll) { | 414 addConstraintsConsumingTo(v, coll) { |
| 430 let determining = v.determinedBy; | 415 let determining = v.determinedBy; |
| 431 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.length]
); i = dart.notNull(i) + 1) { | 416 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.length]
); i = dart.notNull(i) + 1) { |
| 432 let c = v.constraints[dartx.get](i); | 417 let c = v.constraints[dartx.get](i); |
| 433 if (!dart.equals(c, determining) && dart.notNull(c.isSatisfied())) | 418 if (!dart.equals(c, determining) && dart.notNull(c.isSatisfied())) coll[
dartx.add](c); |
| 434 coll[dartx.add](c); | |
| 435 } | 419 } |
| 436 } | 420 } |
| 437 } | 421 } |
| 438 dart.setSignature(Planner, { | 422 dart.setSignature(Planner, { |
| 439 methods: () => ({ | 423 methods: () => ({ |
| 440 incrementalAdd: [dart.void, [Constraint]], | 424 incrementalAdd: [dart.void, [Constraint]], |
| 441 incrementalRemove: [dart.void, [Constraint]], | 425 incrementalRemove: [dart.void, [Constraint]], |
| 442 newMark: [core.int, []], | 426 newMark: [core.int, []], |
| 443 makePlan: [Plan, [core.List$(Constraint)]], | 427 makePlan: [Plan, [core.List$(Constraint)]], |
| 444 extractPlanFromConstraints: [Plan, [core.List$(Constraint)]], | 428 extractPlanFromConstraints: [Plan, [core.List$(Constraint)]], |
| (...skipping 23 matching lines...) Expand all Loading... |
| 468 addConstraint: [dart.void, [Constraint]], | 452 addConstraint: [dart.void, [Constraint]], |
| 469 size: [core.int, []], | 453 size: [core.int, []], |
| 470 execute: [dart.void, []] | 454 execute: [dart.void, []] |
| 471 }) | 455 }) |
| 472 }); | 456 }); |
| 473 function chainTest(n) { | 457 function chainTest(n) { |
| 474 exports.planner = new Planner(); | 458 exports.planner = new Planner(); |
| 475 let prev = null, first = null, last = null; | 459 let prev = null, first = null, last = null; |
| 476 for (let i = 0; dart.notNull(i) <= dart.notNull(n); i = dart.notNull(i) + 1)
{ | 460 for (let i = 0; dart.notNull(i) <= dart.notNull(n); i = dart.notNull(i) + 1)
{ |
| 477 let v = new Variable("v", 0); | 461 let v = new Variable("v", 0); |
| 478 if (prev != null) | 462 if (prev != null) new EqualityConstraint(prev, v, REQUIRED); |
| 479 new EqualityConstraint(prev, v, REQUIRED); | 463 if (i == 0) first = v; |
| 480 if (i == 0) | 464 if (i == n) last = v; |
| 481 first = v; | |
| 482 if (i == n) | |
| 483 last = v; | |
| 484 prev = v; | 465 prev = v; |
| 485 } | 466 } |
| 486 new StayConstraint(last, STRONG_DEFAULT); | 467 new StayConstraint(last, STRONG_DEFAULT); |
| 487 let edit = new EditConstraint(first, PREFERRED); | 468 let edit = new EditConstraint(first, PREFERRED); |
| 488 let plan = exports.planner.extractPlanFromConstraints(dart.list([edit], Cons
traint)); | 469 let plan = exports.planner.extractPlanFromConstraints(dart.list([edit], Cons
traint)); |
| 489 for (let i = 0; dart.notNull(i) < 100; i = dart.notNull(i) + 1) { | 470 for (let i = 0; dart.notNull(i) < 100; i = dart.notNull(i) + 1) { |
| 490 first.value = i; | 471 first.value = i; |
| 491 plan.execute(); | 472 plan.execute(); |
| 492 if (last.value != i) { | 473 if (last.value != i) { |
| 493 core.print("Chain test failed:"); | 474 core.print("Chain test failed:"); |
| 494 core.print(`Expected last value to be ${i} but it was ${last.value}.`); | 475 core.print(`Expected last value to be ${i} but it was ${last.value}.`); |
| 495 } | 476 } |
| 496 } | 477 } |
| 497 } | 478 } |
| 498 dart.fn(chainTest, dart.void, [core.int]); | 479 dart.fn(chainTest, dart.void, [core.int]); |
| 499 function projectionTest(n) { | 480 function projectionTest(n) { |
| 500 exports.planner = new Planner(); | 481 exports.planner = new Planner(); |
| 501 let scale = new Variable("scale", 10); | 482 let scale = new Variable("scale", 10); |
| 502 let offset = new Variable("offset", 1000); | 483 let offset = new Variable("offset", 1000); |
| 503 let src = null, dst = null; | 484 let src = null, dst = null; |
| 504 let dests = dart.list([], Variable); | 485 let dests = dart.list([], Variable); |
| 505 for (let i = 0; dart.notNull(i) < dart.notNull(n); i = dart.notNull(i) + 1)
{ | 486 for (let i = 0; dart.notNull(i) < dart.notNull(n); i = dart.notNull(i) + 1)
{ |
| 506 src = new Variable("src", i); | 487 src = new Variable("src", i); |
| 507 dst = new Variable("dst", i); | 488 dst = new Variable("dst", i); |
| 508 dests[dartx.add](dst); | 489 dests[dartx.add](dst); |
| 509 new StayConstraint(src, NORMAL); | 490 new StayConstraint(src, NORMAL); |
| 510 new ScaleConstraint(src, scale, offset, dst, REQUIRED); | 491 new ScaleConstraint(src, scale, offset, dst, REQUIRED); |
| 511 } | 492 } |
| 512 change(src, 17); | 493 change(src, 17); |
| 513 if (dst.value != 1170) | 494 if (dst.value != 1170) core.print("Projection 1 failed"); |
| 514 core.print("Projection 1 failed"); | |
| 515 change(dst, 1050); | 495 change(dst, 1050); |
| 516 if (src.value != 5) | 496 if (src.value != 5) core.print("Projection 2 failed"); |
| 517 core.print("Projection 2 failed"); | |
| 518 change(scale, 5); | 497 change(scale, 5); |
| 519 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) +
1) { | 498 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) +
1) { |
| 520 if (dests[dartx.get](i).value != dart.notNull(i) * 5 + 1000) | 499 if (dests[dartx.get](i).value != dart.notNull(i) * 5 + 1000) core.print("P
rojection 3 failed"); |
| 521 core.print("Projection 3 failed"); | |
| 522 } | 500 } |
| 523 change(offset, 2000); | 501 change(offset, 2000); |
| 524 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) +
1) { | 502 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) +
1) { |
| 525 if (dests[dartx.get](i).value != dart.notNull(i) * 5 + 2000) | 503 if (dests[dartx.get](i).value != dart.notNull(i) * 5 + 2000) core.print("P
rojection 4 failed"); |
| 526 core.print("Projection 4 failed"); | |
| 527 } | 504 } |
| 528 } | 505 } |
| 529 dart.fn(projectionTest, dart.void, [core.int]); | 506 dart.fn(projectionTest, dart.void, [core.int]); |
| 530 function change(v, newValue) { | 507 function change(v, newValue) { |
| 531 let edit = new EditConstraint(v, PREFERRED); | 508 let edit = new EditConstraint(v, PREFERRED); |
| 532 let plan = exports.planner.extractPlanFromConstraints(dart.list([edit], Edit
Constraint)); | 509 let plan = exports.planner.extractPlanFromConstraints(dart.list([edit], Edit
Constraint)); |
| 533 for (let i = 0; dart.notNull(i) < 10; i = dart.notNull(i) + 1) { | 510 for (let i = 0; dart.notNull(i) < 10; i = dart.notNull(i) + 1) { |
| 534 v.value = newValue; | 511 v.value = newValue; |
| 535 plan.execute(); | 512 plan.execute(); |
| 536 } | 513 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 559 exports.BinaryConstraint = BinaryConstraint; | 536 exports.BinaryConstraint = BinaryConstraint; |
| 560 exports.ScaleConstraint = ScaleConstraint; | 537 exports.ScaleConstraint = ScaleConstraint; |
| 561 exports.EqualityConstraint = EqualityConstraint; | 538 exports.EqualityConstraint = EqualityConstraint; |
| 562 exports.Variable = Variable; | 539 exports.Variable = Variable; |
| 563 exports.Planner = Planner; | 540 exports.Planner = Planner; |
| 564 exports.Plan = Plan; | 541 exports.Plan = Plan; |
| 565 exports.chainTest = chainTest; | 542 exports.chainTest = chainTest; |
| 566 exports.projectionTest = projectionTest; | 543 exports.projectionTest = projectionTest; |
| 567 exports.change = change; | 544 exports.change = change; |
| 568 }); | 545 }); |
| OLD | NEW |