Packages
fixpoint
0.8.22
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/variables/interface_test.exs
defmodule CPSolverTest.Variable.Interface do
use ExUnit.Case
describe "Views" do
alias CPSolver.ConstraintStore
alias CPSolver.IntVariable, as: Variable
alias CPSolver.DefaultDomain, as: Domain
alias CPSolver.Variable.Interface
import CPSolver.Variable.View.Factory
test "view vs variable" do
v1_values = 1..10
v2_values = 1..10
values = [v1_values, v2_values]
variables = Enum.map(values, fn d -> Variable.new(d) end)
{:ok, [var1, _var2] = bound_vars, _store} =
ConstraintStore.create_store(variables)
[view1, view2] = Enum.map(bound_vars, fn var -> minus(var) end)
## Domain
##
assert Interface.domain(var1) |> Domain.to_list() |> Enum.sort() ==
Enum.to_list(v1_values) |> Enum.sort()
assert Interface.domain(view1) |> Enum.sort() ==
Enum.map(v1_values, fn x -> -x end) |> Enum.sort()
## Size
##
assert Interface.size(var1) == 10
assert Interface.size(view1) == 10
## Min
##
assert Interface.min(var1) == 1
assert Interface.min(view1) == -10
## Max
##
assert Interface.max(var1) == 10
assert Interface.max(view1) == -1
## Contains?
##
assert Interface.contains?(var1, 5)
refute Interface.contains?(var1, -5)
assert Interface.contains?(view1, -5)
refute Interface.contains?(view1, 5)
## Remove
##
assert :min_change == Interface.remove(var1, 1)
assert :no_change == Interface.remove(var1, -1)
assert :min_change == Interface.remove(view2, -1)
assert :no_change == Interface.remove(view2, 1)
## Remove above/below
##
assert :max_change == Interface.removeAbove(var1, 5)
assert :no_change == Interface.removeBelow(var1, -5)
assert :max_change == Interface.removeBelow(view2, -5)
assert :no_change == Interface.removeAbove(view2, 5)
## Fix and Fixed?
##
assert Interface.domain(var1) |> Domain.to_list() |> Enum.sort() == [2, 3, 4, 5]
assert :fixed == Interface.fix(var1, 2)
assert Interface.fixed?(var1)
assert :fail == catch_throw(Interface.fix(var1, 1))
assert Interface.domain(view2) == [-5, -4, -3, -2]
assert :fixed == Interface.fix(view2, -2)
assert Interface.fixed?(view2)
assert :fail == catch_throw(Interface.fix(view2, 1))
end
end
end