Incremental linear constraint solving in pure MoonBit, ported from Kiwi: add/remove constraints, weighted preferences, and interactive edit variables.
git clone https://github.com/sgy1023-crt/MoonCassowary
cd MoonCassowary
moon check
moon test
moon run examples/equations
moon run examples/split_pane
moon run examples/recoverymoon add sgy1023-crt/cassowarylet solver = @cassowary.Solver::new()
let x = @cassowary.Variable::new("x")
let y = @cassowary.Variable::new("y")
let sum = @cassowary.Constraint::new(
@cassowary.Expression::new([(x, 1.0), (y, 1.0)], constant=-10.0),
@cassowary.Relation::Equal,
)
let difference = @cassowary.Constraint::new(
@cassowary.Expression::new([(x, 1.0), (y, -1.0)], constant=-4.0),
@cassowary.Relation::Equal,
)
solver.add_constraint(sum)
solver.add_constraint(difference)
assert_eq(solver.value(x), 7.0)
assert_eq(solver.value(y), 3.0)solver.add_edit_variable(x, @cassowary.strong())
solver.suggest_value(x, 20.0)solver.remove_constraint(difference)
solver.suggest_value(x, 20.0)
// x = 20, y = -10, while x + y = 10 remains required.python -m pip install kiwisolver==1.4.9
python tests/oracle/generate.py --checkmoon fmt --check
moon check --target wasm-gc --deny-warn
moon build --target wasm-gc
moon test --target wasm-gc
moon check --target js --deny-warn
moon build --target js
moon test --target js
moon check --target native --deny-warn
moon build --target native
moon test --target native
moon infopub struct Expression {
constant : Double
// private fields
}pub struct Solver {
// private fields
}fn Solver::add_edit_variable(self : Solver, variable : Variable, strength : Double) -> Unit raise SolverErrorfn Solver::suggest_value(self : Solver, variable : Variable, value : Double) -> Unit raise SolverErrorfn required() -> Doublefn strong() -> DoubleInstall
Download zipIncremental linear constraint solving in pure MoonBit, ported from Kiwi: add/remove constraints, weighted preferences, and interactive edit variables.