public void NonGenericIComparableComparisonsShouldTryToCallLeftHandCompareToFirst() { var left = new MutatingComparable(0); var right = new object(); var comparer = Comparer <object> .Default; Assert.Equal(0, comparer.Compare(left, right)); Assert.Equal(1, comparer.Compare(left, right)); // If the lhs does not implement IComparable, the rhs should be checked // Additionally the result from rhs.CompareTo should be negated Assert.Equal(-2, comparer.Compare(right, left)); }
public void IComparableComparisonsShouldTryToCallLeftHandCompareToFirst() { var left = new MutatingComparable(0); var right = new MutatingComparable(0); var comparer = Comparer <MutatingComparable> .Default; // Every CompareTo() call yields the comparable's current // state and then increments it Assert.Equal(0, comparer.Compare(left, right)); Assert.Equal(1, comparer.Compare(left, right)); Assert.Equal(0, comparer.Compare(right, left)); }
public void NullableOfIComparableComparisonsShouldTryToCallLeftHandCompareToFirst() { // If two non-null nullables are passed in, Default<T?>.Compare // should try to call the left-hand side's CompareTo() first // Would have liked to reuse MutatingComparable here, but it is // a class and can't be nullable, so it's necessary to wrap it // in a struct var leftValue = new MutatingComparable(0); var rightValue = new MutatingComparable(0); var left = new ValueComparable <MutatingComparable>?(ValueComparable.Create(leftValue)); var right = new ValueComparable <MutatingComparable>?(ValueComparable.Create(rightValue)); var comparer = Comparer <ValueComparable <MutatingComparable>?> .Default; Assert.Equal(0, comparer.Compare(left, right)); Assert.Equal(1, comparer.Compare(left, right)); Assert.Equal(0, comparer.Compare(right, left)); }