summaryrefslogtreecommitdiffstats
path: root/queue_test.go
blob: a9946208a59a406d7fa983907d5440ae5fe72b38 (plain) (blame)
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
package share_test

import (
	"sync"
	"testing"

	"github.com/sam-rba/share"
)

func TestQueue(t *testing.T) {
	q := share.NewQueue[string]()
	vals := []string{"foo", "bar", "baz", "xyz"}
	var wg sync.WaitGroup

	// Producer
	wg.Add(1)
	go func() {
		defer wg.Done()
		for _, v := range vals {
			q.Enqueue <- v
		}
		close(q.Enqueue)
	}()

	// Consumer
	wg.Add(1)
	go func() {
		defer wg.Done()
		i := 0
		for front := range q.Dequeue {
			t.Log("received", front, "from queue")
			if i >= len(vals) {
				t.Fatal("received too many elements from queue")
			}
			if front != vals[i] {
				t.Fatalf("received %v from queue; wanted %v", front, vals[i])
			}
			i++
		}
		if i < len(vals) {
			t.Fatal("did not receive enough values from queue")
		}
	}()

	wg.Wait()
}