EqualTimeBasedConstraintWithNumericTolerance<T>
public class EqualTimeBasedConstraintWithNumericTolerance<T> where T : IEquatable<T>, IComparable<T>
EqualConstraint is able to compare an actual value with the
expected value provided in its constructor. Two objects are
considered equal if both are null, or if both have the same
value. NUnit has special semantics for some object types.
using System;
using System.Runtime.CompilerServices;
namespace NUnit.Framework.Constraints
{
[NullableContext(1)]
[Nullable(0)]
public class EqualTimeBasedConstraintWithNumericTolerance<T> where T : IEquatable<T>, IComparable<T>
{
private readonly T _expected;
private readonly Func<T, long> _getTicks;
private readonly double _tolerance;
[Nullable(2)]
[field: Nullable(2)]
public ConstraintBuilder Builder {
[NullableContext(2)]
get;
[NullableContext(2)]
set;
}
public EqualTimeBasedConstraintWithTimeSpanTolerance<T> Days => Within(TimeSpan.FromDays(_tolerance));
public EqualTimeBasedConstraintWithTimeSpanTolerance<T> Hours => Within(TimeSpan.FromHours(_tolerance));
public EqualTimeBasedConstraintWithTimeSpanTolerance<T> Minutes => Within(TimeSpan.FromMinutes(_tolerance));
public EqualTimeBasedConstraintWithTimeSpanTolerance<T> Seconds => Within(TimeSpan.FromSeconds(_tolerance));
public EqualTimeBasedConstraintWithTimeSpanTolerance<T> Milliseconds => Within(TimeSpan.FromMilliseconds(_tolerance));
public EqualTimeBasedConstraintWithTimeSpanTolerance<T> Ticks => Within(TimeSpan.FromTicks((long)_tolerance));
public EqualTimeBasedConstraintWithNumericTolerance(T expected, Func<T, long> getTicks, double tolerance)
{
_expected = expected;
_tolerance = tolerance;
_getTicks = getTicks;
}
private EqualTimeBasedConstraintWithTimeSpanTolerance<T> Within(TimeSpan amount)
{
EqualTimeBasedConstraintWithTimeSpanTolerance<T> equalTimeBasedConstraintWithTimeSpanTolerance = new EqualTimeBasedConstraintWithTimeSpanTolerance<T>(_expected, _getTicks, amount);
Builder?.Replace(equalTimeBasedConstraintWithTimeSpanTolerance);
return equalTimeBasedConstraintWithTimeSpanTolerance;
}
}
}