From bdecd1b6e0ea6d9bf6c205d418ac989c0aa0deb1 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 5 Apr 2015 16:53:20 +0200 Subject: Add Insert method --- stack.go | 11 +++++++++-- stack_test.go | 17 +++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/stack.go b/stack.go index 095811e..eb9b6be 100644 --- a/stack.go +++ b/stack.go @@ -12,12 +12,19 @@ func NewStack() Stack { return Stack{} } -// Push generic value into Stack +// Push adds value at tail func (s *Stack) Push(v Value) { *s = append(*s, v) } -// Pop generic value from Stack +// Insert inserts value at head +func (s *Stack) Insert(v Value) { + *s = append(*s, 0) + copy((*s)[1:], (*s)[:len(*s)-1]) + (*s)[0] = v +} + +// Pop retrieves value from tail func (s *Stack) Pop() (v Value) { if size := len(*s); size > 0 { v, *s = (*s)[size-1], (*s)[:size-1] diff --git a/stack_test.go b/stack_test.go index e66a3ae..31e6ff7 100644 --- a/stack_test.go +++ b/stack_test.go @@ -52,6 +52,23 @@ func TestSwap(t *testing.T) { } } +func TestInsert(t *testing.T) { + s := NewStack() + s.Push(1) + s.Insert(2) + if s.Depth() != 2 { + t.Error("Expected depth of 2") + } + a := s.Pop() + b := s.Pop() + if s.Depth() != 0 { + t.Error("Expected depth of 0") + } + if a != 1 || b != 2 { + t.Error("Expected swapped values") + } +} + func BenchmarkPushPopSingle(b *testing.B) { s := NewStack() for i := 0; i < b.N; i++ { -- cgit v1.2.3