cloud-fan commented on a change in pull request #29792:
URL: https://github.com/apache/spark/pull/29792#discussion_r495008728
##########
File path:
sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/UnwrapCastInBinaryComparisonSuite.scala
##########
@@ -79,13 +106,65 @@ class UnwrapCastInBinaryComparisonSuite extends PlanTest
with ExpressionEvalHelp
assertEquivalent(castInt(f) < v, falseIfNotNull(f))
}
- test("unwrap casts when literal is within range (min, max)") {
- assertEquivalent(castInt(f) > 300, f > 300.toShort)
- assertEquivalent(castInt(f) >= 500, f >= 500.toShort)
- assertEquivalent(castInt(f) === 32766, f === 32766.toShort)
- assertEquivalent(castInt(f) <=> 32766, f <=> 32766.toShort)
- assertEquivalent(castInt(f) <= -6000, f <= -6000.toShort)
- assertEquivalent(castInt(f) < -32767, f < -32767.toShort)
+ test("unwrap casts when literal is within range (min, max) or fromType has
no range") {
+ Seq(300, 500, 32766, -6000, -32767).foreach(v => {
+ assertEquivalent(castInt(f) > v, f > v.toShort)
+ assertEquivalent(castInt(f) >= v, f >= v.toShort)
+ assertEquivalent(castInt(f) === v, f === v.toShort)
+ assertEquivalent(castInt(f) <=> v, f <=> v.toShort)
+ assertEquivalent(castInt(f) <= v, f <= v.toShort)
+ assertEquivalent(castInt(f) < v, f < v.toShort)
+ })
+
+ Seq(3.14.toFloat.toDouble, -1000.0.toFloat.toDouble,
+ 20.0.toFloat.toDouble, -2.414.toFloat.toDouble,
+ Float.MinValue.toDouble, Float.MaxValue.toDouble,
Float.PositiveInfinity.toDouble
+ ).foreach(v => {
+ assertEquivalent(castDouble(f2) > v, f2 > v.toFloat)
+ assertEquivalent(castDouble(f2) >= v, f2 >= v.toFloat)
+ assertEquivalent(castDouble(f2) === v, f2 === v.toFloat)
+ assertEquivalent(castDouble(f2) <=> v, f2 <=> v.toFloat)
+ assertEquivalent(castDouble(f2) <= v, f2 <= v.toFloat)
+ assertEquivalent(castDouble(f2) < v, f2 < v.toFloat)
+ })
+
+ Seq(decimal2(100.20), decimal2(-200.50)).foreach(v => {
+ assertEquivalent(castDecimal2(f3) > v, f3 > decimal(v))
+ assertEquivalent(castDecimal2(f3) >= v, f3 >= decimal(v))
+ assertEquivalent(castDecimal2(f3) === v, f3 === decimal(v))
+ assertEquivalent(castDecimal2(f3) <=> v, f3 <=> decimal(v))
+ assertEquivalent(castDecimal2(f3) <= v, f3 <= decimal(v))
+ assertEquivalent(castDecimal2(f3) < v, f3 < decimal(v))
+ })
+ }
+
+ test("unwrap cast when literal is within range (min, max) AND has round up
or down") {
+ // Cases for rounding down
+ var doubleValue = 100.6
+ assertEquivalent(castDouble(f) > doubleValue, f > doubleValue.toShort)
+ assertEquivalent(castDouble(f) > doubleValue, f > doubleValue.toShort)
+ assertEquivalent(castDouble(f) === doubleValue, falseIfNotNull(f))
+ assertEquivalent(castDouble(f) <=> doubleValue, false)
+ assertEquivalent(castDouble(f) <= doubleValue, f <= doubleValue.toShort)
+ assertEquivalent(castDouble(f) < doubleValue, f <= doubleValue.toShort)
+
+ // Cases for rounding up: 3.14 will be rounded to 3.14000010... after
casting to float
Review comment:
This is an important point. Can we explain how to know it's rounding up
or down in the PR description?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]