Packages
inplace
0.7.12
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/stack_test.exs
defmodule InPlace.StackTest do
use ExUnit.Case
alias InPlace.Stack
describe "Stack" do
test "operations" do
## Fresh stack
stack = Stack.new(100)
assert Stack.empty?(stack)
refute Stack.peek(stack)
refute Stack.pop(stack)
## Push
nums = Enum.shuffle(1..100)
Enum.each(
Enum.with_index(nums, 1),
fn {num, idx} ->
Stack.push(stack, num)
assert Stack.peek(stack) == num
refute Stack.empty?(stack)
assert num == Stack.peek(stack)
assert idx == Stack.size(stack)
end
)
## Stack overflow (we are now at capacity, 100 elements in the stack)
assert catch_throw({:error, :stackoverflow} = Stack.push(stack, 101))
assert Stack.size(stack) == 100
## Pop
Enum.each(1..100, fn i ->
top = Stack.peek(stack)
el = Stack.pop(stack)
assert top == el
assert el in 1..100
assert Stack.size(stack) == 100 - i
end)
assert Stack.empty?(stack)
end
end
end