public void Compare()
        {
            var comparer = new NullComparer <string>();

            Assert.That(comparer.Compare("a", "a"), Is.EqualTo(0));
            Assert.That(comparer.Compare("a", "b"), Is.EqualTo(0));
            Assert.That(comparer.Compare("b", "a"), Is.EqualTo(0));
        }
        public int Compare(T x, T y)
        {
            var enumerableComparer = new EnumerableComparer();

            if (enumerableComparer.CanCompare(x, y))
            {
                return(enumerableComparer.Compare((IEnumerable)x, (IEnumerable)y));
            }

            var nullComparer = new NullComparer();

            if (nullComparer.CanCompare(x, y))
            {
                return(nullComparer.Compare(x, y));
            }

            // Same type?
            if (x.GetType() != y.GetType())
            {
                return(-1);
            }

            // Implements IComparable<T>?
            IComparable <T> comparable1 = x as IComparable <T>;

            if (comparable1 != null)
            {
                return(comparable1.CompareTo(y));
            }

            // Implements IComparable?
            IComparable comparable2 = x as IComparable;

            if (comparable2 != null)
            {
                return(comparable2.CompareTo(y));
            }

            // Implements IEquatable<T>?
            IEquatable <T> equatable = x as IEquatable <T>;

            if (equatable != null)
            {
                return(equatable.Equals(y) ? 0 : -1);
            }

            // Last case, rely on Object.Equals
            return(object.Equals(x, y) ? 0 : -1);
        }
示例#3
0
        public int Compare(TestClassIEquatable x, TestClassIEquatable y)
        {
            string msg;

            WriteLine(msg = $"{MethodBase.GetCurrentMethod().Name}");
            Debug.WriteLine(msg);

            var compare = NullComparer <int?> .Compare(x.PInt1, y.PInt1);

            if (compare != 0)
            {
                return(compare);
            }

            compare = NullComparer <int?> .Compare(x.PInt2, y.PInt2);

            if (compare != 0)
            {
                return(compare);
            }

            return(NullComparer <int?> .Compare(x.PInt3, y.PInt3));
        }
        public void IsNull()
        {
            INullObject comparer = new NullComparer <string>();

            Assert.That(comparer.IsNull, Is.True);
        }
示例#5
0
            private static void _verifySame(State state)
            {
                object left     = state.Left;
                object right    = state.Right;
                string crumb    = state.Crumb;
                int    maxDepth = state.MaxDepth;
                var    log      = state.Log;
                int    depth    = state.CurrentDepth;

                log.Info(state.ToString(), state.CurrentDepth);
                if (depth > maxDepth)
                {
                    var msg = $"Maximum object depth of {state.MaxDepth} exceeded. {crumb}";
                    throw new VerifyException(msg, "NA", "NA", "NA");
                }

                if (NullComparer.BothNull(state))
                {
                    return;
                }

                var properties = PropertyHelper.ComparableProperties(left, right);

                foreach (var prop in properties)
                {
                    var name      = prop.Name;
                    var propCrumb = $"{crumb}.{name}";

                    var newstate = state.CreateChildState(prop.Type, name, prop.LHS, prop.RHS, propCrumb);

                    // NULLS
                    // -----
                    if (NullComparer.BothNull(newstate))
                    {
                        continue;
                    }

                    //DATETIME
                    // -------
                    if (DateTimeComparer.Compare(newstate))
                    {
                        continue;
                    }

                    //TIMESPAN
                    // -------
                    if (TimeSpanComparer.Compare(newstate))
                    {
                        continue;
                    }

                    // STRING COMPARABLE
                    // -----------------
                    if (StringComparer.CompareByStrings(newstate))
                    {
                        continue;
                    }

                    // LISTS
                    if (name.Contains("IList`"))
                    {
                        continue;
                    }

                    // CLASS
                    // -----

                    _verifySame(newstate);
                }
            }