Учитывая утверждения
float f = 7.1f;
double d = f;
Что мы можем утверждать в unit test о d?
Например, это не работает:
Console.WriteLine(d == 7.1d); // false
Console.WriteLine(d < 7.1d + float.Epsilon); // true by luck
Console.WriteLine(d > 7.1d - float.Epsilon); // false (less luck)
Лучший способ, который я нашел до сих пор, - это преобразовать значение обратно:
float f2 = (float)d;
Console.WriteLine(f2 == f); // true
Который был бы таким же, как грубый способ сказать
Console.WriteLine(d == 7.1f); // 7.1f implicitly converted to double as above
Этот вопрос НЕ о двойной и плавающей точности в целом, но действительно JUST о прагматичном вопросе о том, как unit test лучше всего описать границы d. В моем случае d является результатом преобразования, которое происходит в коде, генерируемом генерацией легкого кода. При тестировании этого генерации кода я должен делать утверждения об исходе этой функции, и это, наконец, сводится к простому вопросу выше.