github.com/JimmyHuang454/JLS-go@v0.0.0-20230831150107-90d536585ba0/internal/fuzz/queue_test.go (about) 1 // Copyright 2021 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package fuzz 6 7 import "testing" 8 9 func TestQueue(t *testing.T) { 10 // Zero valued queue should have 0 length and capacity. 11 var q queue 12 if n := q.len; n != 0 { 13 t.Fatalf("empty queue has len %d; want 0", n) 14 } 15 if n := q.cap(); n != 0 { 16 t.Fatalf("empty queue has cap %d; want 0", n) 17 } 18 19 // As we add elements, len should grow. 20 N := 32 21 for i := 0; i < N; i++ { 22 q.enqueue(i) 23 if n := q.len; n != i+1 { 24 t.Fatalf("after adding %d elements, queue has len %d", i, n) 25 } 26 if v, ok := q.peek(); !ok { 27 t.Fatalf("couldn't peek after adding %d elements", i) 28 } else if v.(int) != 0 { 29 t.Fatalf("after adding %d elements, peek is %d; want 0", i, v) 30 } 31 } 32 33 // As we remove and add elements, len should shrink and grow. 34 // We should also remove elements in the same order they were added. 35 want := 0 36 for _, r := range []int{1, 2, 3, 5, 8, 13, 21} { 37 s := make([]int, 0, r) 38 for i := 0; i < r; i++ { 39 if got, ok := q.dequeue(); !ok { 40 t.Fatalf("after removing %d of %d elements, could not dequeue", i+1, r) 41 } else if got != want { 42 t.Fatalf("after removing %d of %d elements, got %d; want %d", i+1, r, got, want) 43 } else { 44 s = append(s, got.(int)) 45 } 46 want = (want + 1) % N 47 if n := q.len; n != N-i-1 { 48 t.Fatalf("after removing %d of %d elements, len is %d; want %d", i+1, r, n, N-i-1) 49 } 50 } 51 for i, v := range s { 52 q.enqueue(v) 53 if n := q.len; n != N-r+i+1 { 54 t.Fatalf("after adding back %d of %d elements, len is %d; want %d", i+1, r, n, n-r+i+1) 55 } 56 } 57 } 58 }