@@ -30,7 +30,34 @@ import org.apache.spark.sql.catalyst.analysis.UnresolvedGetField
3030import org .apache .spark .sql .types ._
3131
3232
33- class ExpressionEvaluationSuite extends FunSuite {
33+ class ExpressionEvaluationBaseSuite extends FunSuite {
34+
35+ def evaluate (expression : Expression , inputRow : Row = EmptyRow ): Any = {
36+ expression.eval(inputRow)
37+ }
38+
39+ def checkEvaluation (expression : Expression , expected : Any , inputRow : Row = EmptyRow ): Unit = {
40+ val actual = try evaluate(expression, inputRow) catch {
41+ case e : Exception => fail(s " Exception evaluating $expression" , e)
42+ }
43+ if (actual != expected) {
44+ val input = if (inputRow == EmptyRow ) " " else s " , input: $inputRow"
45+ fail(s " Incorrect Evaluation: $expression, actual: $actual, expected: $expected$input" )
46+ }
47+ }
48+
49+ def checkDoubleEvaluation (
50+ expression : Expression ,
51+ expected : Spread [Double ],
52+ inputRow : Row = EmptyRow ): Unit = {
53+ val actual = try evaluate(expression, inputRow) catch {
54+ case e : Exception => fail(s " Exception evaluating $expression" , e)
55+ }
56+ actual.asInstanceOf [Double ] shouldBe expected
57+ }
58+ }
59+
60+ class ExpressionEvaluationSuite extends ExpressionEvaluationBaseSuite {
3461
3562 test(" literals" ) {
3663 checkEvaluation(Literal (1 ), 1 )
@@ -134,27 +161,6 @@ class ExpressionEvaluationSuite extends FunSuite {
134161 }
135162 }
136163
137- def evaluate (expression : Expression , inputRow : Row = EmptyRow ): Any = {
138- expression.eval(inputRow)
139- }
140-
141- def checkEvaluation (expression : Expression , expected : Any , inputRow : Row = EmptyRow ): Unit = {
142- val actual = try evaluate(expression, inputRow) catch {
143- case e : Exception => fail(s " Exception evaluating $expression" , e)
144- }
145- if (actual != expected) {
146- val input = if (inputRow == EmptyRow ) " " else s " , input: $inputRow"
147- fail(s " Incorrect Evaluation: $expression, actual: $actual, expected: $expected$input" )
148- }
149- }
150-
151- def checkDoubleEvaluation (expression : Expression , expected : Spread [Double ], inputRow : Row = EmptyRow ): Unit = {
152- val actual = try evaluate(expression, inputRow) catch {
153- case e : Exception => fail(s " Exception evaluating $expression" , e)
154- }
155- actual.asInstanceOf [Double ] shouldBe expected
156- }
157-
158164 test(" IN" ) {
159165 checkEvaluation(In (Literal (1 ), Seq (Literal (1 ), Literal (2 ))), true )
160166 checkEvaluation(In (Literal (2 ), Seq (Literal (1 ), Literal (2 ))), true )
@@ -1081,3 +1087,14 @@ class ExpressionEvaluationSuite extends FunSuite {
10811087 checkEvaluation(~ c1, - 2 , row)
10821088 }
10831089}
1090+
1091+ // TODO: Make the tests work with codegen.
1092+ class ExpressionEvaluationWithoutCodeGenSuite extends ExpressionEvaluationBaseSuite {
1093+
1094+ test(" CreateStruct" ) {
1095+ val row = Row (1 , 2 , 3 )
1096+ val c1 = ' a .int.at(0 ).as(" a" )
1097+ val c3 = ' c .int.at(2 ).as(" c" )
1098+ checkEvaluation(CreateStruct (Seq (c1, c3)), Row (1 , 3 ), row)
1099+ }
1100+ }
0 commit comments