From 57f91ce6a69efeb763d16ba0cf4623db64247cde Mon Sep 17 00:00:00 2001 From: rashikshrestha <073bex432.rashik@pcampus.edu.np> Date: Sun, 19 Jul 2020 22:01:28 +0545 Subject: [PATCH 1/2] new branch formed --- core/basic/avg.go | 0 core/basic/avg_test.go | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 core/basic/avg.go create mode 100644 core/basic/avg_test.go diff --git a/core/basic/avg.go b/core/basic/avg.go new file mode 100644 index 0000000..e69de29 diff --git a/core/basic/avg_test.go b/core/basic/avg_test.go new file mode 100644 index 0000000..e69de29 From d2c80699f01d98303e05130750802b8bd9960a3f Mon Sep 17 00:00:00 2001 From: rashikshrestha <073bex432.rashik@pcampus.edu.np> Date: Fri, 31 Jul 2020 13:10:47 +0545 Subject: [PATCH 2/2] avg.go and avg.test updated --- core/basic/avg.go | 50 +++++++++++++++++++++++++++++++++++++ core/basic/avg_test.go | 56 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) diff --git a/core/basic/avg.go b/core/basic/avg.go index e69de29..2cddd76 100644 --- a/core/basic/avg.go +++ b/core/basic/avg.go @@ -0,0 +1,50 @@ +package basic + +import ( + "github.com/n-is/stream-math/utils/cast" +) + +// Avg type +type Avg struct { + avg float64 +} + +// InitAvg function +func InitAvg() *Avg { + return &Avg{ + avg: 0, + } +} + +// GetAvg function +func GetAvg(preAvg float64, v interface{}, n float64) float64 { + newAvg := preAvg + + if val, ok := cast.TryFloat(v); ok { + newAvg = (preAvg*n + val) / (n + 1) + } + + return newAvg +} + +// StreamAvg method +func (a *Avg) StreamAvg(arr []float64) { + a.avg = 0 + + for i := 0; i < len(arr); i++ { + a.avg = GetAvg(a.avg, arr[i], float64(i)) + } + +} + +// func main() { +// fmt.Println("Beginning ... ") + +// var numberStream = []float64{1000, 2, 3, 17, 50} +// a := InitAvg() + +// a.StreamAvg(numberStream) +// fmt.Println("Stream Average is :", a.avg) + +// fmt.Println("End ... ") +// } diff --git a/core/basic/avg_test.go b/core/basic/avg_test.go index e69de29..5a22f45 100644 --- a/core/basic/avg_test.go +++ b/core/basic/avg_test.go @@ -0,0 +1,56 @@ +package basic + +import ( + "math/rand" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestAvg(t *testing.T) { + + t.Run("Natural Numbers Avg", func(t *testing.T) { + // Generate data + data := make([]float64, 50) + for i := 0; i < len(data); i++ { + data[i] = float64(i + 1) + } + + // Find Calculated Avg + sum := float64(0) + for i := 0; i < len(data); i++ { + sum += data[i] + } + calculatedAverage := sum / float64(len(data)) + + // Find Stream Avg + streamAverage := InitAvg() + streamAverage.StreamAvg(data) + + // Compare the results + assert.Equal(t, calculatedAverage, streamAverage.avg) + }) + + t.Run("Random Numbers Avg", func(t *testing.T) { + // Generate data + data := make([]float64, 50) + for i := 0; i < len(data); i++ { + data[i] = (rand.Float64() - 0.5) * float64(i) + } + + // Find Calculated Avg + sum := float64(0) + for i := 0; i < len(data); i++ { + sum += data[i] + } + calculatedAverage := sum / float64(len(data)) + + // Find Stream Avg + streamAverage := InitAvg() + streamAverage.StreamAvg(data) + + // Compare the results + assert.Equal(t, calculatedAverage, streamAverage.avg) + }) + +}