2012-03-30 9 views
2

私はリストと浮動小数点数を含むリストで構築された深いツリー構造を持っています。 フロートにデルタを使用することなく、そのような構造にアサーションを作りたいと思います。私の問題は、失敗したアサートからの出力を使用するだけでは1つまたは2つの余分な小数が必要なので、十分ではありません。私はこれらの小数を推測しなければならない。Assert.AreEqual for float for delta

using System.Collections; 
using System.Linq; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 

    namespace TestAssertLab 
    { 
     public class List : ArrayList { 
      public List(params object[] list) { 
       AddRange(list); 
      } 
      public override bool Equals(object other) { 
       List l = other as List; 
       if (l != null) { 
        if (Count != l.Count) return false; 
        return !l.Cast<object>().Where((t, i) => !this[i].Equals(t)).Any(); 
       } 
       return false; 
      } 
      public override string ToString() { 
       string s = this.Cast<object>().Aggregate("", (current, item) => current + (item + ",")); 
       return "[" + s.TrimEnd(',') + "]"; 
      } 
     } 

     [TestClass] 
     public class AssertLab 
     { 
      public List z(params object[] l) { 
        return new List(l); 
      } 
      [TestMethod] 
      public void TestFails() { 
       List expected = z(0.1428571f, z(101, 102)); 
       List actual = z(1/7.0f,  z(101, 102)); 
       Assert.AreEqual(expected, actual); 
       // output: Assert.AreEqual failed. Expected:<[0.1428571,[101,102]]>. Actual:<[0.1428571,[101,102]]>. 
      } 
      [TestMethod] 
      public void TestOK() 
      { 
       List expected = z(0.142857143f, z(30101, 30102)); 
       List actual = z(1/7.0f, z(30101, 30102)); 
       Assert.AreEqual(expected, actual); 
      } 
     } 
    } 
+2

は、なぜあなたは、あなたが主張するには、あなたの山車のためのデルタを使用することはできませんか? – BrokenGlass

+0

アサーションはツリーの上位レベルにあるため、リストを比較します。 –

答えて

3

あなたは小数点以下にそれらをキャストすることができます:

(Decimal) 0.1428571f == (Decimal)(1/7.0f) 
+0

動作しますが、フロートを放棄しなければなりません。 –

+0

'decimal'はC#組み込み型の方が良いでしょう。 – LoBo