@@ -38,10 +38,23 @@ trait ExpressionEvalHelper {
38
38
39
39
protected def checkEvaluation (
40
40
expression : Expression , expected : Any , inputRow : InternalRow = EmptyRow ): Unit = {
41
- checkEvaluationWithoutCodegen(expression, expected, inputRow)
42
- checkEvaluationWithGeneratedMutableProjection(expression, expected, inputRow)
43
- checkEvaluationWithGeneratedProjection(expression, expected, inputRow)
44
- checkEvaluationWithOptimization(expression, expected, inputRow)
41
+ val catalystValue = CatalystTypeConverters .convertToCatalyst(expected)
42
+ checkEvaluationWithoutCodegen(expression, catalystValue, inputRow)
43
+ checkEvaluationWithGeneratedMutableProjection(expression, catalystValue, inputRow)
44
+ checkEvaluationWithGeneratedProjection(expression, catalystValue, inputRow)
45
+ checkEvaluationWithOptimization(expression, catalystValue, inputRow)
46
+ }
47
+
48
+ /**
49
+ * Check the equality between result of expression and expected value, it will handle
50
+ * Array[Byte].
51
+ */
52
+ protected def checkResult (result : Any , expected : Any ): Boolean = {
53
+ (result, expected) match {
54
+ case (result : Array [Byte ], expected : Array [Byte ]) =>
55
+ java.util.Arrays .equals(result, expected)
56
+ case _ => result == expected
57
+ }
45
58
}
46
59
47
60
protected def evaluate (expression : Expression , inputRow : InternalRow = EmptyRow ): Any = {
@@ -55,7 +68,7 @@ trait ExpressionEvalHelper {
55
68
val actual = try evaluate(expression, inputRow) catch {
56
69
case e : Exception => fail(s " Exception evaluating $expression" , e)
57
70
}
58
- if (actual != expected) {
71
+ if (! checkResult( actual, expected) ) {
59
72
val input = if (inputRow == EmptyRow ) " " else s " , input: $inputRow"
60
73
fail(s " Incorrect evaluation (codegen off): $expression, " +
61
74
s " actual: $actual, " +
@@ -83,7 +96,7 @@ trait ExpressionEvalHelper {
83
96
}
84
97
85
98
val actual = plan(inputRow).apply(0 )
86
- if (actual != expected) {
99
+ if (! checkResult( actual, expected) ) {
87
100
val input = if (inputRow == EmptyRow ) " " else s " , input: $inputRow"
88
101
fail(s " Incorrect Evaluation: $expression, actual: $actual, expected: $expected$input" )
89
102
}
@@ -109,7 +122,7 @@ trait ExpressionEvalHelper {
109
122
}
110
123
111
124
val actual = plan(inputRow)
112
- val expectedRow = new GenericRow (Array [Any ](CatalystTypeConverters .convertToCatalyst( expected) ))
125
+ val expectedRow = new GenericRow (Array [Any ](expected))
113
126
if (actual.hashCode() != expectedRow.hashCode()) {
114
127
fail(
115
128
s """
0 commit comments