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 Nov 9, 2017
1 parent 9f7edda commit 088792a
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 @@ -227,7 +227,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 @@ -170,7 +170,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 _ =>
if (o1 != o2) return false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ class SampleDataFrameTest extends FunSuite with DataFrameSuiteBase {
val row6 = Row("1")
val row6a = Row("2")
val row7 = Row(1.toFloat)
val row8 = Row(new java.math.BigDecimal(1.0))
val row8a = Row(new java.math.BigDecimal(1.0 + 1.0E-6))
val row9 = Row(scala.math.BigDecimal(1.0))
val row9a = 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 @@ -74,6 +78,8 @@ class SampleDataFrameTest extends FunSuite with DataFrameSuiteBase {
assert(false === approxEquals(row6, row4, 1E-5))
assert(false === approxEquals(row6, row7, 1E-5))
assert(false === approxEquals(row6, row6a, 1E-5))
assert(true === approxEquals(row8, row8a, 1.0E-6))
assert(true === approxEquals(row9, row9a, 1.0E-6))
}

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

0 comments on commit 088792a

Please sign in to comment.