Assert.AreEqual для поплавка без дельты - PullRequest
2 голосов
/ 31 марта 2012

У меня есть глубокая древовидная структура, построенная из списков, содержащих списки и плавающие элементы. Я хочу сделать утверждения о такой структуре, не имея возможности использовать дельту для поплавков. Моя проблема в том, что использование вывода из несостоявшегося утверждения недостаточно, так как требуется один или два дополнительных десятичных знака. Я должен угадать эти десятичные дроби, чтобы продолжить.

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);
            }
        }
    }

1 Ответ

3 голосов
/ 31 марта 2012

Вы можете привести их к десятичной дроби:

(Decimal) 0.1428571f == (Decimal)(1 / 7.0f)
...