ringbuffer_test.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package ringbuffer
  4. import (
  5. "reflect"
  6. "testing"
  7. )
  8. func TestRingBuffer(t *testing.T) {
  9. const numItems = 10
  10. rb := New[int](numItems)
  11. for i := 0; i < numItems-1; i++ {
  12. rb.Add(i)
  13. }
  14. t.Run("NotFull", func(t *testing.T) {
  15. if ll := rb.Len(); ll != numItems-1 {
  16. t.Fatalf("got len %d; want %d", ll, numItems-1)
  17. }
  18. all := rb.GetAll()
  19. want := []int{0, 1, 2, 3, 4, 5, 6, 7, 8}
  20. if !reflect.DeepEqual(all, want) {
  21. t.Fatalf("items mismatch\ngot: %v\nwant %v", all, want)
  22. }
  23. })
  24. t.Run("Full", func(t *testing.T) {
  25. // Append items to evict something
  26. rb.Add(98)
  27. rb.Add(99)
  28. if ll := rb.Len(); ll != numItems {
  29. t.Fatalf("got len %d; want %d", ll, numItems)
  30. }
  31. all := rb.GetAll()
  32. want := []int{1, 2, 3, 4, 5, 6, 7, 8, 98, 99}
  33. if !reflect.DeepEqual(all, want) {
  34. t.Fatalf("items mismatch\ngot: %v\nwant %v", all, want)
  35. }
  36. })
  37. t.Run("Clear", func(t *testing.T) {
  38. rb.Clear()
  39. if ll := rb.Len(); ll != 0 {
  40. t.Fatalf("got len %d; want 0", ll)
  41. }
  42. all := rb.GetAll()
  43. if len(all) != 0 {
  44. t.Fatalf("got non-empty list; want empty")
  45. }
  46. })
  47. }