tests: add test for queue implementation
This commit is contained in:
@@ -1 +1,87 @@
|
||||
package queue_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/StevanFreeborn/advent-of-code-2025/internal/queue"
|
||||
)
|
||||
|
||||
func TestQueue_EnqueueDequeue(t *testing.T) {
|
||||
q := queue.New[int]()
|
||||
|
||||
q.Enqueue(1)
|
||||
q.Enqueue(2)
|
||||
q.Enqueue(3)
|
||||
|
||||
expectedValues := []int{1, 2, 3}
|
||||
|
||||
for _, expected := range expectedValues {
|
||||
value, ok := q.Dequeue()
|
||||
|
||||
if !ok {
|
||||
t.Errorf("expected dequeue to be successful, but it failed")
|
||||
}
|
||||
|
||||
if value != expected {
|
||||
t.Errorf("expected value to be %d, got %d", expected, value)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_, ok := q.Dequeue()
|
||||
|
||||
if ok {
|
||||
t.Errorf("expected dequeue to fail on empty queue, but it succeeded")
|
||||
}
|
||||
|
||||
if !q.IsEmpty() {
|
||||
t.Errorf("expected queue to be empty, but it is not")
|
||||
}
|
||||
}
|
||||
|
||||
func TestQueue_Size(t *testing.T) {
|
||||
q := queue.New[string]()
|
||||
|
||||
if q.Size() != 0 {
|
||||
t.Errorf("expected size to be 0, got %d", q.Size())
|
||||
}
|
||||
|
||||
q.Enqueue("a")
|
||||
q.Enqueue("b")
|
||||
|
||||
if q.Size() != 2 {
|
||||
t.Errorf("expected size to be 2, got %d", q.Size())
|
||||
}
|
||||
|
||||
q.Dequeue()
|
||||
|
||||
if q.Size() != 1 {
|
||||
t.Errorf("expected size to be 1, got %d", q.Size())
|
||||
}
|
||||
}
|
||||
|
||||
func TestQueue_ConcurrentAccess(t *testing.T) {
|
||||
q := queue.New[int]()
|
||||
done := make(chan bool)
|
||||
numGoroutines := 100
|
||||
numItemsPerGoroutine := 100
|
||||
|
||||
for i := range numGoroutines {
|
||||
go func(start int) {
|
||||
for j := range numItemsPerGoroutine {
|
||||
q.Enqueue(start + j)
|
||||
}
|
||||
done <- true
|
||||
}(i * numItemsPerGoroutine)
|
||||
}
|
||||
|
||||
for range numGoroutines {
|
||||
<-done
|
||||
}
|
||||
|
||||
expectedSize := numGoroutines * numItemsPerGoroutine
|
||||
|
||||
if q.Size() != expectedSize {
|
||||
t.Errorf("expected size to be %d, got %d", expectedSize, q.Size())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user