Skip to content

Commit b533540

Browse files
Merge pull request #3 from antonio-alexander/develop
Develop
2 parents f28050b + d7f429b commit b533540

File tree

18 files changed

+1743
-7
lines changed

18 files changed

+1743
-7
lines changed

.github/workflows/go-queue.yml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: go-queue
2+
3+
on:
4+
push:
5+
release:
6+
types: [published]
7+
8+
jobs:
9+
test:
10+
runs-on: ubuntu-latest
11+
permissions:
12+
contents: read
13+
steps:
14+
- name: Check out repository code
15+
uses: actions/checkout@v2
16+
- name: Validate folder
17+
run: |
18+
cd /home/runner/work/go-queue/go-queue
19+
ls -l
20+
- name: Setup Go
21+
uses: actions/setup-go@v2
22+
with:
23+
go-version: 1.16
24+
- name: Test go-queue/finite
25+
continue-on-error: true
26+
run: |
27+
cd /home/runner/work/go-queue/go-queue/finite
28+
go mod download
29+
go test -v ./... -coverprofile /tmp/go-queue-finite.out > /tmp/go-queue-finite.log
30+
- name: Test go-queue/infinite
31+
continue-on-error: true
32+
run: |
33+
cd /home/runner/work/go-queue/go-queue/infinite
34+
go mod download
35+
go test -v ./... -coverprofile /tmp/go-queue-infinite.out > /tmp/go-queue-infinite.log
36+
- name: Upload artifacts
37+
uses: actions/upload-artifact@v2
38+
with:
39+
name: artifacts
40+
path: |
41+
/tmp/go-queue-finite.log
42+
/tmp/go-queue-infinite.log
43+
/tmp/go-queue-finite.out
44+
/tmp/go-queue-infinite.out
45+
retention-days: 1

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ All notable changes to this service will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/)
66
and this project adheres to [Semantic Versioning](http://semver.org/).
77

8+
## [1.1.0] - 11/16/21
9+
10+
- Added tests
11+
812
## [1.0.0] - 09/27/21
913

10-
* Initial version
14+
- Initial version

README.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,53 @@ for {
274274
}
275275
```
276276

277+
## Testing
278+
279+
The existing tests are implemented as "code" and can be used within your implementation's tests to "confirm" that they implement the interfaces as expected by "this" version of the go-queue package.
280+
281+
Take note that there isn't an enqueue test, this is because that's fairly specific to the implementation.
282+
283+
These are the avaialble unit tests:
284+
285+
- New: can be used to verify the constructor
286+
- GarbageCollect: can be used to verify garbage collection
287+
- Dequeue: can be used to verify dequeue
288+
- DequeueMultiple: can be used to verify dequeue multiple
289+
- Flush: can be used to verify flush
290+
- Peek: can be used to verify peek
291+
- PeekFromHead: can be used to verify peek from head
292+
293+
These are the available function/integration tests:
294+
295+
- Event: can be used to verify that event signals work as expected
296+
- Info: can be used to verify that info works as expected (finite leaning)
297+
- Queue: can be used to verify that queue works as expected (in general)
298+
- Async: can be used to verify if safe for concurrent usage
299+
300+
To use one of the tests, you can use the following code snippet. Keep in mind that in order to test, the queue/constructor needs to implement ALL of the interfaces expected by the test (and by association they need to implement those interfaces as expected).
301+
302+
```go
303+
import (
304+
"testing"
305+
306+
goqueue "github.com/antonio-alexander/go-queue"
307+
finite "github.com/antonio-alexander/go-queue/finite"
308+
309+
goqueue_tests "github.com/antonio-alexander/go-queue/tests"
310+
)
311+
312+
func TestQueue(t *testing.T) {
313+
goqueue_tests.Queue(t, func(size int) interface {
314+
goqueue.Owner
315+
goqueue.Enqueuer
316+
goqueue.Dequeuer
317+
goqueue.Info
318+
} {
319+
return finite.New(size)
320+
})
321+
}
322+
```
323+
277324
## Finite Queue
278325

279326
This is a fixed size fifo, when the queue is full, it won't allow you to place any more items inside the queue (sans EnqueueLossy). For more information, look at this [README.md](./finite/README.md).

finite/CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Change Log
2+
3+
All notable changes to this service will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](http://keepachangelog.com/)
6+
and this project adheres to [Semantic Versioning](http://semver.org/).
7+
8+
## [1.1.0] - 11/16/21
9+
10+
- Added tests
11+
12+
## [1.0.0] - 09/27/21
13+
14+
- Initial version

finite/README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,15 @@ Running Average:
7171
```go
7272
//TODO: generate code to show a running average calculation
7373
```
74+
75+
## Testing
76+
77+
Similar to the [github.com/antonio-alexander/go-queue](github.com/antonio-alexander/go-queue) package, some of the interfaces (or implementations) specific to the finite implementation, have tests that can be used to verify that your implementation matches the expected finite implementation.
78+
79+
These are the avaialble unit tests:
80+
81+
- Resize: can be used to verify the Resize() function
82+
- Enqueue: can be used to verify the Enqueue() function for finite queues
83+
- EnqueueMultiple: can be used to verify the EnqueueMultiple() function for finite queues
84+
- EnqueueInFront: can be used to verify the EnqueueInFront() function for finite queues
85+
- EnqueueLossy: can be used to verify the EnqueueLossy() function

finite/finite_test.go

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
package finite_test
2+
3+
import (
4+
"math/rand"
5+
"testing"
6+
"time"
7+
8+
goqueue "github.com/antonio-alexander/go-queue"
9+
finite "github.com/antonio-alexander/go-queue/finite"
10+
11+
finite_tests "github.com/antonio-alexander/go-queue/finite/tests"
12+
goqueue_tests "github.com/antonio-alexander/go-queue/tests"
13+
)
14+
15+
func init() {
16+
rand.Seed(int64(time.Now().Nanosecond()))
17+
}
18+
19+
func TestNew(t *testing.T) {
20+
goqueue_tests.New(t, func(size int) interface {
21+
goqueue.Owner
22+
goqueue.Info
23+
} {
24+
return finite.New(size)
25+
})
26+
}
27+
28+
func TestGarbageCollect(t *testing.T) {
29+
goqueue_tests.GarbageCollect(t, func(size int) interface {
30+
goqueue.Owner
31+
goqueue.GarbageCollecter
32+
goqueue.Enqueuer
33+
goqueue.Dequeuer
34+
goqueue.Info
35+
} {
36+
return finite.New(size)
37+
})
38+
}
39+
40+
func TestDequeue(t *testing.T) {
41+
goqueue_tests.Dequeue(t, func(size int) interface {
42+
goqueue.Owner
43+
goqueue.Enqueuer
44+
goqueue.Dequeuer
45+
goqueue.Info
46+
} {
47+
return finite.New(size)
48+
})
49+
}
50+
51+
func TestDequeueMultiple(t *testing.T) {
52+
goqueue_tests.DequeueMultiple(t, func(size int) interface {
53+
goqueue.Owner
54+
goqueue.Enqueuer
55+
goqueue.Dequeuer
56+
} {
57+
return finite.New(size)
58+
})
59+
}
60+
61+
func TestFlush(t *testing.T) {
62+
goqueue_tests.Flush(t, func(size int) interface {
63+
goqueue.Owner
64+
goqueue.Enqueuer
65+
goqueue.Dequeuer
66+
} {
67+
return finite.New(size)
68+
})
69+
}
70+
71+
func TestEnqueue(t *testing.T) {
72+
finite_tests.Enqueue(t, func(size int) interface {
73+
goqueue.Owner
74+
goqueue.Enqueuer
75+
} {
76+
return finite.New(size)
77+
})
78+
}
79+
func TestEnqueueMultiple(t *testing.T) {
80+
finite_tests.EnqueueMultiple(t, func(size int) interface {
81+
goqueue.Owner
82+
goqueue.Enqueuer
83+
} {
84+
return finite.New(size)
85+
})
86+
}
87+
88+
func TestResize(t *testing.T) {
89+
finite_tests.Resize(t, func(size int) interface {
90+
finite.Resizer
91+
goqueue.Owner
92+
goqueue.Enqueuer
93+
goqueue.Info
94+
} {
95+
return finite.New(size)
96+
})
97+
}
98+
99+
func TestEnqueueLossy(t *testing.T) {
100+
finite_tests.EnqueueLossy(t, func(size int) interface {
101+
goqueue.Owner
102+
finite.EnqueueLossy
103+
} {
104+
return finite.New(size)
105+
})
106+
}
107+
108+
func TestEnqueueInFront(t *testing.T) {
109+
finite_tests.EnqueueInFront(t, func(size int) interface {
110+
goqueue.Owner
111+
goqueue.Enqueuer
112+
goqueue.EnqueueInFronter
113+
goqueue.Peeker
114+
} {
115+
return finite.New(size)
116+
})
117+
}
118+
119+
func TestPeek(t *testing.T) {
120+
goqueue_tests.Peek(t, func(size int) interface {
121+
goqueue.Owner
122+
goqueue.Enqueuer
123+
goqueue.Dequeuer
124+
goqueue.Info
125+
goqueue.Peeker
126+
} {
127+
return finite.New(size)
128+
})
129+
}
130+
131+
func TestPeekFromHead(t *testing.T) {
132+
goqueue_tests.PeekFromHead(t, func(size int) interface {
133+
goqueue.Owner
134+
goqueue.Enqueuer
135+
goqueue.Dequeuer
136+
goqueue.Info
137+
goqueue.Peeker
138+
} {
139+
return finite.New(size)
140+
})
141+
}
142+
143+
func TestEvent(t *testing.T) {
144+
goqueue_tests.Event(t, func(size int) interface {
145+
goqueue.Owner
146+
goqueue.Enqueuer
147+
goqueue.Dequeuer
148+
goqueue.Event
149+
} {
150+
return finite.New(size)
151+
})
152+
}
153+
154+
func TestInfo(t *testing.T) {
155+
goqueue_tests.Info(t, func(size int) interface {
156+
goqueue.Owner
157+
goqueue.Enqueuer
158+
goqueue.Dequeuer
159+
goqueue.Info
160+
} {
161+
return finite.New(size)
162+
})
163+
}
164+
165+
func TestQueue(t *testing.T) {
166+
goqueue_tests.Queue(t, func(size int) interface {
167+
goqueue.Owner
168+
goqueue.Enqueuer
169+
goqueue.Dequeuer
170+
goqueue.Info
171+
} {
172+
return finite.New(size)
173+
})
174+
}
175+
176+
func TestAsync(t *testing.T) {
177+
goqueue_tests.Async(t, func(size int) interface {
178+
goqueue.Owner
179+
goqueue.Enqueuer
180+
goqueue.Dequeuer
181+
goqueue.Info
182+
} {
183+
return finite.New(size)
184+
})
185+
}

finite/go.mod

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ module github.com/antonio-alexander/go-queue/finite
22

33
go 1.16
44

5-
require github.com/antonio-alexander/go-queue v1.0.0
5+
require (
6+
github.com/antonio-alexander/go-queue v1.1.0
7+
github.com/stretchr/testify v1.7.0
8+
)

finite/go.sum

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
github.com/antonio-alexander/go-queue v1.0.0 h1:OC9V+WSIZuUDSWqJHsgM0W2ZvQMHt/RWzEyRym0immU=
2-
github.com/antonio-alexander/go-queue v1.0.0/go.mod h1:T1+MheS1/xNIsqC9JRhUcQAoRHz3buNWuDQ+D54g8lI=
1+
github.com/antonio-alexander/go-queue v1.1.0 h1:fDJdVK3ncMlGHUvp0HxMKCOxPRZeusEglqHL+0BpaCI=
2+
github.com/antonio-alexander/go-queue v1.1.0/go.mod h1:T1+MheS1/xNIsqC9JRhUcQAoRHz3buNWuDQ+D54g8lI=
3+
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
34
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
46
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
57
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
8+
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
69
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
10+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
711
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
12+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
813
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)