shardedmap_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package syncs
  4. import "testing"
  5. func TestShardedMap(t *testing.T) {
  6. m := NewShardedMap[int, string](16, func(i int) int { return i % 16 })
  7. if m.Contains(1) {
  8. t.Errorf("got contains; want !contains")
  9. }
  10. if !m.Set(1, "one") {
  11. t.Errorf("got !set; want set")
  12. }
  13. if m.Set(1, "one") {
  14. t.Errorf("got set; want !set")
  15. }
  16. if !m.Contains(1) {
  17. t.Errorf("got !contains; want contains")
  18. }
  19. if g, w := m.Get(1), "one"; g != w {
  20. t.Errorf("got %q; want %q", g, w)
  21. }
  22. if _, ok := m.GetOk(1); !ok {
  23. t.Errorf("got ok; want !ok")
  24. }
  25. if _, ok := m.GetOk(2); ok {
  26. t.Errorf("got ok; want !ok")
  27. }
  28. if g, w := m.Len(), 1; g != w {
  29. t.Errorf("got Len %v; want %v", g, w)
  30. }
  31. if m.Delete(2) {
  32. t.Errorf("got deleted; want !deleted")
  33. }
  34. if !m.Delete(1) {
  35. t.Errorf("got !deleted; want deleted")
  36. }
  37. if g, w := m.Len(), 0; g != w {
  38. t.Errorf("got Len %v; want %v", g, w)
  39. }
  40. // Mutation adding an entry.
  41. if v := m.Mutate(1, func(was string, ok bool) (string, bool) {
  42. if ok {
  43. t.Fatal("was okay")
  44. }
  45. return "ONE", true
  46. }); v != 1 {
  47. t.Errorf("Mutate = %v; want 1", v)
  48. }
  49. if g, w := m.Get(1), "ONE"; g != w {
  50. t.Errorf("got %q; want %q", g, w)
  51. }
  52. // Mutation changing an entry.
  53. if v := m.Mutate(1, func(was string, ok bool) (string, bool) {
  54. if !ok {
  55. t.Fatal("wasn't okay")
  56. }
  57. return was + "-" + was, true
  58. }); v != 0 {
  59. t.Errorf("Mutate = %v; want 0", v)
  60. }
  61. if g, w := m.Get(1), "ONE-ONE"; g != w {
  62. t.Errorf("got %q; want %q", g, w)
  63. }
  64. // Mutation removing an entry.
  65. if v := m.Mutate(1, func(was string, ok bool) (string, bool) {
  66. if !ok {
  67. t.Fatal("wasn't okay")
  68. }
  69. return "", false
  70. }); v != -1 {
  71. t.Errorf("Mutate = %v; want -1", v)
  72. }
  73. if g, w := m.Get(1), ""; g != w {
  74. t.Errorf("got %q; want %q", g, w)
  75. }
  76. }