slice_test.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package set
  4. import (
  5. "testing"
  6. qt "github.com/frankban/quicktest"
  7. )
  8. func TestSliceSet(t *testing.T) {
  9. c := qt.New(t)
  10. var ss Slice[int]
  11. c.Check(len(ss.slice), qt.Equals, 0)
  12. ss.Add(1)
  13. c.Check(len(ss.slice), qt.Equals, 1)
  14. c.Check(len(ss.set), qt.Equals, 0)
  15. c.Check(ss.Contains(1), qt.Equals, true)
  16. c.Check(ss.Contains(2), qt.Equals, false)
  17. ss.Add(1)
  18. c.Check(len(ss.slice), qt.Equals, 1)
  19. c.Check(len(ss.set), qt.Equals, 0)
  20. ss.Add(2)
  21. ss.Add(3)
  22. ss.Add(4)
  23. ss.Add(5)
  24. ss.Add(6)
  25. ss.Add(7)
  26. ss.Add(8)
  27. c.Check(len(ss.slice), qt.Equals, 8)
  28. c.Check(len(ss.set), qt.Equals, 0)
  29. ss.Add(9)
  30. c.Check(len(ss.slice), qt.Equals, 9)
  31. c.Check(len(ss.set), qt.Equals, 9)
  32. ss.Remove(4)
  33. c.Check(len(ss.slice), qt.Equals, 8)
  34. c.Check(len(ss.set), qt.Equals, 8)
  35. c.Assert(ss.Contains(4), qt.IsFalse)
  36. // Ensure that the order of insertion is maintained
  37. c.Assert(ss.Slice().AsSlice(), qt.DeepEquals, []int{1, 2, 3, 5, 6, 7, 8, 9})
  38. ss.Add(4)
  39. c.Check(len(ss.slice), qt.Equals, 9)
  40. c.Check(len(ss.set), qt.Equals, 9)
  41. c.Assert(ss.Contains(4), qt.IsTrue)
  42. c.Assert(ss.Slice().AsSlice(), qt.DeepEquals, []int{1, 2, 3, 5, 6, 7, 8, 9, 4})
  43. ss.Add(1, 234, 556)
  44. c.Assert(ss.Slice().AsSlice(), qt.DeepEquals, []int{1, 2, 3, 5, 6, 7, 8, 9, 4, 234, 556})
  45. }