influxdb/query/execute/expression_test.go

267 lines
6.1 KiB
Go

package execute_test
//func TestCompileExpression(t *testing.T) {
// testCases := []struct {
// name string
// expr expression.Expression
// types map[string]execute.DataType
// wantErr bool
// }{
// {
// name: "integer literal",
// expr: expression.Expression{
// Root: &expression.IntegerLiteralNode{
// Value: 42,
// },
// },
// wantErr: false,
// },
// {
// name: "negate string",
// expr: expression.Expression{
// Root: &expression.UnaryNode{
// Operator: expression.SubtractionOperator,
// Node: &expression.StringLiteralNode{
// Value: "hello",
// },
// },
// },
// wantErr: true,
// },
// {
// name: "missing type info",
// expr: expression.Expression{
// Root: &expression.ReferenceNode{
// Name: "a",
// },
// },
// wantErr: true,
// },
// }
// for _, tc := range testCases {
// tc := tc
// t.Run(tc.name, func(t *testing.T) {
// _, err := execute.CompileExpression(tc.expr, tc.types)
// if err != nil {
// if !tc.wantErr {
// t.Errorf("unexpected compliation error: %s", err)
// }
// } else if tc.wantErr {
// t.Error("expected compliation error")
// }
// })
// }
//}
//func TestEvaluateCompiledExpression(t *testing.T) {
// testCases := []struct {
// name string
// expr expression.Expression
// types map[string]execute.DataType
// scope execute.Scope
// want execute.Value
// wantErr bool
// }{
// {
// name: "integer literal",
// expr: expression.Expression{
// Root: &expression.IntegerLiteralNode{
// Value: 42,
// },
// },
// want: execute.Value{
// Type: execute.TInt,
// Value: int64(42),
// },
// },
// {
// name: "integer addition",
// expr: expression.Expression{
// Root: &expression.BinaryNode{
// Operator: expression.AdditionOperator,
// Left: &expression.IntegerLiteralNode{
// Value: 18,
// },
// Right: &expression.IntegerLiteralNode{
// Value: 24,
// },
// },
// },
// want: execute.Value{
// Type: execute.TInt,
// Value: int64(42),
// },
// },
// {
// name: "integer addition using scope",
// expr: expression.Expression{
// Root: &expression.BinaryNode{
// Operator: expression.AdditionOperator,
// Left: &expression.ReferenceNode{
// Name: "a",
// },
// Right: &expression.ReferenceNode{
// Name: "b",
// },
// },
// },
// types: map[string]execute.DataType{
// "a": execute.TInt,
// "b": execute.TInt,
// },
// scope: map[string]execute.Value{
// "a": {Type: execute.TInt, Value: int64(18)},
// "b": {Type: execute.TInt, Value: int64(24)},
// },
// want: execute.Value{
// Type: execute.TInt,
// Value: int64(42),
// },
// },
// {
// name: "integer addition missing scope",
// expr: expression.Expression{
// Root: &expression.BinaryNode{
// Operator: expression.AdditionOperator,
// Left: &expression.ReferenceNode{
// Name: "a",
// },
// Right: &expression.ReferenceNode{
// Name: "b",
// },
// },
// },
// types: map[string]execute.DataType{
// "a": execute.TInt,
// "b": execute.TInt,
// },
// scope: map[string]execute.Value{
// "a": {Type: execute.TInt, Value: int64(18)},
// },
// wantErr: true,
// },
// {
// name: "integer addition incorrect scope",
// expr: expression.Expression{
// Root: &expression.BinaryNode{
// Operator: expression.AdditionOperator,
// Left: &expression.ReferenceNode{
// Name: "a",
// },
// Right: &expression.ReferenceNode{
// Name: "b",
// },
// },
// },
// types: map[string]execute.DataType{
// "a": execute.TInt,
// "b": execute.TInt,
// },
// scope: map[string]execute.Value{
// "a": {Type: execute.TInt, Value: int64(18)},
// "b": {Type: execute.TFloat, Value: float64(18)},
// },
// wantErr: true,
// },
// {
// name: "unsigned integer addition",
// expr: expression.Expression{
// Root: &expression.BinaryNode{
// Operator: expression.AdditionOperator,
// Left: &expression.ReferenceNode{
// Name: "a",
// },
// Right: &expression.ReferenceNode{
// Name: "b",
// },
// },
// },
// types: map[string]execute.DataType{
// "a": execute.TUInt,
// "b": execute.TUInt,
// },
// scope: map[string]execute.Value{
// "a": {Type: execute.TUInt, Value: uint64(18)},
// "b": {Type: execute.TUInt, Value: uint64(24)},
// },
// want: execute.Value{
// Type: execute.TUInt,
// Value: uint64(42),
// },
// },
// {
// name: "float addition",
// expr: expression.Expression{
// Root: &expression.BinaryNode{
// Operator: expression.AdditionOperator,
// Left: &expression.FloatLiteralNode{
// Value: 18,
// },
// Right: &expression.FloatLiteralNode{
// Value: 24,
// },
// },
// },
// want: execute.Value{
// Type: execute.TFloat,
// Value: float64(42),
// },
// },
// {
// name: "boolean and",
// expr: expression.Expression{
// Root: &expression.BinaryNode{
// Operator: expression.AndOperator,
// Left: &expression.BooleanLiteralNode{
// Value: true,
// },
// Right: &expression.BooleanLiteralNode{
// Value: true,
// },
// },
// },
// want: execute.Value{
// Type: execute.TBool,
// Value: true,
// },
// },
// {
// name: "boolean or",
// expr: expression.Expression{
// Root: &expression.BinaryNode{
// Operator: expression.OrOperator,
// Left: &expression.BooleanLiteralNode{
// Value: false,
// },
// Right: &expression.BooleanLiteralNode{
// Value: true,
// },
// },
// },
// want: execute.Value{
// Type: execute.TBool,
// Value: true,
// },
// },
// }
// for _, tc := range testCases {
// tc := tc
// t.Run(tc.name, func(t *testing.T) {
// ce, err := execute.CompileExpression(tc.expr, tc.types)
// if err != nil {
// t.Fatal(err)
// }
// got, err := ce.Eval(tc.scope)
// if err != nil {
// if !tc.wantErr {
// t.Fatal(err)
// }
// } else if tc.wantErr {
// t.Fatal("expected evaluation error")
// }
// if !cmp.Equal(got, tc.want) {
// t.Errorf("unexpected value: -want/+got\n%s", cmp.Diff(tc.want, got))
// }
// })
// }
//}