Packages
fixpoint
0.16.2
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/constraints/minimum_test.exs
defmodule CPSolverTest.Constraint.Minimum do
use ExUnit.Case, async: false
alias CPSolver.IntVariable, as: Variable
alias CPSolver.Model
alias CPSolver.Constraint.Minimum
alias CPSolver.Constraint.Factory, as: ConstraintFactory
import CPSolver.Variable.View.Factory
describe "Minimum constraint" do
test "`minimum` functionality" do
x_arr = Enum.map(1..4, fn idx -> Variable.new(0..4, name: "x#{idx}") end)
y = Variable.new(-5..20, name: "y")
model = Model.new([y | x_arr], [Minimum.new(y, x_arr)])
{:ok, result} = CPSolver.solve(model)
assert_minimum(result.solutions)
assert result.statistics.solution_count == 625
end
test "Factory" do
x_arr = Enum.map(1..4, fn idx -> Variable.new(0..4, name: "x#{idx}") end)
{max_var, maximum_constraint} = ConstraintFactory.minimum(x_arr)
assert Variable.min(max_var) == 0
assert Variable.max(max_var) == 4
model = Model.new([], [maximum_constraint])
{:ok, result} = CPSolver.solve(model)
assert_minimum(result.solutions)
assert result.statistics.solution_count == 625
end
test "Consistent with Maximum" do
x_arr = Enum.map(1..4, fn idx -> minus(Variable.new(0..4, name: "x#{idx}")) end)
{negative_max_var, negative_maximum_constraint} = ConstraintFactory.minimum(x_arr)
assert Variable.min(negative_max_var) == -4
assert Variable.max(negative_max_var) == 0
model = Model.new([], [negative_maximum_constraint])
{:ok, result} = CPSolver.solve(model)
assert_maximum(result.solutions, fn y -> -y end)
assert result.statistics.solution_count == 625
end
## Constraint check: y = min(x_array)
##
defp assert_minimum(solutions) do
assert Enum.all?(solutions, fn [y | xs] ->
y == Enum.min(xs)
end)
end
defp assert_maximum(solutions, transform_fun) do
assert Enum.all?(solutions, fn [y | xs] ->
transform_fun.(y) == Enum.max(xs)
end)
end
end
end