This repository was archived by the owner on Jan 28, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 109
/
Copy pathavg_test.go
119 lines (92 loc) · 3.44 KB
/
avg_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package aggregation
import (
"testing"
"github.com/src-d/go-mysql-server/sql"
"github.com/src-d/go-mysql-server/sql/expression"
"github.com/stretchr/testify/require"
)
func TestAvg_String(t *testing.T) {
require := require.New(t)
avg := NewAvg(expression.NewGetField(0, sql.Int32, "col1", true))
require.Equal("AVG(col1)", avg.String())
}
func TestAvg_Float64(t *testing.T) {
require := require.New(t)
ctx := sql.NewEmptyContext()
avg := NewAvg(expression.NewGetField(0, sql.Float64, "col1", true))
buffer := avg.NewBuffer()
avg.Update(ctx, buffer, sql.NewRow(float64(23.2220000)))
require.Equal(float64(23.222), eval(t, avg, buffer))
}
func TestAvg_Eval_INT32(t *testing.T) {
require := require.New(t)
ctx := sql.NewEmptyContext()
avgNode := NewAvg(expression.NewGetField(0, sql.Int32, "col1", true))
buffer := avgNode.NewBuffer()
require.Equal(float64(0), eval(t, avgNode, buffer))
avgNode.Update(ctx, buffer, sql.NewRow(int32(1)))
require.Equal(float64(1), eval(t, avgNode, buffer))
avgNode.Update(ctx, buffer, sql.NewRow(int32(2)))
require.Equal(float64(1.5), eval(t, avgNode, buffer))
}
func TestAvg_Eval_UINT64(t *testing.T) {
require := require.New(t)
ctx := sql.NewEmptyContext()
avgNode := NewAvg(expression.NewGetField(0, sql.Uint64, "col1", true))
buffer := avgNode.NewBuffer()
require.Equal(float64(0), eval(t, avgNode, buffer))
err := avgNode.Update(ctx, buffer, sql.NewRow(uint64(1)))
require.NoError(err)
require.Equal(float64(1), eval(t, avgNode, buffer))
err = avgNode.Update(ctx, buffer, sql.NewRow(uint64(2)))
require.NoError(err)
require.Equal(float64(1.5), eval(t, avgNode, buffer))
}
func TestAvg_Eval_String(t *testing.T) {
require := require.New(t)
ctx := sql.NewEmptyContext()
avgNode := NewAvg(expression.NewGetField(0, sql.Text, "col1", true))
buffer := avgNode.NewBuffer()
require.Equal(float64(0), eval(t, avgNode, buffer))
err := avgNode.Update(ctx, buffer, sql.NewRow("foo"))
require.NoError(err)
require.Equal(float64(0), eval(t, avgNode, buffer))
err = avgNode.Update(ctx, buffer, sql.NewRow("2"))
require.NoError(err)
require.Equal(float64(1), eval(t, avgNode, buffer))
}
func TestAvg_Merge(t *testing.T) {
require := require.New(t)
ctx := sql.NewEmptyContext()
avgNode := NewAvg(expression.NewGetField(0, sql.Float32, "col1", true))
require.NotNil(avgNode)
buffer1 := avgNode.NewBuffer()
require.Zero(avgNode.Eval(ctx, buffer1))
err := avgNode.Update(ctx, buffer1, sql.NewRow(float32(1)))
require.NoError(err)
err = avgNode.Update(ctx, buffer1, sql.NewRow(float32(4)))
require.NoError(err)
require.Equal(float64(2.5), eval(t, avgNode, buffer1))
buffer2 := avgNode.NewBuffer()
require.Zero(avgNode.Eval(ctx, buffer2))
err = avgNode.Update(ctx, buffer2, sql.NewRow(float32(2)))
require.NoError(err)
err = avgNode.Update(ctx, buffer2, sql.NewRow(float32(7)))
require.NoError(err)
err = avgNode.Update(ctx, buffer2, sql.NewRow(float32(12)))
require.NoError(err)
require.Equal(float64(7), eval(t, avgNode, buffer2))
err = avgNode.Merge(ctx, buffer1, buffer2)
require.NoError(err)
require.Equal(float64(5.2), eval(t, avgNode, buffer1))
}
func TestAvg_NULL(t *testing.T) {
require := require.New(t)
ctx := sql.NewEmptyContext()
avgNode := NewAvg(expression.NewGetField(0, sql.Uint64, "col1", true))
buffer := avgNode.NewBuffer()
require.Zero(avgNode.Eval(ctx, buffer))
err := avgNode.Update(ctx, buffer, sql.NewRow(nil))
require.NoError(err)
require.Equal(nil, eval(t, avgNode, buffer))
}