MCPcopy
hub / github.com/AlistGo/alist / TestConcurrentRange

Function TestConcurrentRange

pkg/generic_sync/map_test.go:16–74  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

14)
15
16func TestConcurrentRange(t *testing.T) {
17 const mapSize = 1 << 10
18
19 m := new(generic_sync.MapOf[int64, int64])
20 for n := int64(1); n <= mapSize; n++ {
21 m.Store(n, int64(n))
22 }
23
24 done := make(chan struct{})
25 var wg sync.WaitGroup
26 defer func() {
27 close(done)
28 wg.Wait()
29 }()
30 for g := int64(runtime.GOMAXPROCS(0)); g > 0; g-- {
31 r := rand.New(rand.NewSource(g))
32 wg.Add(1)
33 go func(g int64) {
34 defer wg.Done()
35 for i := int64(0); ; i++ {
36 select {
37 case <-done:
38 return
39 default:
40 }
41 for n := int64(1); n < mapSize; n++ {
42 if r.Int63n(mapSize) == 0 {
43 m.Store(n, n*i*g)
44 } else {
45 m.Load(n)
46 }
47 }
48 }
49 }(g)
50 }
51
52 iters := 1 << 10
53 if testing.Short() {
54 iters = 16
55 }
56 for n := iters; n > 0; n-- {
57 seen := make(map[int64]bool, mapSize)
58
59 m.Range(func(k, v int64) bool {
60 if v%k != 0 {
61 t.Fatalf("while Storing multiples of %v, Range saw value %v", k, v)
62 }
63 if seen[k] {
64 t.Fatalf("Range visited key %v twice", k)
65 }
66 seen[k] = true
67 return true
68 })
69
70 if len(seen) != mapSize {
71 t.Fatalf("Range visited %v elements of %v-element MapOf", len(seen), mapSize)
72 }
73 }

Callers

nothing calls this directly

Calls 6

StoreMethod · 0.80
DoneMethod · 0.80
LoadMethod · 0.80
RangeMethod · 0.80
WaitMethod · 0.65
AddMethod · 0.65

Tested by

no test coverage detected