Short question, why does Assert.AreEqual(1.0, double.NaN, 1.0) pass? Whereas Assert.AreEqual(1.0, double.NaN) fails.
Is it a bug in MSTest (Microsoft.VisualStudio.QualityTools.UnitTestFramework) or am I missing something here?
Best regards, Egil.
Update: Should probably add, that the reason behind my question is, that I have a bunch of unit tests that unfortunately passed due to the result of some linear algebraic matrix operation being NaN or (+/-)Infinity. The unit tests are fine, but since Assert.AreEqual on doubles with a delta will pass when actual or/and expected are NaN or Infinity, I was left to believe that the code I was testing was correct.
Be careful. NaN is weird, somewhat like null in many DBMSs, and you shouldn’t be comparing values to it (either directly, or with Assert.AreEqual). From the docs for Double.NaN:
You’d have to peer at the internals of Assert(double, double, double) to see what’s going on, but in general, you’re depending on undefined behavior relative to NaN.