…lable types
Adds `Within(tolerance)` overloads for `DateTimeOffset` and for the nullable counterparts of all supported types (`double?`, `float?`, `decimal?`, `DateTime?`, `DateTimeOffset?`, `TimeSpan?`). Nullable parameters previously had no way to use a tolerance at all, because `It.IIsParameter<T>` is only covariant for reference types. For them, `null` matches only `null`, as `EqualityComparer<T?>.Default` does.
`Within` now returns `IParameterWithCallback<T>` instead of `It.IIsParameter<T>`, so a subsequent `Using(IEqualityComparer<T>)` can no longer silently replace the tolerance. This mirrors `It.IsInRange(...).Exclusive()`.
Fixes three defects in the tolerance comparison: `NaN` and the infinities no longer stop matching themselves once a tolerance is applied, `decimal` and `TimeSpan` no longer throw an `OverflowException` when the compared values are far apart, and a `NaN` tolerance is rejected instead of silently disabling the matcher.
The `.Within(...)` suffix in failure messages is now driven by explicit matcher state instead of by the runtime type of the comparer.
Adds
Within(tolerance)extension methods onIt.IIsParameter<T>fordouble,float,decimal,DateTimeandTimeSpan, so a comparison with a tolerance no longer needs a manualIt.Satisfieslambda. The overloads are bound to the concrete type arguments, soWithinis not available for other types. A negative tolerance throwsArgumentOutOfRangeException, and failure messages render the matcher asIt.Is(value).Within(tolerance).