aboutsummaryrefslogtreecommitdiff
path: root/pipe_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pipe_test.go')
-rw-r--r--pipe_test.go122
1 files changed, 122 insertions, 0 deletions
diff --git a/pipe_test.go b/pipe_test.go
new file mode 100644
index 0000000..804adcc
--- /dev/null
+++ b/pipe_test.go
@@ -0,0 +1,122 @@
+//go:build unit
+
+package pipe
+
+import (
+ "testing"
+)
+
+const (
+ Values = 999
+ Multiplier = 1000
+)
+
+type buffer struct {
+ value int
+}
+
+func TestProc(t *testing.T) {
+ c := createCountPipe()
+ am := Proc(c, 8, multiply)
+ ad := Proc(am, 8, devide)
+ a := Proc(ad, 8, multiply)
+
+ out := make([]int, Values-1)
+
+ count := 0
+ for i := range a {
+ out[count] = i
+ count++
+ }
+
+ for _, v := range out {
+ if v < Multiplier {
+ t.Errorf("Invalid output %d", v)
+ }
+ }
+}
+
+func TestYield(t *testing.T) {
+ lin := make([]int, Values)
+
+ for i := 0; i < Values; i++ {
+ lin[i] = i
+ }
+
+ cout := Yield(lin)
+
+ count := 0
+ for out := range cout {
+ if out != lin[count] {
+ t.Errorf("Invalid output %d", out)
+ }
+ count++
+ }
+}
+
+func TestTailProc(t *testing.T) {
+ buffers := createBuffers()
+ c := Yield(buffers)
+ am := Proc(c, 8, multiplyBuffer)
+ TailProc(am, 8, devideBuffer)
+
+ for i, v := range buffers {
+ if v.value != i {
+ t.Errorf("Invalid output %d != %d", v.value, i)
+ }
+ }
+}
+
+func TestWait(t *testing.T) {
+ buffers := createBuffers()
+ c := Yield(buffers)
+ am := Proc(c, 8, multiplyBuffer)
+ Wait(am)
+
+ for i, v := range buffers {
+ if v.value != (i * Multiplier) {
+ t.Errorf("Invalid output %d != %d", v.value, i)
+ }
+ }
+}
+
+func devideBuffer(in *buffer) error {
+ in.value = in.value / Multiplier
+ return nil
+}
+
+func createBuffers() []*buffer {
+ buffers := make([]*buffer, Values)
+
+ for i := 0; i < Values; i++ {
+ buffers[i] = &buffer{value: i}
+ }
+
+ return buffers
+}
+
+func multiplyBuffer(in *buffer) (*buffer, error) {
+ in.value = in.value * Multiplier
+ return in, nil
+}
+
+func createCountPipe() <-chan int {
+ cout := make(chan int)
+
+ go func(<-chan int) {
+ for i := 1; i < Values; i++ {
+ cout <- i
+ }
+ close(cout)
+ }(cout)
+
+ return cout
+}
+
+func multiply(in int) (int, error) {
+ return in * Multiplier, nil
+}
+
+func devide(in int) (int, error) {
+ return in / Multiplier, nil
+}