91 lines
1.5 KiB
Go
91 lines
1.5 KiB
Go
package genstack
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func requirePopEmpty[T any](t testing.TB, s *GenStack[T]) {
|
|
v, ok := s.Pop()
|
|
require.False(t, ok)
|
|
require.Zero(t, v)
|
|
}
|
|
|
|
func requirePop[T any](t testing.TB, s *GenStack[T], expected T) {
|
|
v, ok := s.Pop()
|
|
require.True(t, ok)
|
|
require.Equal(t, expected, v)
|
|
}
|
|
|
|
func TestGenStack_Empty(t *testing.T) {
|
|
s := NewGenStack[int]()
|
|
requirePopEmpty(t, s)
|
|
}
|
|
|
|
func TestGenStack_SingleGen(t *testing.T) {
|
|
r := require.New(t)
|
|
s := NewGenStack[int]()
|
|
|
|
s.Push(1)
|
|
s.Push(2)
|
|
r.Equal(2, s.Len())
|
|
|
|
requirePop(t, s, 2)
|
|
requirePop(t, s, 1)
|
|
requirePopEmpty(t, s)
|
|
}
|
|
|
|
func TestGenStack_TwoGen(t *testing.T) {
|
|
r := require.New(t)
|
|
s := NewGenStack[int]()
|
|
|
|
s.Push(3)
|
|
s.Push(4)
|
|
s.Push(5)
|
|
r.Equal(3, s.Len())
|
|
s.NextGen()
|
|
r.Equal(3, s.Len())
|
|
s.Push(6)
|
|
s.Push(7)
|
|
r.Equal(5, s.Len())
|
|
|
|
requirePop(t, s, 5)
|
|
requirePop(t, s, 4)
|
|
requirePop(t, s, 3)
|
|
requirePop(t, s, 7)
|
|
requirePop(t, s, 6)
|
|
requirePopEmpty(t, s)
|
|
}
|
|
|
|
func TestGenStack_MuptiGen(t *testing.T) {
|
|
r := require.New(t)
|
|
s := NewGenStack[int]()
|
|
|
|
s.Push(10)
|
|
s.Push(11)
|
|
s.Push(12)
|
|
r.Equal(3, s.Len())
|
|
s.NextGen()
|
|
r.Equal(3, s.Len())
|
|
s.Push(13)
|
|
s.Push(14)
|
|
r.Equal(5, s.Len())
|
|
s.NextGen()
|
|
r.Equal(5, s.Len())
|
|
s.Push(15)
|
|
s.Push(16)
|
|
s.Push(17)
|
|
r.Equal(8, s.Len())
|
|
|
|
requirePop(t, s, 12)
|
|
requirePop(t, s, 11)
|
|
requirePop(t, s, 10)
|
|
requirePop(t, s, 14)
|
|
requirePop(t, s, 13)
|
|
requirePop(t, s, 17)
|
|
requirePop(t, s, 16)
|
|
requirePop(t, s, 15)
|
|
requirePopEmpty(t, s)
|
|
}
|