MCPcopy
hub / github.com/google/mangle / TestReducerMinMaxSum

Function TestReducerMinMaxSum

functional/functional_test.go:237–300  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

235}
236
237func TestReducerMinMaxSum(t *testing.T) {
238 tests := []struct {
239 rows [][]ast.Constant
240 wantMin ast.Constant
241 wantMax ast.Constant
242 wantSum ast.Constant
243 wantAvg ast.Constant
244 }{
245 {
246 rows: [][]ast.Constant{
247 {ast.Number(1)},
248 {ast.Number(1)},
249 {ast.Number(3)},
250 },
251 wantMin: ast.Number(1),
252 wantMax: ast.Number(3),
253 wantSum: ast.Number(5),
254 wantAvg: ast.Float64((float64(1) + float64(1) + float64(3)) / float64(3)),
255 },
256 // Note that EvalReducerFn is never called with empty list of rows.
257 // The reducer functions may be called in user code though.
258 {
259 rows: nil,
260 wantMin: ast.Number(math.MaxInt64),
261 wantMax: ast.Number(math.MinInt64),
262 wantSum: ast.Number(0),
263 wantAvg: ast.Float64(math.NaN()),
264 },
265 }
266 for _, test := range tests {
267 var rows []ast.ConstSubstList
268 for _, row := range test.rows {
269 rows = append(rows, makeConstSubstList([]ast.Variable{ast.Variable{"X"}}, row))
270 }
271 gotMax, err := EvalReduceFn(ast.ApplyFn{symbols.Max, []ast.BaseTerm{ast.Variable{"X"}}}, rows)
272 if err != nil {
273 t.Fatalf("EvalReduceFn(Max,%v) failed with %v", rows, err)
274 }
275 if test.wantMax != gotMax {
276 t.Errorf("EvalReduceFn(Max, %v)=%v want %v", rows, gotMax, test.wantMax)
277 }
278 gotMin, err := EvalReduceFn(ast.ApplyFn{symbols.Min, []ast.BaseTerm{ast.Variable{"X"}}}, rows)
279 if err != nil {
280 t.Fatalf("EvalReduceFn(Min,%v) failed with %v", rows, err)
281 }
282 if test.wantMin != gotMin {
283 t.Errorf("EvalReduceFn(Min, %v)=%v want %v", rows, gotMin, test.wantMin)
284 }
285 gotSum, err := EvalReduceFn(ast.ApplyFn{symbols.Sum, []ast.BaseTerm{ast.Variable{"X"}}}, rows)
286 if err != nil {
287 t.Fatalf("EvalReduceFn(Sum, %v) failed with %v", rows, err)
288 }
289 if test.wantSum != gotSum {
290 t.Errorf("EvalReduceFn(Sum, %v)=%v want %v", rows, gotSum, test.wantSum)
291 }
292 gotAvg, err := EvalReduceFn(ast.ApplyFn{symbols.Avg, []ast.BaseTerm{ast.Variable{"X"}}}, rows)
293 if err != nil {
294 t.Fatalf("EvalReduceFn(Avg, %v) failed with %v", rows, err)

Callers

nothing calls this directly

Calls 4

NumberFunction · 0.92
Float64Function · 0.92
makeConstSubstListFunction · 0.85
EvalReduceFnFunction · 0.85

Tested by

no test coverage detected