add test stack

This commit is contained in:
Timofey Khoruzhii 2023-07-03 13:51:47 +03:00
parent 8293234a24
commit e53f5ef04d
3 changed files with 60 additions and 0 deletions

19
lib/stack.ex Normal file
View file

@ -0,0 +1,19 @@
defmodule MyStack do
use GenServer
def start_link(args) do
GenServer.start_link(__MODULE__, nil, name: args[:name])
end
def init(_) do
{:ok, []}
end
def handle_info({:push, el}, state) do
{:noreply, [el] ++ state}
end
def handle_call(:pop, _from, [head | tail]) do
{:reply, head, tail}
end
end

1
test/test_helper.exs Normal file
View file

@ -0,0 +1 @@
ExUnit.start()

40
test/test_stack.exs Normal file
View file

@ -0,0 +1,40 @@
defmodule MyStack.Test do
require MyStack
use ExUnit.Case, async: true
defmodule MySupervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok)
end
def init(:ok) do
children = [
%{id: 1, start: {MyStack, :start_link, [[name: :my_server]]}},
%{id: 2, start: {MyStack, :start_link, [[name: :my_server2]]}}
]
Supervisor.init(children, strategy: :one_for_one)
end
end
setup do
{:ok, supervisor: MySupervisor.start_link()}
end
test "server starts with an empty client list", %{supervisor: supervisor} do
send(:my_server, {:push, 2})
assert GenServer.call(:my_server, :pop) == 2
send(:my_server, {:push, 1})
send(:my_server, {:push, 4})
send(:my_server2, {:push, 3})
send(:my_server2, {:push, 8})
assert GenServer.call(:my_server2, :pop) == 8
assert GenServer.call(:my_server, :pop) == 4
assert GenServer.call(:my_server2, :pop) == 3
assert GenServer.call(:my_server, :pop) == 1
end
end