Packages
fixpoint
0.17.4
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 "Interface (variables and views)" do
alias CPSolver.IntVariable, as: Variable
alias CPSolver.Variable.Interface
alias Iter.Iterable
import CPSolver.Variable.View.Factory
import CPSolver.Utils
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)
[var1, _var2] = variables
[view1, view2] = Enum.map(variables, fn var -> minus(var) end)
## Domain
##
assert domain_values(var1) |> Enum.sort() ==
Enum.to_list(v1_values) |> Enum.sort()
assert domain_values(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 domain_values(var1) == MapSet.new([2, 3, 4, 5])
assert :fixed == Interface.fix(var1, 2)
assert Interface.fixed?(var1)
assert :fail == catch_throw(Interface.fix(var1, 1))
assert domain_values(view2) == MapSet.new([-5, -4, -3, -2])
assert :fixed == Interface.fix(view2, -2)
assert Interface.fixed?(view2)
assert :fail == catch_throw(Interface.fix(view2, 1))
end
test "Iterators" do
## Variables
variable = Variable.new(1..10)
variable_iterator = Interface.iterator(variable)
{:ok, var_iterator_min, _iterator} = Iterable.next(variable_iterator)
assert Interface.min(variable) == var_iterator_min
assert domain_values(variable) == MapSet.new(Iterable.to_list(variable_iterator))
## Views
view = linear(variable, 2, 1)
view_iterator = Interface.iterator(view)
{:ok, view_iterator_min, _iterator} = Iterable.next(view_iterator)
assert 2 * var_iterator_min + 1 == view_iterator_min
assert Interface.min(view) == view_iterator_min
assert domain_values(view) == MapSet.new(Iterable.to_list(view_iterator))
end
end
end