Packages
inplace
0.6.7
0.7.12
0.7.11
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.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Mutable data structures
Current section
Files
Jump to
Current section
Files
test/adt/queue_test.exs
defmodule InPlace.QueueTest do
use ExUnit.Case
alias InPlace.Queue
describe "Circular queue" do
test "operations" do
## Create queue
queue = Queue.new(100)
assert Queue.empty?(queue)
assert Queue.size(queue) == 0
refute Queue.front(queue)
range = -50..49
range_size = Range.size(range)
## Enqueue
Enum.each(
Enum.with_index(range, 1),
fn {num, idx} ->
Queue.enqueue(queue, num)
assert Queue.rear(queue) == num
refute Queue.empty?(queue)
assert Queue.front(queue) == -50
assert idx == Queue.size(queue)
end
)
## Capacity overflow (we are now at capacity, 100 elements in the queue)
assert catch_throw({:error, :stackoverflow} = Queue.enqueue(queue, Enum.random(1..1000)))
assert Queue.size(queue) == range_size
## Dequeue
Enum.each(1..range_size, fn i ->
front = Queue.front(queue)
el = Queue.dequeue(queue)
assert front == el
assert el in range
assert Queue.size(queue) == range_size - i
end)
assert Queue.empty?(queue)
## We can keep using the queue
Queue.enqueue(queue, 1001)
assert Queue.size(queue) == 1
assert Queue.front(queue) == 1001
assert 1001 == Queue.dequeue(queue)
assert Queue.empty?(queue)
end
end
end