Packages
fixpoint
0.21.3
0.22.1
0.21.5
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.6
0.20.5
0.20.4
0.20.3
0.20.2
0.20.1
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.18.2
0.18.1
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.13.5
0.13.4
0.13.2
0.13.1
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.2
0.12.1
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.46
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.28
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.1.3
0.1.2
0.1.1
0.1.0
Constraint Programming Solver
Current section
Files
Jump to
Current section
Files
test/propagators/maximum_test.exs
defmodule CPSolverTest.Propagator.Maximum do
use ExUnit.Case
describe "Propagator filtering" do
alias CPSolver.IntVariable, as: Variable
alias CPSolver.Propagator
alias CPSolver.Propagator.Maximum
import CPSolver.Variable.Interface
import CPSolver.Utils
test "Test 1 (scenario: MiniCP, MaximumTest.maximumTest1)" do
[x0, x1, x2] = x_vars = Enum.map(1..3, fn _ -> Variable.new(0..9) end)
y_var = Variable.new(-5..20)
max_propagator = Maximum.new(y_var, x_vars)
step1 = Propagator.filter(max_propagator)
assert max(y_var) == 9
assert min(y_var) == 0
removeAbove(y_var, 8)
step2 = Propagator.filter(update_propagator(max_propagator, step1))
assert Enum.all?(x_vars, fn x -> max(x) == 8 end)
removeBelow(y_var, 5)
removeAbove(x0, 2)
removeBelow(x1, 6)
removeBelow(x2, 6)
step3 = Propagator.filter(update_propagator(max_propagator, step2))
assert max(y_var) == 8
assert min(y_var) == 6
removeBelow(y_var, 7)
removeAbove(x1, 6)
_step4 = Propagator.filter(update_propagator(max_propagator, step3))
assert min(x2) == 7
end
test "when 'y' variable is fixed" do
y_var = Variable.new([5], name: "y")
x_vars = [x0, x1, x2] =
Enum.map([1..5, 1..10, [0, 6]], fn d ->
Variable.new(d)
end)
max_propagator = Maximum.new(y_var, x_vars)
Propagator.filter(max_propagator)
assert domain_values(x0) == MapSet.new(1..5)
assert domain_values(x1) == MapSet.new(1..5)
assert min(x2) == 0 and max(x2) == 0
end
test "fails on inconsistency" do
y_var = Variable.new(6..10)
x1_var = Variable.new(0..4)
x2_var = Variable.new(0..5)
assert :fail == Propagator.filter(Maximum.new(y_var, [x1_var, x2_var]))
end
end
defp update_propagator(propagator, previous_run) do
Map.put(propagator, :state, previous_run.state)
end
end