4
我的單元測試失敗的消息是:xunit.net - 雙[,]比較
Result Message:
Assert.Equal() Failure
Position: First difference is at position 0
Expected: Double[,] { 0,888888888888889, 1,33333333333333, 1,33333333333333, 2,66666666666667 }
Actual: Double[,] { 0,888888888888889, 1,33333333333333, 1,33333333333333, 2,66666666666667 }
我知道,如果你比較雙號則必須指定精度,所以我的解決方法是:
Assert.Equal(_sA.ToArray(), result.ToArray(), new Comparer());
class Comparer : IEqualityComparer<double[,]>
{
public bool Equals(double[,] x, double[,] y)
{
if (x.GetLength(0) != y.GetLength(0) || x.GetLength(1) != y.GetLength(1))
return false;
for (var i = 0; i < x.GetLength(0); ++i)
{
for(var j = 0; j < x.GetLength(1); ++j)
if (!isEqual(x[i, j], y[i, j]))
return false;
}
return true;
}
private bool isEqual(double x, double y)
{
const double epsilon = 1e-5;
return Math.Abs(x - y) <= epsilon * Math.Abs(x);
}
}
有沒有更好,更簡單的解決方案?
不會如果x爲零,工作帶來極大的:) – Benjol