1 package genstack
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7 )
8
9 func requirePopEmpty[T any](t testing.TB, s *GenStack[T]) {
10 v, ok := s.Pop()
11 require.False(t, ok)
12 require.Zero(t, v)
13 }
14
15 func requirePop[T any](t testing.TB, s *GenStack[T], expected T) {
16 v, ok := s.Pop()
17 require.True(t, ok)
18 require.Equal(t, expected, v)
19 }
20
21 func TestGenStack_Empty(t *testing.T) {
22 s := NewGenStack[int]()
23 requirePopEmpty(t, s)
24 }
25
26 func TestGenStack_SingleGen(t *testing.T) {
27 r := require.New(t)
28 s := NewGenStack[int]()
29
30 s.Push(1)
31 s.Push(2)
32 r.Equal(2, s.Len())
33
34 requirePop(t, s, 2)
35 requirePop(t, s, 1)
36 requirePopEmpty(t, s)
37 }
38
39 func TestGenStack_TwoGen(t *testing.T) {
40 r := require.New(t)
41 s := NewGenStack[int]()
42
43 s.Push(3)
44 s.Push(4)
45 s.Push(5)
46 r.Equal(3, s.Len())
47 s.NextGen()
48 r.Equal(3, s.Len())
49 s.Push(6)
50 s.Push(7)
51 r.Equal(5, s.Len())
52
53 requirePop(t, s, 5)
54 requirePop(t, s, 4)
55 requirePop(t, s, 3)
56 requirePop(t, s, 7)
57 requirePop(t, s, 6)
58 requirePopEmpty(t, s)
59 }
60
61 func TestGenStack_MuptiGen(t *testing.T) {
62 r := require.New(t)
63 s := NewGenStack[int]()
64
65 s.Push(10)
66 s.Push(11)
67 s.Push(12)
68 r.Equal(3, s.Len())
69 s.NextGen()
70 r.Equal(3, s.Len())
71 s.Push(13)
72 s.Push(14)
73 r.Equal(5, s.Len())
74 s.NextGen()
75 r.Equal(5, s.Len())
76 s.Push(15)
77 s.Push(16)
78 s.Push(17)
79 r.Equal(8, s.Len())
80
81 requirePop(t, s, 12)
82 requirePop(t, s, 11)
83 requirePop(t, s, 10)
84 requirePop(t, s, 14)
85 requirePop(t, s, 13)
86 requirePop(t, s, 17)
87 requirePop(t, s, 16)
88 requirePop(t, s, 15)
89 requirePopEmpty(t, s)
90 }
91
View as plain text