Source

go-play / stack-package / stack_test.go

Full commit
package stack

import (
	"testing"
)

func TestString(t *testing.T) {
	s := New(10)
	if s.String() != "[]" {
		t.Fatal("Bad string - ", s.String())
	}
}

func TestCount(t *testing.T) {
	s := New(10)
	if s.Count() != 0 {
		t.Fatal("Not empty")
	}
	s.Push(1)
	s.Push(2)
	if s.Count() != 2 {
		t.Fatal("Bad count, should be 2", s.Count())
	}

	s.Pop()
	if s.Count() != 1 {
		t.Fatal("Bad count, should be 1", s.Count())
	}
}

func TestPush(t *testing.T) {
	s := New(2)
	if !s.Push(1) {
		t.Fatal("Bad push")
	}
	if !s.Push(2) {
		t.Fatal("Bad push")
	}
	if s.Push(3) {
		t.Fatal("Over limit")
	}
	s.Pop()
	if !s.Push(3) {
		t.Fatal("Bad push")
	}
	if (s.items[0] != 1) || (s.items[1] != 3) {
		t.Fatal("Bad state")
	}
}

func TestPop(t *testing.T) {
	s := New(2)
	s.Push(1)
	s.Push(2)

	if !s.IsFull() {
		t.Fatal("Not full")
	}

	i, ok := s.Pop()
	if !ok || (i != 2) {
		t.Fatal("Bad pop")
	}

	i, ok = s.Pop()
	if !ok || (i != 1) {
		t.Fatal("Bad pop")
	}

	i, ok = s.Pop()
	if ok {
		t.Fatal("Empty pop")
	}

	s.Push(3)
	i, ok = s.Pop()
	if !ok || (i != 3) {
		t.Fatal("Bad pop")
	}

	if !s.IsEmpty() {
		t.Fatal("Bad count")
	}

}