Packages
fixpoint
0.13.5
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/utils/mutable_array_test.exs
defmodule CPSolverTest.Utils.MutableArray do
use ExUnit.Case
import CPSolver.Utils.MutableArray
describe "Mutable order" do
alias CPSolver.Utils.MutableOrder
test "create" do
values = [2, 8, 3, 5, 2]
order_rec = MutableOrder.new(values)
assert {_sort_index, [2, 2, 3, 5, 8]} = MutableOrder.to_sorted(order_rec) |> Enum.unzip()
end
test "update (current value decreasing)" do
values = [2, 8, 3, 5, 2]
order_rec = MutableOrder.new(values)
## Current value of element at position 1 (that is, 8) changes to 2
change = {1, 2}
MutableOrder.update(order_rec, change)
## The changed value has been updated internally
assert to_array(order_rec.values) == [2, 2, 3, 5, 2]
## The order is maintained
{asc_sort_index, asc_sorted_values} = MutableOrder.to_sorted(order_rec, :asc) |> Enum.unzip()
{desc_sort_index, desc_sorted_values} = MutableOrder.to_sorted(order_rec, :desc) |> Enum.unzip()
assert Enum.reverse(asc_sort_index) == desc_sort_index
assert Enum.reverse(asc_sorted_values) == desc_sorted_values
assert MutableOrder.valid?(order_rec)
end
test "update (current value increasing)" do
values = [2, 8, 3, 5, 2]
order_rec = MutableOrder.new(values)
## Current value of element at position 2 (that is, 3) changes to 9
change = {2, 9}
MutableOrder.update(order_rec, change)
## The changed value has been updated internally
assert to_array(order_rec.values) == [2, 8, 9, 5, 2]
## The order is maintained
{asc_sort_index, asc_sorted_values} = MutableOrder.to_sorted(order_rec, :asc) |> Enum.unzip()
{desc_sort_index, desc_sorted_values} = MutableOrder.to_sorted(order_rec, :desc) |> Enum.unzip()
assert Enum.reverse(asc_sort_index) == desc_sort_index
assert Enum.reverse(asc_sorted_values) == desc_sorted_values
assert MutableOrder.valid?(order_rec)
end
test "get" do
values = [2, 8, 3, 5, 2]
order_rec = MutableOrder.new(values)
assert Enum.sort(values) == Enum.map(0..(length(values) - 1), fn idx -> MutableOrder.get(order_rec, idx) end)
end
test "valid?" do
values = [4, 1, 5, 3, 9, 6, 7, 8, 2]
order = MutableOrder.new(values)
assert MutableOrder.valid?(order)
MutableOrder.update(order, {0, 0})
assert MutableOrder.valid?(order)
## Swap values without changing the sort index
range = Enum.to_list(0..length(values)-1)
rnd1 = Enum.random(range)
rnd2 = Enum.random(List.delete(range, rnd1))
swap(order.values, rnd1, rnd2)
refute MutableOrder.valid?(order)
end
end
end