Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to call assertEquals with Double Epsilon/Precision in Kotlin?

I was wondering, in Kotlin, is there the possibility to call the equivalent of the java method:

assertEquals(double expected, double actual, double precision)

because everytime I'm getting this method instead

assertEquals(expected: T, actual: T, message: String)

And i can't find the one with the precision parameter. Calling the Java one should be fine too I guess.

My call to the method:

assertEquals(5000.00, calculateCouponAmount(basicFaceValue, basicInterestRate, amortizationBullet, couponNumber1), 0.01)

I'm getting an error because 0.01 gets in the "message" field

like image 241
Stefano.Maffullo Avatar asked Aug 09 '17 09:08

Stefano.Maffullo


Video Answer


2 Answers

I have figured it out!

This is how it's done

import org.junit.*
import Kotlin.Test.assertEquals

Assert.assertEquals(expected, actual, precision) // to use the jUnit standard one
assertEquals(expected, actual, message) // to use the Kotlin one
like image 84
Stefano.Maffullo Avatar answered Oct 15 '22 13:10

Stefano.Maffullo


I couldn't find one, so I created my own set of functions:

import java.math.BigDecimal
import kotlin.math.abs
import kotlin.test.asserter

internal fun assertEquals(expected: Double, actual: Double?, epsilon: Double, message: String? = null) {
    asserter.assertNotNull(null, actual)
    asserter.assertTrue({ messagePrefix(message) + "Expected <$expected>, actual <$actual>, should differ no more than <$epsilon>." },
            abs(expected - actual!!) <= epsilon)
}

internal fun assertEquals(expected: BigDecimal, actual: BigDecimal?, epsilon: Double, message: String? = null) {
    asserter.assertNotNull(null, actual)
    asserter.assertTrue({ messagePrefix(message) + "Expected <$expected>, actual <$actual>, should differ no more than <$epsilon>." },
            (expected - actual!!).abs().toDouble() <= epsilon)
}

internal fun assertEquals(expected: Double, actual: BigDecimal?, epsilon: Double, message: String? = null) {
    asserter.assertNotNull(null, actual)
    asserter.assertTrue({ messagePrefix(message) + "Expected <$expected>, actual <$actual>, should differ no more than <$epsilon>." },
            abs(expected - actual!!.toDouble()) <= epsilon)
}

internal fun messagePrefix(message: String?) = if (message == null) "" else "$message. "
like image 36
BrunoJCM Avatar answered Oct 15 '22 15:10

BrunoJCM