cubefs

Форк
0
/
unbounded_chan_test.go 
67 строк · 1.6 Кб
1
// Copyright 2023 The CubeFS Authors.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
12
// implied. See the License for the specific language governing
13
// permissions and limitations under the License.
14

15
package unboundedchan
16

17
import (
18
	"sync"
19
	"testing"
20
)
21

22
func TestWriteReadUnboundedChan(t *testing.T) {
23
	// concurrent write and read unbounded chan
24
	UChan := NewUnboundedChan(10)
25
	var wg sync.WaitGroup
26
	for i := 0; i < 100; i++ {
27
		wg.Add(1)
28
		go func(i int) {
29
			defer wg.Done()
30
			t.Logf("In <- %v", i)
31
			UChan.In <- i
32
		}(i)
33
	}
34

35
	var wg2 sync.WaitGroup
36
	wg2.Add(1)
37
	go func() {
38
		defer wg2.Done()
39
		var total int
40
		values := make(map[int]int)
41
		for v := range UChan.Out {
42
			val, ok := v.(int)
43
			t.Logf("val(%v), ok(%v)", val, ok)
44
			v1, ok := values[val]
45
			if ok {
46
				t.Fatalf("value(%v) is not expected to be in UnboundedChan multiple times", v1)
47
			} else {
48
				values[val] = val
49
			}
50
			if v1 >= 100 || v1 < 0 {
51
				t.Fatalf("value(%v) is expected in range 0-99", v1)
52
			}
53
			total++
54
		}
55
		if total != 100 {
56
			t.Fatalf("expected total num(%v), got(%v)", 100, total)
57
		}
58
		t.Logf("total: %v", total)
59
	}()
60

61
	wg.Wait()
62
	close(UChan.In)
63
	t.Logf("UChan closed")
64

65
	wg2.Wait()
66
	t.Logf("finish")
67
}
68

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.