Skip to content

Commit

Permalink
Compare Java and Scala BigDecimal with tolerance
Browse files Browse the repository at this point in the history
  • Loading branch information
nightscape committed Oct 11, 2018
1 parent c0f75d6 commit 2e3531e
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,13 @@ object DataFrameSuiteBase {
}

case d1: java.math.BigDecimal =>
if (d1.compareTo(o2.asInstanceOf[java.math.BigDecimal]) != 0) {
if (d1.subtract(o2.asInstanceOf[java.math.BigDecimal]).abs
.compareTo(new java.math.BigDecimal(tol)) > 0) {
return false
}

case d1: scala.math.BigDecimal =>
if ((d1 - o2.asInstanceOf[scala.math.BigDecimal]).abs > tol) {
return false
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,11 @@ object DataFrameSuiteBase {
if (abs(d1 - o2.asInstanceOf[Double]) > tol) return false

case d1: java.math.BigDecimal =>
if (d1.compareTo(o2.asInstanceOf[java.math.BigDecimal]) != 0) return false
if (d1.subtract(o2.asInstanceOf[java.math.BigDecimal]).abs
.compareTo(new java.math.BigDecimal(tol)) > 0) return false

case d1: scala.math.BigDecimal =>
if ((d1 - o2.asInstanceOf[scala.math.BigDecimal]).abs > tol) return false

case t1: Timestamp =>
if (abs(t1.getTime - o2.asInstanceOf[Timestamp].getTime) > tol) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ class SampleDataFrameTest extends FunSuite with DataFrameSuiteBase {
val row8 = Row(Timestamp.valueOf("2018-01-12 20:22:13"))
val row9 = Row(Timestamp.valueOf("2018-01-12 20:22:18"))
val row10 = Row(Timestamp.valueOf("2018-01-12 20:23:13"))
val row11 = Row(new java.math.BigDecimal(1.0))
val row11a = Row(new java.math.BigDecimal(1.0 + 1.0E-6))
val row12 = Row(scala.math.BigDecimal(1.0))
val row12a = Row(scala.math.BigDecimal(1.0 + 1.0E-6))
assert(false === approxEquals(row, row2, 1E-7))
assert(true === approxEquals(row, row2, 1E-5))
assert(true === approxEquals(row3, row3, 1E-5))
Expand All @@ -84,6 +88,8 @@ class SampleDataFrameTest extends FunSuite with DataFrameSuiteBase {
assert(false === approxEquals(row9, row8, 3000))
assert(true === approxEquals(row9, row10, 60000))
assert(false === approxEquals(row9, row10, 53000))
assert(true === approxEquals(row11, row11a, 1.0E-6))
assert(true === approxEquals(row12, row12a, 1.0E-6))
}

test("verify hive function support") {
Expand Down

0 comments on commit 2e3531e

Please sign in to comment.