<PackageReference Include="NUnit" Version="4.3.1" />

EqualTimeBaseConstraint<T>

public class EqualTimeBaseConstraint<T> : Constraint where T : struct, 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 { public class EqualTimeBaseConstraint<T> : Constraint where T : struct, IEquatable<T>, IComparable<T> { private readonly T _expected; [Nullable(new byte[] { 1, 0 })] private readonly Func<T, long> _getTicks; public T Expected => _expected; [Nullable(1)] public override string Description { [NullableContext(1)] get { return MsgUtils.FormatValue(_expected); } } public EqualTimeBaseConstraint(T expected, [Nullable(new byte[] { 1, 0 })] Func<T, long> getTicks) : base(expected) { _expected = expected; _getTicks = getTicks; } [return: Nullable(new byte[] { 1, 0 })] public EqualTimeBasedConstraintWithTimeSpanTolerance<T> Within(TimeSpan amount) { EqualTimeBasedConstraintWithTimeSpanTolerance<T> equalTimeBasedConstraintWithTimeSpanTolerance = new EqualTimeBasedConstraintWithTimeSpanTolerance<T>(_expected, _getTicks, amount); base.Builder?.Replace(equalTimeBasedConstraintWithTimeSpanTolerance); return equalTimeBasedConstraintWithTimeSpanTolerance; } [return: Nullable(new byte[] { 1, 0 })] public EqualTimeBasedConstraintWithNumericTolerance<T> Within(double amount) { return new EqualTimeBasedConstraintWithNumericTolerance<T>(_expected, _getTicks, amount) { Builder = base.Builder }; } [return: Nullable(1)] public virtual ConstraintResult ApplyTo(T actual) { bool isSuccess = _expected.Equals(actual); return new ConstraintResult(this, actual, isSuccess); } [NullableContext(1)] public override ConstraintResult ApplyTo<[Nullable(2)] TActual>(TActual actual) { if (((object)actual) is T) { T actual2 = actual as T; return this.ApplyTo(actual2); } return new ConstraintResult(this, actual, false); } } }