package genstack
import (
"fmt"
"testing"
"time"
"math/rand"
)
func TestSingle(t *testing.T) {
fmt.Println("Single test")
var s Stack
if !s.Empty() {
t.Error("New stack not empty.")
}
s.Push(23)
if s.Empty() {
t.Error("Singleton stack empty.")
}
r,ok := s.Pop()
if ok {
if r.(int) != 23 {
t.Error("Incorrect value popped from singleton stack. ",
r.(int), "instead of 23.")
}
} else {
t.Error("Unable to pop singleton stack.")
}
if !s.Empty() {
t.Error("Popped singleton stack not empty.")
}
}
func TestReverse(t *testing.T) {
fmt.Println("Reverse test")
const N = 40
rand.Seed(time.Now().UnixNano())
// Push some random numbers onto the stack, and into an array.
var s1 Stack
values := make([]int,0)
for i := 0; i < N; i++ {
val := rand.Intn(50000) - 100000
s1.Push(val)
values = append(values, val)
}
// See if the same values come off in reverse order.
for i := N-1; i >= 0; i-- {
val,ok := s1.Pop()
if ok {
if val.(int) != values[i] {
t.Error("Incorrect popped value")
}
} else {
t.Error("Stack pop should not have failed.")
}
}
if !s1.Empty() {
t.Error("Stack should be empty")
}
}