summaryrefslogtreecommitdiffstats
path: root/common/collections/stack_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'common/collections/stack_test.go')
-rw-r--r--common/collections/stack_test.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/common/collections/stack_test.go b/common/collections/stack_test.go
new file mode 100644
index 000000000..965d4dbc8
--- /dev/null
+++ b/common/collections/stack_test.go
@@ -0,0 +1,77 @@
+package collections
+
+import (
+ "testing"
+
+ qt "github.com/frankban/quicktest"
+)
+
+func TestNewStack(t *testing.T) {
+ t.Parallel()
+ c := qt.New(t)
+
+ s := NewStack[int]()
+
+ c.Assert(s, qt.IsNotNil)
+}
+
+func TestStackBasic(t *testing.T) {
+ t.Parallel()
+ c := qt.New(t)
+
+ s := NewStack[int]()
+
+ c.Assert(s.Len(), qt.Equals, 0)
+
+ s.Push(1)
+ s.Push(2)
+ s.Push(3)
+
+ c.Assert(s.Len(), qt.Equals, 3)
+
+ top, ok := s.Peek()
+ c.Assert(ok, qt.Equals, true)
+ c.Assert(top, qt.Equals, 3)
+
+ popped, ok := s.Pop()
+ c.Assert(ok, qt.Equals, true)
+ c.Assert(popped, qt.Equals, 3)
+
+ c.Assert(s.Len(), qt.Equals, 2)
+
+ _, _ = s.Pop()
+ _, _ = s.Pop()
+ _, ok = s.Pop()
+
+ c.Assert(ok, qt.Equals, false)
+}
+
+func TestStackDrain(t *testing.T) {
+ t.Parallel()
+ c := qt.New(t)
+
+ s := NewStack[string]()
+ s.Push("a")
+ s.Push("b")
+
+ got := s.Drain()
+
+ c.Assert(got, qt.DeepEquals, []string{"a", "b"})
+ c.Assert(s.Len(), qt.Equals, 0)
+}
+
+func TestStackDrainMatching(t *testing.T) {
+ t.Parallel()
+ c := qt.New(t)
+
+ s := NewStack[int]()
+ s.Push(1)
+ s.Push(2)
+ s.Push(3)
+ s.Push(4)
+
+ got := s.DrainMatching(func(v int) bool { return v%2 == 0 })
+
+ c.Assert(got, qt.DeepEquals, []int{4, 2})
+ c.Assert(s.Drain(), qt.DeepEquals, []int{1, 3})
+}