ComparisonConstraint
Abstract base class for constraints that compare values to
determine if one is greater than, equal to or less than
the other.
using System;
using System.Collections;
using System.Collections.Generic;
namespace NUnit.Framework.Constraints
{
public abstract class ComparisonConstraint : Constraint
{
private object _expected;
private Tolerance _tolerance = Tolerance.Default;
private ComparisonAdapter _comparer = ComparisonAdapter.Default;
public ComparisonConstraint Percent {
get {
_tolerance = _tolerance.Percent;
Description += " percent";
return this;
}
}
protected ComparisonConstraint(object expected)
: base(expected)
{
Guard.ArgumentValid(expected != null, "Cannot compare using a null reference.", "_expected");
_expected = expected;
}
public override ConstraintResult ApplyTo<TActual>(TActual actual)
{
Guard.ArgumentValid(actual != null, "Cannot compare to a null reference.", "actual");
return new ConstraintResult(this, actual, PerformComparison(_comparer, actual, _expected, _tolerance));
}
protected abstract bool PerformComparison(ComparisonAdapter comparer, object actual, object expected, Tolerance tolerance);
public ComparisonConstraint Using(IComparer comparer)
{
_comparer = ComparisonAdapter.For(comparer);
return this;
}
public ComparisonConstraint Using<T>(IComparer<T> comparer)
{
_comparer = ComparisonAdapter.For(comparer);
return this;
}
public ComparisonConstraint Using<T>(Comparison<T> comparer)
{
_comparer = ComparisonAdapter.For(comparer);
return this;
}
public ComparisonConstraint Within(object amount)
{
if (!_tolerance.IsUnsetOrDefault)
throw new InvalidOperationException("Within modifier may appear only once in a constraint expression");
_tolerance = new Tolerance(amount);
Description = Description + " within " + MsgUtils.FormatValue(amount);
return this;
}
}
}