package extypes import ( "log" "testing" ) func ExampleCreateQueue() { q := CreateQueue[int](16) err := q.Enqueue(1) if err != nil { panic(err) } i, err := q.Dequeue() // <- Here we got 1 if err != nil { panic(err) } log.Println(i) } func BenchmarkQueue_Enqueue(b *testing.B) { b.StartTimer() q := CreateQueue[int](uint64(b.N)) for i := 0; i < b.N; i++ { if err := q.Enqueue(i); err != nil { b.Fatal(err) } } b.StopTimer() b.ReportAllocs() } func BenchmarkQueue_Dequeue(b *testing.B) { q := CreateQueue[int](uint64(b.N)) for i := 0; i < b.N; i++ { if err := q.Enqueue(i); err != nil { b.Fatal(err) } } b.StartTimer() for i := 0; i < b.N; i++ { if _, err := q.Dequeue(); err != nil { b.Fatal(err) } } b.StopTimer() b.ReportAllocs() } func BenchmarkQueue_EnqueueDequeue(b *testing.B) { b.StartTimer() q := CreateQueue[int](uint64(b.N)) for i := 0; i < b.N; i++ { if err := q.Enqueue(i); err != nil { b.Fatal(err) } } for i := 0; i < b.N; i++ { if _, err := q.Dequeue(); err != nil { b.Fatal(err) } } b.StopTimer() b.ReportAllocs() } func TestQueue_Empty(t *testing.T) { q := CreateQueue[int](1) if _, err := q.Peak(); err != QueueEmptyErr { t.Fatalf("Peak() error = %v, want %v", err, QueueEmptyErr) } if _, err := q.Dequeue(); err != QueueEmptyErr { t.Fatalf("Dequeue() error = %v, want %v", err, QueueEmptyErr) } } func TestQueue_BasicOperations(t *testing.T) { q := CreateQueue[int](2) if err := q.Enqueue(1); err != nil { t.Fatal(err) } if err := q.Enqueue(2); err != nil { t.Fatal(err) } if err := q.Enqueue(3); err != QueueFullErr { t.Fatalf("Enqueue() error = %v, want %v", err, QueueFullErr) } head, err := q.Peak() if err != nil { t.Fatal(err) } if head != 1 { t.Fatalf("Peak() = %d, want 1", head) } first, err := q.Dequeue() if err != nil { t.Fatal(err) } if first != 1 { t.Fatalf("Dequeue() = %d, want 1", first) } second, err := q.Dequeue() if err != nil { t.Fatal(err) } if second != 2 { t.Fatalf("Dequeue() = %d, want 2", second) } } func TestQueue_RawReturnsCopy(t *testing.T) { q := CreateQueue[int](2) if err := q.Enqueue(1); err != nil { t.Fatal(err) } raw := q.Raw() raw[0] = 99 head, err := q.Peak() if err != nil { t.Fatal(err) } if head != 1 { t.Fatalf("Peak() = %d, want 1", head) } }