-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy pathmyqueue_test.go
131 lines (111 loc) · 1.77 KB
/
myqueue_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package myqueue
import (
"fmt"
"runtime"
"testing"
"time"
)
func TestWait(t *testing.T) {
que := New()
for i := 0; i < 10; i++ { //开启20个请求
que.Push(i)
}
go func() {
for {
fmt.Println(que.Pop().(int))
time.Sleep(1 * time.Second)
}
}()
go func() {
for {
fmt.Println(que.Pop().(int))
time.Sleep(1 * time.Second)
}
}()
que.Wait()
fmt.Println("down")
}
func TestClose(t *testing.T) {
que := New()
for i := 0; i < 10; i++ { //开启20个请求
que.Push(i)
}
go func() {
for {
v := que.Pop()
if v != nil {
fmt.Println(v.(int))
time.Sleep(1 * time.Second)
}
}
}()
go func() {
for {
v := que.Pop()
if v != nil {
fmt.Println(v.(int))
time.Sleep(1 * time.Second)
}
}
}()
que.Close()
que.Wait()
fmt.Println("down")
}
func TestTry(t *testing.T) {
que := New()
go func() {
for {
v, ok := que.TryPop()
if !ok {
fmt.Println("no")
time.Sleep(time.Second / 2)
runtime.Gosched() //出让时间片
}
if v != nil {
fmt.Println(v.(int))
}
}
}()
go func() {
for {
v, ok := que.TryPop()
if !ok {
fmt.Println("no")
time.Sleep(time.Second / 2)
runtime.Gosched() //出让时间片
}
if v != nil {
fmt.Println(v.(int))
}
}
}()
for i := 0; i < 10; i++ { //开启20个请求
que.Push(i)
time.Sleep(1 * time.Second)
}
que.Wait()
fmt.Println("down")
}
func TestTimeout(t *testing.T) {
que := New()
go func() {
for i := 0; i < 10; i++ { //开启20个请求
time.Sleep(1 * time.Second)
que.Push(i)
}
}()
go func() {
for {
b, ok := que.TryPopTimeout(100 * time.Microsecond)
if ok {
fmt.Println(b.(int))
} else {
fmt.Println("time out")
}
}
}()
time.Sleep(200 * time.Second)
que.Wait()
fmt.Println("down")
}