diff --git a/main.go b/main.go index b37c814..084c41f 100644 --- a/main.go +++ b/main.go @@ -37,12 +37,18 @@ func sender(c chan signalData) { } func receiver(c chan signalData) { + // handle memory leak cause time.After + idleDuration := time.Second * 1 + idleTimeout := time.NewTimer(idleDuration) + defer idleTimeout.Stop() + for { + idleTimeout.Reset(idleDuration) select { case signalData := <-c: signalData.status = validateSignal(signalData.signal) fmt.Println("Receiving Signal ", signalData.signal, " with status ", signalData.status) - case <-time.After(time.Second * 1): + case <-idleTimeout.C: fmt.Println("Got timeout while receiving the signal") return } @@ -97,8 +103,8 @@ func evaluateNode(node1, node2 int) int { switch { case node2 > node1: return 1 - case node2 < node1: - return 0 + case node1 == 1 && node2 == 1: + return 1 default: return 0 } diff --git a/main_test.go b/main_test.go index 95db6fe..0c404ab 100644 --- a/main_test.go +++ b/main_test.go @@ -21,6 +21,13 @@ func Test_validateSignal(t *testing.T) { }, want: "good", }, + { + name: "good signal 2", + args: args{ + signal: []int{0, 0, 1, 0, 0, 1}, + }, + want: "good", + }, { name: "bad signal", args: args{ @@ -28,6 +35,13 @@ func Test_validateSignal(t *testing.T) { }, want: "bad", }, + { + name: "bad signal 2", + args: args{ + signal: []int{1, 0, 1, 0, 0, 0}, + }, + want: "bad", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -82,7 +96,7 @@ func Test_evaluateNode(t *testing.T) { want int }{ { - name: "test1", + name: "bad when first is greater than last", args: args{ node1: 1, node2: 0, @@ -90,9 +104,25 @@ func Test_evaluateNode(t *testing.T) { want: 0, }, { - name: "test2", + name: "good when first less than last", + args: args{ + node1: 0, + node2: 1, + }, + want: 1, + }, + { + name: "bad when first and last node is 0", args: args{ node1: 0, + node2: 0, + }, + want: 0, + }, + { + name: "good when first and last node is 1", + args: args{ + node1: 1, node2: 1, }, want: 1,