From 8049a4e0decd7b233cf2c2339ad0e57a0a029898 Mon Sep 17 00:00:00 2001 From: "Gabriel A. Giovanini" Date: Sat, 9 Dec 2023 18:14:51 +0100 Subject: Initial commit --- pipe_test.go | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 pipe_test.go (limited to 'pipe_test.go') 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 +} -- cgit v1.2.3