package containers_test import ( "testing" "git.mstar.dev/mstar/goutils/containers" "git.mstar.dev/mstar/goutils/other" ) func TestStack(t *testing.T) { stack := containers.BuildStack[int]() elem, err := stack.Top() switch err { case containers.ErrEmptyQueue: // Expected, continue case containers.ErrInvalidQueue: t.Fatal("New queue is invalid") case nil: t.Fatalf("New queue shouldn't have any elements yet: %v", elem) } elem, err = stack.Pop() switch err { case containers.ErrEmptyQueue: // Expected, continue case containers.ErrInvalidQueue: t.Fatal("New queue is invalid") case nil: t.Fatalf("New queue shouldn't have any elements yet: %v", elem) } if !stack.IsEmpty() { t.Fatal("New queue isn't empty") } if err = stack.Push(other.IntoPointer(10)); err != nil { t.Fatal("Failed to push value onto new queue") } if stack.IsEmpty() { t.Fatal("Queue is empty after pushing a value") } elem, err = stack.Top() if err != nil { t.Fatalf("Failed to get top element from queue after inserting one: %v", err) } switch { case elem == nil: t.Fatal("Got nil elem; want &10") case *elem == 10: // Expected, continue default: t.Fatalf("Got %v; want &10", *elem) } if err = stack.Push(other.IntoPointer(20)); err != nil { t.Fatal("Failed to push value onto queue") } elem, err = stack.Top() if err != nil { t.Fatalf("Failed to get top element from queue after inserting one: %v", err) } switch { case elem == nil: t.Fatal("Got nil elem; want &20") case *elem == 20: // Expected, continue default: t.Fatalf("Got %v; want &20", *elem) } if stack.IsEmpty() { t.Fatal("Top shouldn't pop an element from the queue") } elem, err = stack.Pop() if err != nil { t.Fatalf("Expected no error while popping a value: %v", err) } switch { case elem == nil: t.Fatal("Got nil elem; want &20") case *elem == 20: // Expected, continue default: t.Fatalf("Got %v; want &20", *elem) } if stack.IsEmpty() { t.Fatal("Queue should still have one element left") } elem, err = stack.Pop() if err != nil { t.Fatalf("Expected no error while popping a value: %v", err) } switch { case elem == nil: t.Fatal("Got nil elem; want &10") case *elem == 10: // Expected, continue default: t.Fatalf("Got %v; want &10", *elem) } if !stack.IsEmpty() { t.Fatal("Queue should be empty now") } }