|
|
@@ -0,0 +1,104 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "errors"
|
|
|
+ "fmt"
|
|
|
+ "io"
|
|
|
+ "testing"
|
|
|
+ "testing/iotest"
|
|
|
+)
|
|
|
+
|
|
|
+func TestOperations(t *testing.T) {
|
|
|
+ data := [][]float64{
|
|
|
+ {10, 20, 15, 30, 45, 50, 100, 30},
|
|
|
+ {5.5, 8, 2.2, 9.75, 8.45, 3, 2.5, 10.25, 4.75, 6.1, 7.67, 12.287, 5.47},
|
|
|
+ {-10, -20},
|
|
|
+ {102, 37, 44, 57, 67, 129},
|
|
|
+ }
|
|
|
+ testCases := []struct {
|
|
|
+ name string
|
|
|
+ op statsFunc
|
|
|
+ exp []float64
|
|
|
+ }{
|
|
|
+ {"Sum", sum, []float64{300, 85.927, -30, 436}},
|
|
|
+ {"Avg", avg, []float64{37.5, 6.609769230769231, -15, 72.666666666666666}},
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, tc := range testCases {
|
|
|
+ for k, exp := range tc.exp {
|
|
|
+ name := fmt.Sprintf("%sData%d", tc.name, k+1)
|
|
|
+ t.Run(name, func(t *testing.T) {
|
|
|
+ res := tc.op(data[k])
|
|
|
+
|
|
|
+ if res != exp {
|
|
|
+ t.Errorf("Expected %g, got %g instead", exp, res)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestCSV2Float(t *testing.T) {
|
|
|
+ csvData := `IP Address,Requests,Response Time
|
|
|
+192.168.0.199,2056,236
|
|
|
+192.168.0.88,899,220
|
|
|
+192.168.0.199,3054,226
|
|
|
+192.168.0.100,4133,218
|
|
|
+192.168.0.199,950,238
|
|
|
+`
|
|
|
+ // Test cases for CSV2Float Test
|
|
|
+ testCases := []struct {
|
|
|
+ name string
|
|
|
+ col int
|
|
|
+ exp []float64
|
|
|
+ expErr error
|
|
|
+ r io.Reader
|
|
|
+ }{
|
|
|
+ {name: "Column2", col: 2,
|
|
|
+ exp: []float64{2056, 899, 3054, 4133, 950}, expErr: nil,
|
|
|
+ r: bytes.NewBufferString(csvData),
|
|
|
+ },
|
|
|
+ {name: "Column3", col: 3,
|
|
|
+ exp: []float64{236, 220, 226, 218, 238}, expErr: nil,
|
|
|
+ r: bytes.NewBufferString(csvData),
|
|
|
+ },
|
|
|
+ {name: "FailRead", col: 1,
|
|
|
+ exp: nil,
|
|
|
+ expErr: iotest.ErrTimeout,
|
|
|
+ r: iotest.TimeoutReader(bytes.NewReader([]byte{0})),
|
|
|
+ },
|
|
|
+ {name: "FailedNotNumber", col: 1,
|
|
|
+ exp: nil,
|
|
|
+ expErr: ErrNotNumber,
|
|
|
+ r: bytes.NewBufferString(csvData),
|
|
|
+ },
|
|
|
+ {name: "FailedInvalidColumn", col: 4,
|
|
|
+ exp: nil,
|
|
|
+ expErr: ErrInvalidColumn,
|
|
|
+ r: bytes.NewBufferString(csvData),
|
|
|
+ }}
|
|
|
+
|
|
|
+ for _, tc := range testCases {
|
|
|
+ t.Run(tc.name, func(t *testing.T) {
|
|
|
+ res, err := csv2float(tc.r, tc.col)
|
|
|
+ if tc.expErr != nil {
|
|
|
+ if err == nil {
|
|
|
+ t.Errorf("Expected error. Got nill instead")
|
|
|
+ }
|
|
|
+ if !errors.Is(err, tc.expErr) {
|
|
|
+ t.Errorf("Expected error %q, got %q instead", tc.expErr, err)
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("Unexpected error: %q", err)
|
|
|
+ }
|
|
|
+ for i, exp := range tc.exp {
|
|
|
+ if res[i] != exp {
|
|
|
+ t.Errorf("Expected %g, got %g instead", exp, res[i])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|