diff --git a/stack.go b/stack.go index 0598fd8..185f3d9 100644 --- a/stack.go +++ b/stack.go @@ -10,6 +10,9 @@ func (stack *Stack) Push(s string) { // Pop do pop from the top of stack and remove it. func (stack *Stack) Pop() string { + if len(*stack) == 0 { + return "" + } ret := (*stack)[len(*stack)-1] *stack = (*stack)[:len(*stack)-1] return ret diff --git a/stack_test.go b/stack_test.go new file mode 100644 index 0000000..bc9f3b5 --- /dev/null +++ b/stack_test.go @@ -0,0 +1,70 @@ +package stack + +import ( + "reflect" + "testing" +) + +func TestPush(t *testing.T) { + s := Stack{} + s.Push("foo") + s.Push("bar") + + want := Stack([]string{"foo", "bar"}) + if !reflect.DeepEqual(s, want) { + // TODO: more detail message + t.Error("error") + return + } +} + +func TestPop(t *testing.T) { + s := Stack([]string{"foo", "bar"}) + t.Run("pop 1", func(t *testing.T) { + got := s.Pop() + wantVal := "bar" + if got != wantVal { + // TODO: more detail message + t.Error("error on 1 val") + return + } + want := Stack([]string{"foo"}) + if !reflect.DeepEqual(s, want) { + // TODO: more detail message + t.Error("error on 1") + return + } + }) + + t.Run("pop 2", func(t *testing.T) { + got := s.Pop() + wantVal := "foo" + if got != wantVal { + // TODO: more detail message + t.Error("error on 2 val") + return + } + want := Stack{} + if !reflect.DeepEqual(s, want) { + // TODO: more detail message + t.Error("error on 2") + return + } + }) + + t.Run("pop 3", func(t *testing.T) { + got := s.Pop() + wantVal := "" + if got != wantVal { + // TODO: more detail message + t.Error("error on 3 val") + return + } + want := Stack{} + if !reflect.DeepEqual(s, want) { + // TODO: more detail message + t.Error("error on 3") + return + } + }) +}