MCPcopy Create free account
hub / github.com/blindlobstar/go-interview-problems / TestConcurrentQueue

Function TestConcurrentQueue

10-concurrent-queue/task_test.go:82–131  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

80}
81
82func TestConcurrentQueue(t *testing.T) {
83 queue := NewQueue(1000)
84 ctx, cancel := context.WithCancel(context.Background())
85 defer cancel()
86
87 var wg sync.WaitGroup
88 wg.Add(1000)
89 for i := range 1000 {
90 go func() {
91 defer wg.Done()
92 queue.Push(i + 1)
93 }()
94 }
95
96 ch := make(chan int, 1000)
97 go func() {
98 defer close(ch)
99 for {
100 select {
101 case <-ctx.Done():
102 return
103 default:
104 if val := queue.Pop(); val != -1 {
105 ch <- val
106 }
107 }
108 }
109 }()
110
111 go func() {
112 wg.Wait()
113 time.Sleep(100 * time.Millisecond)
114 cancel()
115 }()
116
117 var result []int
118 for val := range ch {
119 result = append(result, val)
120 }
121
122 expected := make([]int, 1000)
123 for i := range 1000 {
124 expected[i] = i + 1
125 }
126
127 sort.Ints(result)
128 if !reflect.DeepEqual(result, expected) {
129 t.Errorf("Expected: 1..1000, got: %v", result)
130 }
131}

Callers

nothing calls this directly

Calls 3

PushMethod · 0.95
PopMethod · 0.95
NewQueueFunction · 0.70

Tested by

no test coverage detected