Search code examples
scalafloating-pointscalatest

ScalaTest - testing equality between two floating point arrays with error margin


Let's say I have a function that returns a array of doubles. I want to test this function and have calculated the correct value by hand. However since it's floating point numbers, I can't do direct comparisons so is there any sweet syntax by ScalaTest that makes me able to compare double arrays with an epsilion/error margin?

Thanks


Solution

  • Well as I feared there is no nice syntax in ScalaTest for this, and I will accept my own answer with a very basic solution.

    val Eps = 1e-3 // Our epsilon
    
    val res = testObject.test // Result you want to test.
    val expected = Array(...) // Expected returning value.
    
    res.size should be (expected.size)
    
    for (i <- 0 until res.size) res(i) should be (expected(i) +- Eps)
    

    As seen, this works. Then you can make it nicer by perhaps defining an implicit method.