From 704d0174e01345cdb722aadbc0038ffe695ec13e Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Tue, 30 Jun 2015 14:05:52 -0700 Subject: [PATCH] Solver.flush update returns the set of context associated with parameters in play --- packages/cassowary/lib/param.dart | 9 ++++- packages/cassowary/lib/solver.dart | 11 ++++-- packages/cassowary/test/cassowary_test.dart | 41 ++++++++++++++++----- 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/packages/cassowary/lib/param.dart b/packages/cassowary/lib/param.dart index 0b2b5c14f9a..f296c9d3af4 100644 --- a/packages/cassowary/lib/param.dart +++ b/packages/cassowary/lib/param.dart @@ -6,12 +6,17 @@ part of cassowary; class Param extends _EquationMember { final Variable variable; + final dynamic context; - Param.withVariable(this.variable) { + Param([double value = 0.0]) + : variable = new Variable(value), + context = null { variable._owner = this; } - Param([double value = 0.0]) : this.variable = new Variable(value) { + Param.withContext(ctx) + : variable = new Variable(0.0), + context = ctx { variable._owner = this; } diff --git a/packages/cassowary/lib/solver.dart b/packages/cassowary/lib/solver.dart index 59ee312bc1e..f76ea239a57 100644 --- a/packages/cassowary/lib/solver.dart +++ b/packages/cassowary/lib/solver.dart @@ -168,8 +168,8 @@ class Solver { return _dualOptimize(); } - List flushParameterUpdates() { - List updates = new List(); + Set flushUpdates() { + Set updates = new Set(); for (Variable variable in _vars.keys) { _Symbol symbol = _vars[variable]; @@ -178,9 +178,14 @@ class Solver { double updatedValue = row == null ? 0.0 : row.constant; if (variable._applyUpdate(updatedValue) && variable._owner != null) { - updates.add(variable._owner); + dynamic context = variable._owner.context; + + if (context != null) { + updates.add(context); + } } } + return updates; } diff --git a/packages/cassowary/test/cassowary_test.dart b/packages/cassowary/test/cassowary_test.dart index 7c2e60d7aa8..1ea67e13733 100644 --- a/packages/cassowary/test/cassowary_test.dart +++ b/packages/cassowary/test/cassowary_test.dart @@ -427,7 +427,7 @@ void main() { var left = new Param(-20.0); Solver s = new Solver(); s.addConstraint(left >= CM(0.0)); - s.flushParameterUpdates(); + s.flushUpdates(); expect(left.value, 0.0); }); @@ -443,7 +443,7 @@ void main() { expect(s.addConstraint(right - left >= CM(100.0)), Result.success); expect(s.addConstraint(left >= CM(0.0)), Result.success); - s.flushParameterUpdates(); + s.flushUpdates(); expect(left.value, 0.0); expect(mid.value, 50.0); @@ -484,7 +484,7 @@ void main() { expect(s.addEditVariable(mid.variable, Priority.strong), Result.success); expect(s.suggestValueForVariable(mid.variable, 300.0), Result.success); - s.flushParameterUpdates(); + s.flushUpdates(); expect(left.value, 0.0); expect(mid.value, 300.0); @@ -523,7 +523,7 @@ void main() { solver.addConstraint((p2 == CM(2.0) * p1) as Constraint); solver.addConstraint((container == (p1 + p2 + p3)) as Constraint); - solver.flushParameterUpdates(); + solver.flushUpdates(); expect(container.value, 100.0); @@ -533,9 +533,9 @@ void main() { }); test('test_updates_collection', () { - Param left = new Param(); - Param mid = new Param(); - Param right = new Param(); + Param left = new Param.withContext("left"); + Param mid = new Param.withContext("mid"); + Param right = new Param.withContext("right"); Solver s = new Solver(); @@ -547,13 +547,36 @@ void main() { expect(s.suggestValueForVariable(mid.variable, 50.0), Result.success); - var updates = s.flushParameterUpdates(); + var updates = s.flushUpdates(); expect(updates.length, 2); - expect(updates[0] is Param, true); expect(left.value, 0.0); expect(mid.value, 50.0); expect(right.value, 100.0); }); + + test('test_updates_collection_is_set', () { + Param left = new Param.withContext("a"); + Param mid = new Param.withContext("a"); + Param right = new Param.withContext("a"); + + Solver s = new Solver(); + + expect(s.addEditVariable(mid.variable, Priority.strong), Result.success); + + expect(s.addConstraint((mid * CM(2.0) == left + right) as Constraint), + Result.success); + expect(s.addConstraint(left >= CM(10.0)), Result.success); + + expect(s.suggestValueForVariable(mid.variable, 50.0), Result.success); + + var updates = s.flushUpdates(); + + expect(updates.length, 1); + + expect(left.value, 10.0); + expect(mid.value, 50.0); + expect(right.value, 90.0); + }); }