Сравнение чисел с плавающей запятой с допуском не соответствует утверждению

Я использую ScalaTest (3.0.4) и не могу найти какие-либо примеры для работы, которые я нашел для сравнения чисел с плавающей запятой с допуском. Вот что у меня есть:

import org.scalatest.{MustMatchers, WordSpec}

class DetectionClusteringSpec extends WordSpec with MustMatchers {

    "EmbeddingsGroup.vecdist" should {
        "correctly compute vector distance" in {
            val dist = EmbeddingsGroup.vecdist(TestDetections.emb1,TestDetections.emb4)
            // Note: The above method returns a Float. 

            dist mustBe 3.058 +- 0.1
        }
    }

Вышеприведенное компилируется, но когда я запускаю тест, я получаю следующую ошибку:

3.0579379 was not equal to 3.058 +- 0.1
Expected :3.058 +- 0.1
Actual   :3.0579379

Вместо этого я также связал следующее утверждение:

assert(dist === 3.058)

Однако это тоже не работает и дает следующий сбой:

3.0579379 did not equal 3.058
Expected :3.058
Actual   :3.0579379

Я прочитал множество примеров сравнения чисел с плавающей запятой с обоими вышеприведенными синтаксисами, и кажется, что они должны работать. Мой первый пример взят прямо из документации.

Что я делаю неправильно?


person JoeMjr2    schedule 29.05.2019    source источник


Ответы (1)


Поскольку dist — это Float, а другие аргументы — Double, попробуйте преобразовать dist в Double вот так

dist.toDouble mustBe 3.058D +- 0.1

или сделать так, чтобы другие аргументы плавали так

dist mustBe 3.058f +- 0.1f

Возможно, связано с сопоставителями сравнения не выполняются смешанные числовые типы

person Mario Galic    schedule 30.05.2019