@@ -30,7 +30,34 @@ import org.apache.spark.sql.catalyst.analysis.UnresolvedGetField
30
30
import org .apache .spark .sql .types ._
31
31
32
32
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 {
34
61
35
62
test(" literals" ) {
36
63
checkEvaluation(Literal (1 ), 1 )
@@ -134,27 +161,6 @@ class ExpressionEvaluationSuite extends FunSuite {
134
161
}
135
162
}
136
163
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
-
158
164
test(" IN" ) {
159
165
checkEvaluation(In (Literal (1 ), Seq (Literal (1 ), Literal (2 ))), true )
160
166
checkEvaluation(In (Literal (2 ), Seq (Literal (1 ), Literal (2 ))), true )
@@ -1081,3 +1087,14 @@ class ExpressionEvaluationSuite extends FunSuite {
1081
1087
checkEvaluation(~ c1, - 2 , row)
1082
1088
}
1083
1089
}
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