Use generational stack for idle connections
This commit is contained in:
committed by
Jack Christensen
parent
3009dbab62
commit
d970a39050
@@ -0,0 +1,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)
|
||||
}
|
||||
Reference in New Issue
Block a user