Похоже, что он ищет компиляторы VC, поэтому вы можете попытаться указать тип компилятора с -c mingw32
, так как у вас есть msys
python setup.py install -c mingw32
В JUnit существует метод NO assert с сигнатурой
assertEquals(Double expected, Double result);
. Однако для объектов существует одно свойство:
assertEquals(Object expected, Object result);
Это вызывает метод equals
объектов, и, как вы можете ожидать, не рекомендуется использовать его для сравнения объектов Double
.
Для двойников, как вы заметили, абсолютно необходимо использовать delta для сравнения, чтобы избежать проблем с округлением с плавающей запятой (объяснено уже в некоторых других ответах). Если вы используете версию с тремя аргументами assertEquals
с double
аргументами
assertEquals(double expected, double actual, double delta);
, ваши Double
s будут беззвучно распаковываться в double
, и все будет нормально работать (и ваши тесты выиграли 't неожиданно: -).
SOURCE. Предполагает, что два удвоения или поплавки равны с положительной дельта. Если это не так, запускается AssertionError. Если ожидаемое значение равно бесконечности, то значение дельта игнорируется.NaN считаются равными.
Я бы сказал, что сравнение двойников, примитивов или объектов бесполезно без дельта. Знание того, как работают текущие точечные числа, является ключом к выполнению численной работы.
Объект может использовать .equals под обложками; у примитива нет опции, кроме ==.
Просто потому, что версия объекта не использует дельта, не делает эту идею лучшей.
Двойная математика редко, если когда-либо дает ровно равные результаты. Например, 0.1 * 0.1 != 0.01
. Для сравнения результатов двойной точности обычно требуется, по крайней мере, несколько дельта.
С другой стороны, если вы сравниваете бокс Double
s, предполагается, что вы хотите получить точное равенство. У меня нет значения дельта-значения по умолчанию, но Double.equals
имеет немного отличающееся поведение от ==
: в частности, его обработка NaNs .
Это имеет смысл при тестировании, потому что Double.NaN != Double.NaN
, но в тесте, если вы ожидали возвращения NaN
и NaN
, это правильный ответ.
Лучше напишите что-нибудь вроде этого:
assertEquals(23.0, 250.0, 0.0)
0.0 - это дельта. Прочитайте, почему ваши методы устарели.