1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
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)
}
|