diff --git a/TUnit.Assertions.Tests/NumericToleranceAssertionTests.cs b/TUnit.Assertions.Tests/NumericToleranceAssertionTests.cs new file mode 100644 index 0000000000..fdac31cc5d --- /dev/null +++ b/TUnit.Assertions.Tests/NumericToleranceAssertionTests.cs @@ -0,0 +1,291 @@ +using TUnit.Assertions.Extensions; + +namespace TUnit.Assertions.Tests; + +public class NumericToleranceAssertionTests +{ + // ========================================== + // IsCloseTo tests - double + // ========================================== + + [Test] + public async Task Double_IsCloseTo_Within_Tolerance_Passes() + { + double value = 10.5; + await Assert.That(value).IsCloseTo(10.0, 0.5); + } + + [Test] + public async Task Double_IsCloseTo_Exact_Match_Passes() + { + double value = 3.14; + await Assert.That(value).IsCloseTo(3.14, 0.0); + } + + [Test] + public async Task Double_IsCloseTo_Outside_Tolerance_Fails() + { + double value = 10.0; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsCloseTo(12.0, 1.0)); + } + + [Test] + public async Task Double_IsCloseTo_NaN_Both_Passes() + { + await Assert.That(double.NaN).IsCloseTo(double.NaN, 0.1); + } + + [Test] + public async Task Double_IsCloseTo_NaN_Actual_Fails() + { + await Assert.ThrowsAsync( + async () => await Assert.That(double.NaN).IsCloseTo(1.0, 0.1)); + } + + [Test] + public async Task Double_IsCloseTo_Negative_Values_Passes() + { + double value = -5.1; + await Assert.That(value).IsCloseTo(-5.0, 0.2); + } + + // ========================================== + // IsCloseTo tests - float + // ========================================== + + [Test] + public async Task Float_IsCloseTo_Within_Tolerance_Passes() + { + float value = 10.5f; + await Assert.That(value).IsCloseTo(10.0f, 0.5f); + } + + [Test] + public async Task Float_IsCloseTo_Outside_Tolerance_Fails() + { + float value = 10.0f; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsCloseTo(12.0f, 1.0f)); + } + + [Test] + public async Task Float_IsCloseTo_NaN_Both_Passes() + { + await Assert.That(float.NaN).IsCloseTo(float.NaN, 0.1f); + } + + // ========================================== + // IsCloseTo tests - int + // ========================================== + + [Test] + public async Task Int_IsCloseTo_Within_Tolerance_Passes() + { + int value = 105; + await Assert.That(value).IsCloseTo(100, 5); + } + + [Test] + public async Task Int_IsCloseTo_Exact_Match_Passes() + { + int value = 42; + await Assert.That(value).IsCloseTo(42, 0); + } + + [Test] + public async Task Int_IsCloseTo_Outside_Tolerance_Fails() + { + int value = 100; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsCloseTo(110, 5)); + } + + // ========================================== + // IsCloseTo tests - long + // ========================================== + + [Test] + public async Task Long_IsCloseTo_Within_Tolerance_Passes() + { + long value = 1000000005L; + await Assert.That(value).IsCloseTo(1000000000L, 10L); + } + + [Test] + public async Task Long_IsCloseTo_Outside_Tolerance_Fails() + { + long value = 100L; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsCloseTo(200L, 50L)); + } + + // ========================================== + // IsCloseTo tests - decimal + // ========================================== + + [Test] + public async Task Decimal_IsCloseTo_Within_Tolerance_Passes() + { + decimal value = 10.05m; + await Assert.That(value).IsCloseTo(10.0m, 0.1m); + } + + [Test] + public async Task Decimal_IsCloseTo_Outside_Tolerance_Fails() + { + decimal value = 10.0m; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsCloseTo(12.0m, 1.0m)); + } + + // ========================================== + // IsWithinPercentOf tests - double + // ========================================== + + [Test] + public async Task Double_IsWithinPercentOf_Passes() + { + double value = 105.0; + await Assert.That(value).IsWithinPercentOf(100.0, 10.0); + } + + [Test] + public async Task Double_IsWithinPercentOf_Exact_Match_Passes() + { + double value = 100.0; + await Assert.That(value).IsWithinPercentOf(100.0, 0.0); + } + + [Test] + public async Task Double_IsWithinPercentOf_At_Boundary_Passes() + { + double value = 110.0; + await Assert.That(value).IsWithinPercentOf(100.0, 10.0); + } + + [Test] + public async Task Double_IsWithinPercentOf_Outside_Fails() + { + double value = 120.0; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsWithinPercentOf(100.0, 10.0)); + } + + [Test] + public async Task Double_IsWithinPercentOf_Negative_Expected_Passes() + { + double value = -95.0; + await Assert.That(value).IsWithinPercentOf(-100.0, 10.0); + } + + [Test] + public async Task Double_IsWithinPercentOf_NaN_Both_Passes() + { + await Assert.That(double.NaN).IsWithinPercentOf(double.NaN, 10.0); + } + + // ========================================== + // IsWithinPercentOf tests - float + // ========================================== + + [Test] + public async Task Float_IsWithinPercentOf_Passes() + { + float value = 105.0f; + await Assert.That(value).IsWithinPercentOf(100.0f, 10.0f); + } + + [Test] + public async Task Float_IsWithinPercentOf_Outside_Fails() + { + float value = 120.0f; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsWithinPercentOf(100.0f, 10.0f)); + } + + // ========================================== + // IsWithinPercentOf tests - int + // ========================================== + + [Test] + public async Task Int_IsWithinPercentOf_Passes() + { + int value = 105; + await Assert.That(value).IsWithinPercentOf(100, 10.0); + } + + [Test] + public async Task Int_IsWithinPercentOf_Outside_Fails() + { + int value = 120; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsWithinPercentOf(100, 10.0)); + } + + // ========================================== + // IsWithinPercentOf tests - long + // ========================================== + + [Test] + public async Task Long_IsWithinPercentOf_Passes() + { + long value = 1050L; + await Assert.That(value).IsWithinPercentOf(1000L, 10.0); + } + + [Test] + public async Task Long_IsWithinPercentOf_Outside_Fails() + { + long value = 1200L; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsWithinPercentOf(1000L, 10.0)); + } + + // ========================================== + // IsWithinPercentOf tests - decimal + // ========================================== + + [Test] + public async Task Decimal_IsWithinPercentOf_Passes() + { + decimal value = 105.0m; + await Assert.That(value).IsWithinPercentOf(100.0m, 10.0m); + } + + [Test] + public async Task Decimal_IsWithinPercentOf_Outside_Fails() + { + decimal value = 120.0m; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsWithinPercentOf(100.0m, 10.0m)); + } + + // ========================================== + // Edge cases + // ========================================== + + [Test] + public async Task Double_IsCloseTo_Zero_Expected_Passes() + { + double value = 0.001; + await Assert.That(value).IsCloseTo(0.0, 0.01); + } + + [Test] + public async Task Int_IsWithinPercentOf_Zero_Expected_Fails() + { + // 10% of 0 is 0, so only exact match passes + int value = 1; + await Assert.ThrowsAsync( + async () => await Assert.That(value).IsWithinPercentOf(0, 10.0)); + } + + [Test] + public async Task Int_IsWithinPercentOf_Zero_Expected_Zero_Actual_Passes() + { + // 0 is within any percent of 0 + int value = 0; + await Assert.That(value).IsWithinPercentOf(0, 10.0); + } +} diff --git a/TUnit.Assertions/Conditions/NumericIsCloseToAssertion.cs b/TUnit.Assertions/Conditions/NumericIsCloseToAssertion.cs new file mode 100644 index 0000000000..3030f136aa --- /dev/null +++ b/TUnit.Assertions/Conditions/NumericIsCloseToAssertion.cs @@ -0,0 +1,268 @@ +using TUnit.Assertions.Attributes; +using TUnit.Assertions.Core; + +namespace TUnit.Assertions.Conditions; + +/// +/// Asserts that a double value is close to an expected value within an absolute tolerance. +/// |actual - expected| <= tolerance +/// +[AssertionExtension("IsCloseTo", OverloadResolutionPriority = 2)] +public class DoubleIsCloseToAssertion : Assertion +{ + private readonly double _expected; + private readonly double _tolerance; + + public DoubleIsCloseToAssertion( + AssertionContext context, + double expected, + double tolerance) + : base(context) + { + _expected = expected; + _tolerance = tolerance; + } + + protected override Task CheckAsync(EvaluationMetadata metadata) + { + var value = metadata.Value; + var exception = metadata.Exception; + + if (exception != null) + { + return Task.FromResult(AssertionResult.Failed($"threw {exception.GetType().Name}")); + } + + // Handle NaN comparisons + if (double.IsNaN(value) && double.IsNaN(_expected)) + { + return AssertionResult._passedTask; + } + + if (double.IsNaN(value) || double.IsNaN(_expected)) + { + return Task.FromResult(AssertionResult.Failed($"found {value}")); + } + + // Handle infinity + if (double.IsPositiveInfinity(value) && double.IsPositiveInfinity(_expected)) + { + return AssertionResult._passedTask; + } + + if (double.IsNegativeInfinity(value) && double.IsNegativeInfinity(_expected)) + { + return AssertionResult._passedTask; + } + + var diff = Math.Abs(value - _expected); + + if (diff <= _tolerance) + { + return AssertionResult._passedTask; + } + + return Task.FromResult(AssertionResult.Failed($"found {value}, which differs by {diff}")); + } + + protected override string GetExpectation() => + $"to be close to {_expected} within tolerance {_tolerance}"; +} + +/// +/// Asserts that a float value is close to an expected value within an absolute tolerance. +/// |actual - expected| <= tolerance +/// +[AssertionExtension("IsCloseTo", OverloadResolutionPriority = 2)] +public class FloatIsCloseToAssertion : Assertion +{ + private readonly float _expected; + private readonly float _tolerance; + + public FloatIsCloseToAssertion( + AssertionContext context, + float expected, + float tolerance) + : base(context) + { + _expected = expected; + _tolerance = tolerance; + } + + protected override Task CheckAsync(EvaluationMetadata metadata) + { + var value = metadata.Value; + var exception = metadata.Exception; + + if (exception != null) + { + return Task.FromResult(AssertionResult.Failed($"threw {exception.GetType().Name}")); + } + + // Handle NaN comparisons + if (float.IsNaN(value) && float.IsNaN(_expected)) + { + return AssertionResult._passedTask; + } + + if (float.IsNaN(value) || float.IsNaN(_expected)) + { + return Task.FromResult(AssertionResult.Failed($"found {value}")); + } + + // Handle infinity + if (float.IsPositiveInfinity(value) && float.IsPositiveInfinity(_expected)) + { + return AssertionResult._passedTask; + } + + if (float.IsNegativeInfinity(value) && float.IsNegativeInfinity(_expected)) + { + return AssertionResult._passedTask; + } + + var diff = Math.Abs(value - _expected); + + if (diff <= _tolerance) + { + return AssertionResult._passedTask; + } + + return Task.FromResult(AssertionResult.Failed($"found {value}, which differs by {diff}")); + } + + protected override string GetExpectation() => + $"to be close to {_expected} within tolerance {_tolerance}"; +} + +/// +/// Asserts that an int value is close to an expected value within an absolute tolerance. +/// |actual - expected| <= tolerance +/// +[AssertionExtension("IsCloseTo", OverloadResolutionPriority = 2)] +public class IntIsCloseToAssertion : Assertion +{ + private readonly int _expected; + private readonly int _tolerance; + + public IntIsCloseToAssertion( + AssertionContext context, + int expected, + int tolerance) + : base(context) + { + _expected = expected; + _tolerance = tolerance; + } + + protected override Task CheckAsync(EvaluationMetadata metadata) + { + var value = metadata.Value; + var exception = metadata.Exception; + + if (exception != null) + { + return Task.FromResult(AssertionResult.Failed($"threw {exception.GetType().Name}")); + } + + var diff = Math.Abs((long)value - _expected); + + if (diff <= _tolerance) + { + return AssertionResult._passedTask; + } + + return Task.FromResult(AssertionResult.Failed($"found {value}, which differs by {diff}")); + } + + protected override string GetExpectation() => + $"to be close to {_expected} within tolerance {_tolerance}"; +} + +/// +/// Asserts that a long value is close to an expected value within an absolute tolerance. +/// |actual - expected| <= tolerance +/// +[AssertionExtension("IsCloseTo", OverloadResolutionPriority = 2)] +public class LongIsCloseToAssertion : Assertion +{ + private readonly long _expected; + private readonly long _tolerance; + + public LongIsCloseToAssertion( + AssertionContext context, + long expected, + long tolerance) + : base(context) + { + _expected = expected; + _tolerance = tolerance; + } + + protected override Task CheckAsync(EvaluationMetadata metadata) + { + var value = metadata.Value; + var exception = metadata.Exception; + + if (exception != null) + { + return Task.FromResult(AssertionResult.Failed($"threw {exception.GetType().Name}")); + } + + var diff = Math.Abs((double)value - _expected); + + if (diff <= (double)_tolerance) + { + return AssertionResult._passedTask; + } + + return Task.FromResult(AssertionResult.Failed($"found {value}, which differs by {diff}")); + } + + protected override string GetExpectation() => + $"to be close to {_expected} within tolerance {_tolerance}"; +} + +/// +/// Asserts that a decimal value is close to an expected value within an absolute tolerance. +/// |actual - expected| <= tolerance +/// +[AssertionExtension("IsCloseTo", OverloadResolutionPriority = 2)] +public class DecimalIsCloseToAssertion : Assertion +{ + private readonly decimal _expected; + private readonly decimal _tolerance; + + public DecimalIsCloseToAssertion( + AssertionContext context, + decimal expected, + decimal tolerance) + : base(context) + { + _expected = expected; + _tolerance = tolerance; + } + + protected override Task CheckAsync(EvaluationMetadata metadata) + { + var value = metadata.Value; + var exception = metadata.Exception; + + if (exception != null) + { + return Task.FromResult(AssertionResult.Failed($"threw {exception.GetType().Name}")); + } + + var diff = Math.Abs(value - _expected); + + if (diff <= _tolerance) + { + return AssertionResult._passedTask; + } + + return Task.FromResult(AssertionResult.Failed($"found {value}, which differs by {diff}")); + } + + protected override string GetExpectation() => + $"to be close to {_expected} within tolerance {_tolerance}"; +} diff --git a/TUnit.Assertions/Conditions/NumericIsWithinPercentOfAssertion.cs b/TUnit.Assertions/Conditions/NumericIsWithinPercentOfAssertion.cs new file mode 100644 index 0000000000..03b6a51abe --- /dev/null +++ b/TUnit.Assertions/Conditions/NumericIsWithinPercentOfAssertion.cs @@ -0,0 +1,282 @@ +using TUnit.Assertions.Attributes; +using TUnit.Assertions.Core; + +namespace TUnit.Assertions.Conditions; + +/// +/// Asserts that a double value is within a given percentage of an expected value. +/// |actual - expected| <= |expected * percent / 100| +/// +[AssertionExtension("IsWithinPercentOf", OverloadResolutionPriority = 2)] +public class DoubleIsWithinPercentOfAssertion : Assertion +{ + private readonly double _expected; + private readonly double _percent; + + public DoubleIsWithinPercentOfAssertion( + AssertionContext context, + double expected, + double percent) + : base(context) + { + _expected = expected; + _percent = percent; + } + + protected override Task CheckAsync(EvaluationMetadata metadata) + { + var value = metadata.Value; + var exception = metadata.Exception; + + if (exception != null) + { + return Task.FromResult(AssertionResult.Failed($"threw {exception.GetType().Name}")); + } + + // Handle NaN comparisons + if (double.IsNaN(value) && double.IsNaN(_expected)) + { + return AssertionResult._passedTask; + } + + if (double.IsNaN(value) || double.IsNaN(_expected)) + { + return Task.FromResult(AssertionResult.Failed($"found {value}")); + } + + // Handle infinity + if (double.IsPositiveInfinity(value) && double.IsPositiveInfinity(_expected)) + { + return AssertionResult._passedTask; + } + + if (double.IsNegativeInfinity(value) && double.IsNegativeInfinity(_expected)) + { + return AssertionResult._passedTask; + } + + var diff = Math.Abs(value - _expected); + var allowedDelta = Math.Abs(_expected * _percent / 100.0); + + if (diff <= allowedDelta) + { + return AssertionResult._passedTask; + } + + return Task.FromResult(AssertionResult.Failed( + $"found {value}, which differs by {diff} ({(diff / Math.Abs(_expected)) * 100:F2}% of expected)")); + } + + protected override string GetExpectation() => + $"to be within {_percent}% of {_expected}"; +} + +/// +/// Asserts that a float value is within a given percentage of an expected value. +/// |actual - expected| <= |expected * percent / 100| +/// +[AssertionExtension("IsWithinPercentOf", OverloadResolutionPriority = 2)] +public class FloatIsWithinPercentOfAssertion : Assertion +{ + private readonly float _expected; + private readonly float _percent; + + public FloatIsWithinPercentOfAssertion( + AssertionContext context, + float expected, + float percent) + : base(context) + { + _expected = expected; + _percent = percent; + } + + protected override Task CheckAsync(EvaluationMetadata metadata) + { + var value = metadata.Value; + var exception = metadata.Exception; + + if (exception != null) + { + return Task.FromResult(AssertionResult.Failed($"threw {exception.GetType().Name}")); + } + + // Handle NaN comparisons + if (float.IsNaN(value) && float.IsNaN(_expected)) + { + return AssertionResult._passedTask; + } + + if (float.IsNaN(value) || float.IsNaN(_expected)) + { + return Task.FromResult(AssertionResult.Failed($"found {value}")); + } + + // Handle infinity + if (float.IsPositiveInfinity(value) && float.IsPositiveInfinity(_expected)) + { + return AssertionResult._passedTask; + } + + if (float.IsNegativeInfinity(value) && float.IsNegativeInfinity(_expected)) + { + return AssertionResult._passedTask; + } + + var diff = Math.Abs(value - _expected); + var allowedDelta = Math.Abs(_expected * _percent / 100.0f); + + if (diff <= allowedDelta) + { + return AssertionResult._passedTask; + } + + return Task.FromResult(AssertionResult.Failed( + $"found {value}, which differs by {diff} ({(diff / Math.Abs(_expected)) * 100:F2}% of expected)")); + } + + protected override string GetExpectation() => + $"to be within {_percent}% of {_expected}"; +} + +/// +/// Asserts that an int value is within a given percentage of an expected value. +/// |actual - expected| <= |expected * percent / 100| +/// +[AssertionExtension("IsWithinPercentOf", OverloadResolutionPriority = 2)] +public class IntIsWithinPercentOfAssertion : Assertion +{ + private readonly int _expected; + private readonly double _percent; + + public IntIsWithinPercentOfAssertion( + AssertionContext context, + int expected, + double percent) + : base(context) + { + _expected = expected; + _percent = percent; + } + + protected override Task CheckAsync(EvaluationMetadata metadata) + { + var value = metadata.Value; + var exception = metadata.Exception; + + if (exception != null) + { + return Task.FromResult(AssertionResult.Failed($"threw {exception.GetType().Name}")); + } + + var diff = Math.Abs((double)value - _expected); + var allowedDelta = Math.Abs(_expected * _percent / 100.0); + + if (diff <= allowedDelta) + { + return AssertionResult._passedTask; + } + + var actualPercent = _expected != 0 ? (diff / Math.Abs(_expected)) * 100 : double.PositiveInfinity; + return Task.FromResult(AssertionResult.Failed( + $"found {value}, which differs by {(long)diff} ({actualPercent:F2}% of expected)")); + } + + protected override string GetExpectation() => + $"to be within {_percent}% of {_expected}"; +} + +/// +/// Asserts that a long value is within a given percentage of an expected value. +/// |actual - expected| <= |expected * percent / 100| +/// +[AssertionExtension("IsWithinPercentOf", OverloadResolutionPriority = 2)] +public class LongIsWithinPercentOfAssertion : Assertion +{ + private readonly long _expected; + private readonly double _percent; + + public LongIsWithinPercentOfAssertion( + AssertionContext context, + long expected, + double percent) + : base(context) + { + _expected = expected; + _percent = percent; + } + + protected override Task CheckAsync(EvaluationMetadata metadata) + { + var value = metadata.Value; + var exception = metadata.Exception; + + if (exception != null) + { + return Task.FromResult(AssertionResult.Failed($"threw {exception.GetType().Name}")); + } + + var diff = Math.Abs((double)value - _expected); + var allowedDelta = Math.Abs(_expected * _percent / 100.0); + + if (diff <= allowedDelta) + { + return AssertionResult._passedTask; + } + + var actualPercent = _expected != 0 ? (diff / Math.Abs(_expected)) * 100 : double.PositiveInfinity; + return Task.FromResult(AssertionResult.Failed( + $"found {value}, which differs by {(long)diff} ({actualPercent:F2}% of expected)")); + } + + protected override string GetExpectation() => + $"to be within {_percent}% of {_expected}"; +} + +/// +/// Asserts that a decimal value is within a given percentage of an expected value. +/// |actual - expected| <= |expected * percent / 100| +/// +[AssertionExtension("IsWithinPercentOf", OverloadResolutionPriority = 2)] +public class DecimalIsWithinPercentOfAssertion : Assertion +{ + private readonly decimal _expected; + private readonly decimal _percent; + + public DecimalIsWithinPercentOfAssertion( + AssertionContext context, + decimal expected, + decimal percent) + : base(context) + { + _expected = expected; + _percent = percent; + } + + protected override Task CheckAsync(EvaluationMetadata metadata) + { + var value = metadata.Value; + var exception = metadata.Exception; + + if (exception != null) + { + return Task.FromResult(AssertionResult.Failed($"threw {exception.GetType().Name}")); + } + + var diff = Math.Abs(value - _expected); + var allowedDelta = Math.Abs(_expected * _percent / 100m); + + if (diff <= allowedDelta) + { + return AssertionResult._passedTask; + } + + var actualPercent = _expected != 0 ? (diff / Math.Abs(_expected)) * 100m : -1m; + var percentDisplay = actualPercent >= 0 ? $"{actualPercent:F2}%" : "Infinity%"; + return Task.FromResult(AssertionResult.Failed( + $"found {value}, which differs by {diff} ({percentDisplay} of expected)")); + } + + protected override string GetExpectation() => + $"to be within {_percent}% of {_expected}"; +} diff --git a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet10_0.verified.txt b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet10_0.verified.txt index c077811935..5b889b7881 100644 --- a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet10_0.verified.txt +++ b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet10_0.verified.txt @@ -997,6 +997,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(decimal actual, decimal expected, decimal tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class DecimalIsCloseToAssertion : . + { + public DecimalIsCloseToAssertion(. context, decimal expected, decimal tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class DecimalIsWithinPercentOfAssertion : . + { + public DecimalIsWithinPercentOfAssertion(. context, decimal expected, decimal percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class DictionaryAllKeysAssertion : . where TDictionary : . where TKey : notnull @@ -1112,6 +1126,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(double actual, double expected, double tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class DoubleIsCloseToAssertion : . + { + public DoubleIsCloseToAssertion(. context, double expected, double tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class DoubleIsWithinPercentOfAssertion : . + { + public DoubleIsWithinPercentOfAssertion(. context, double expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } [.("IsEqualTo")] public class EqualsAssertion : . { @@ -1224,6 +1252,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(float actual, float expected, float tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class FloatIsCloseToAssertion : . + { + public FloatIsCloseToAssertion(. context, float expected, float tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class FloatIsWithinPercentOfAssertion : . + { + public FloatIsWithinPercentOfAssertion(. context, float expected, float percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } [.("IsGreaterThan")] public class GreaterThanAssertion : . where TValue : @@ -1341,6 +1383,20 @@ namespace .Conditions protected override string GetExpectation() { } public . Within(int tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class IntIsCloseToAssertion : . + { + public IntIsCloseToAssertion(. context, int expected, int tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class IntIsWithinPercentOfAssertion : . + { + public IntIsWithinPercentOfAssertion(. context, int expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class IsAssignableToAssertion : . { public IsAssignableToAssertion(. context) { } @@ -1539,6 +1595,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(long actual, long expected, long tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class LongIsCloseToAssertion : . + { + public LongIsCloseToAssertion(. context, long expected, long tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class LongIsWithinPercentOfAssertion : . + { + public LongIsWithinPercentOfAssertion(. context, long expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class MappedSatisfiesAssertion : . { public MappedSatisfiesAssertion(. context, selector, <., .?> assertions, string selectorDescription) { } @@ -3376,6 +3446,16 @@ namespace .Extensions [.(2)] public static . IsEqualTo(this . source, decimal expected, [.("expected")] string? expectedExpression = null) { } } + public static class DecimalIsCloseToAssertionExtensions + { + [.(2)] + public static . IsCloseTo(this . source, decimal expected, decimal tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class DecimalIsWithinPercentOfAssertionExtensions + { + [.(2)] + public static . IsWithinPercentOf(this . source, decimal expected, decimal percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Decimal_IsNotZero_Assertion : . { public Decimal_IsNotZero_Assertion(. context) { } @@ -3501,6 +3581,11 @@ namespace .Extensions [.(2)] public static . IsEqualTo(this . source, double expected, [.("expected")] string? expectedExpression = null) { } } + public static class DoubleIsCloseToAssertionExtensions + { + [.(2)] + public static . IsCloseTo(this . source, double expected, double tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } public class DoubleIsFiniteWithDoubleAssertion : . { public DoubleIsFiniteWithDoubleAssertion(. context, bool negated = false) { } @@ -3543,6 +3628,11 @@ namespace .Extensions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } } + public static class DoubleIsWithinPercentOfAssertionExtensions + { + [.(2)] + public static . IsWithinPercentOf(this . source, double expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Double_IsNotZero_Assertion : . { public Double_IsNotZero_Assertion(. context) { } @@ -3808,6 +3898,11 @@ namespace .Extensions [.(2)] public static . IsEqualTo(this . source, float expected, [.("expected")] string? expectedExpression = null) { } } + public static class FloatIsCloseToAssertionExtensions + { + [.(2)] + public static . IsCloseTo(this . source, float expected, float tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } public class FloatIsFiniteWithFloatAssertion : . { public FloatIsFiniteWithFloatAssertion(. context, bool negated = false) { } @@ -3850,6 +3945,11 @@ namespace .Extensions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } } + public static class FloatIsWithinPercentOfAssertionExtensions + { + [.(2)] + public static . IsWithinPercentOf(this . source, float expected, float percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Float_IsNotZero_Assertion : . { public Float_IsNotZero_Assertion(. context) { } @@ -4182,6 +4282,16 @@ namespace .Extensions [.(2)] public static . IsEqualTo(this . source, int expected, [.("expected")] string? expectedExpression = null) { } } + public static class IntIsCloseToAssertionExtensions + { + [.(2)] + public static . IsCloseTo(this . source, int expected, int tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class IntIsWithinPercentOfAssertionExtensions + { + [.(2)] + public static . IsWithinPercentOf(this . source, int expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Int_IsEven_Assertion : . { public Int_IsEven_Assertion(. context) { } @@ -4454,6 +4564,16 @@ namespace .Extensions [.(2)] public static . IsEqualTo(this . source, long expected, [.("expected")] string? expectedExpression = null) { } } + public static class LongIsCloseToAssertionExtensions + { + [.(2)] + public static . IsCloseTo(this . source, long expected, long tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class LongIsWithinPercentOfAssertionExtensions + { + [.(2)] + public static . IsWithinPercentOf(this . source, long expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Long_IsEven_Assertion : . { public Long_IsEven_Assertion(. context) { } diff --git a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet8_0.verified.txt b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet8_0.verified.txt index 22c60eeb60..ee583b2ced 100644 --- a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet8_0.verified.txt +++ b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet8_0.verified.txt @@ -980,6 +980,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(decimal actual, decimal expected, decimal tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class DecimalIsCloseToAssertion : . + { + public DecimalIsCloseToAssertion(. context, decimal expected, decimal tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class DecimalIsWithinPercentOfAssertion : . + { + public DecimalIsWithinPercentOfAssertion(. context, decimal expected, decimal percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class DictionaryAllKeysAssertion : . where TDictionary : . where TKey : notnull @@ -1095,6 +1109,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(double actual, double expected, double tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class DoubleIsCloseToAssertion : . + { + public DoubleIsCloseToAssertion(. context, double expected, double tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class DoubleIsWithinPercentOfAssertion : . + { + public DoubleIsWithinPercentOfAssertion(. context, double expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } [.("IsEqualTo")] public class EqualsAssertion : . { @@ -1207,6 +1235,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(float actual, float expected, float tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class FloatIsCloseToAssertion : . + { + public FloatIsCloseToAssertion(. context, float expected, float tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class FloatIsWithinPercentOfAssertion : . + { + public FloatIsWithinPercentOfAssertion(. context, float expected, float percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } [.("IsGreaterThan")] public class GreaterThanAssertion : . where TValue : @@ -1324,6 +1366,20 @@ namespace .Conditions protected override string GetExpectation() { } public . Within(int tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class IntIsCloseToAssertion : . + { + public IntIsCloseToAssertion(. context, int expected, int tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class IntIsWithinPercentOfAssertion : . + { + public IntIsWithinPercentOfAssertion(. context, int expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class IsAssignableToAssertion : . { public IsAssignableToAssertion(. context) { } @@ -1522,6 +1578,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(long actual, long expected, long tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class LongIsCloseToAssertion : . + { + public LongIsCloseToAssertion(. context, long expected, long tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class LongIsWithinPercentOfAssertion : . + { + public LongIsWithinPercentOfAssertion(. context, long expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class MappedSatisfiesAssertion : . { public MappedSatisfiesAssertion(. context, selector, <., .?> assertions, string selectorDescription) { } @@ -3344,6 +3414,14 @@ namespace .Extensions { public static . IsEqualTo(this . source, decimal expected, [.("expected")] string? expectedExpression = null) { } } + public static class DecimalIsCloseToAssertionExtensions + { + public static . IsCloseTo(this . source, decimal expected, decimal tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class DecimalIsWithinPercentOfAssertionExtensions + { + public static . IsWithinPercentOf(this . source, decimal expected, decimal percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Decimal_IsNotZero_Assertion : . { public Decimal_IsNotZero_Assertion(. context) { } @@ -3468,6 +3546,10 @@ namespace .Extensions { public static . IsEqualTo(this . source, double expected, [.("expected")] string? expectedExpression = null) { } } + public static class DoubleIsCloseToAssertionExtensions + { + public static . IsCloseTo(this . source, double expected, double tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } public class DoubleIsFiniteWithDoubleAssertion : . { public DoubleIsFiniteWithDoubleAssertion(. context, bool negated = false) { } @@ -3510,6 +3592,10 @@ namespace .Extensions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } } + public static class DoubleIsWithinPercentOfAssertionExtensions + { + public static . IsWithinPercentOf(this . source, double expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Double_IsNotZero_Assertion : . { public Double_IsNotZero_Assertion(. context) { } @@ -3774,6 +3860,10 @@ namespace .Extensions { public static . IsEqualTo(this . source, float expected, [.("expected")] string? expectedExpression = null) { } } + public static class FloatIsCloseToAssertionExtensions + { + public static . IsCloseTo(this . source, float expected, float tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } public class FloatIsFiniteWithFloatAssertion : . { public FloatIsFiniteWithFloatAssertion(. context, bool negated = false) { } @@ -3816,6 +3906,10 @@ namespace .Extensions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } } + public static class FloatIsWithinPercentOfAssertionExtensions + { + public static . IsWithinPercentOf(this . source, float expected, float percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Float_IsNotZero_Assertion : . { public Float_IsNotZero_Assertion(. context) { } @@ -4147,6 +4241,14 @@ namespace .Extensions { public static . IsEqualTo(this . source, int expected, [.("expected")] string? expectedExpression = null) { } } + public static class IntIsCloseToAssertionExtensions + { + public static . IsCloseTo(this . source, int expected, int tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class IntIsWithinPercentOfAssertionExtensions + { + public static . IsWithinPercentOf(this . source, int expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Int_IsEven_Assertion : . { public Int_IsEven_Assertion(. context) { } @@ -4404,6 +4506,14 @@ namespace .Extensions { public static . IsEqualTo(this . source, long expected, [.("expected")] string? expectedExpression = null) { } } + public static class LongIsCloseToAssertionExtensions + { + public static . IsCloseTo(this . source, long expected, long tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class LongIsWithinPercentOfAssertionExtensions + { + public static . IsWithinPercentOf(this . source, long expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Long_IsEven_Assertion : . { public Long_IsEven_Assertion(. context) { } diff --git a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet9_0.verified.txt b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet9_0.verified.txt index 2444ba3104..5042128ae8 100644 --- a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet9_0.verified.txt +++ b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet9_0.verified.txt @@ -997,6 +997,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(decimal actual, decimal expected, decimal tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class DecimalIsCloseToAssertion : . + { + public DecimalIsCloseToAssertion(. context, decimal expected, decimal tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class DecimalIsWithinPercentOfAssertion : . + { + public DecimalIsWithinPercentOfAssertion(. context, decimal expected, decimal percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class DictionaryAllKeysAssertion : . where TDictionary : . where TKey : notnull @@ -1112,6 +1126,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(double actual, double expected, double tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class DoubleIsCloseToAssertion : . + { + public DoubleIsCloseToAssertion(. context, double expected, double tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class DoubleIsWithinPercentOfAssertion : . + { + public DoubleIsWithinPercentOfAssertion(. context, double expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } [.("IsEqualTo")] public class EqualsAssertion : . { @@ -1224,6 +1252,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(float actual, float expected, float tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class FloatIsCloseToAssertion : . + { + public FloatIsCloseToAssertion(. context, float expected, float tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class FloatIsWithinPercentOfAssertion : . + { + public FloatIsWithinPercentOfAssertion(. context, float expected, float percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } [.("IsGreaterThan")] public class GreaterThanAssertion : . where TValue : @@ -1341,6 +1383,20 @@ namespace .Conditions protected override string GetExpectation() { } public . Within(int tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class IntIsCloseToAssertion : . + { + public IntIsCloseToAssertion(. context, int expected, int tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class IntIsWithinPercentOfAssertion : . + { + public IntIsWithinPercentOfAssertion(. context, int expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class IsAssignableToAssertion : . { public IsAssignableToAssertion(. context) { } @@ -1539,6 +1595,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(long actual, long expected, long tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class LongIsCloseToAssertion : . + { + public LongIsCloseToAssertion(. context, long expected, long tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class LongIsWithinPercentOfAssertion : . + { + public LongIsWithinPercentOfAssertion(. context, long expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class MappedSatisfiesAssertion : . { public MappedSatisfiesAssertion(. context, selector, <., .?> assertions, string selectorDescription) { } @@ -3376,6 +3446,16 @@ namespace .Extensions [.(2)] public static . IsEqualTo(this . source, decimal expected, [.("expected")] string? expectedExpression = null) { } } + public static class DecimalIsCloseToAssertionExtensions + { + [.(2)] + public static . IsCloseTo(this . source, decimal expected, decimal tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class DecimalIsWithinPercentOfAssertionExtensions + { + [.(2)] + public static . IsWithinPercentOf(this . source, decimal expected, decimal percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Decimal_IsNotZero_Assertion : . { public Decimal_IsNotZero_Assertion(. context) { } @@ -3501,6 +3581,11 @@ namespace .Extensions [.(2)] public static . IsEqualTo(this . source, double expected, [.("expected")] string? expectedExpression = null) { } } + public static class DoubleIsCloseToAssertionExtensions + { + [.(2)] + public static . IsCloseTo(this . source, double expected, double tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } public class DoubleIsFiniteWithDoubleAssertion : . { public DoubleIsFiniteWithDoubleAssertion(. context, bool negated = false) { } @@ -3543,6 +3628,11 @@ namespace .Extensions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } } + public static class DoubleIsWithinPercentOfAssertionExtensions + { + [.(2)] + public static . IsWithinPercentOf(this . source, double expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Double_IsNotZero_Assertion : . { public Double_IsNotZero_Assertion(. context) { } @@ -3808,6 +3898,11 @@ namespace .Extensions [.(2)] public static . IsEqualTo(this . source, float expected, [.("expected")] string? expectedExpression = null) { } } + public static class FloatIsCloseToAssertionExtensions + { + [.(2)] + public static . IsCloseTo(this . source, float expected, float tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } public class FloatIsFiniteWithFloatAssertion : . { public FloatIsFiniteWithFloatAssertion(. context, bool negated = false) { } @@ -3850,6 +3945,11 @@ namespace .Extensions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } } + public static class FloatIsWithinPercentOfAssertionExtensions + { + [.(2)] + public static . IsWithinPercentOf(this . source, float expected, float percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Float_IsNotZero_Assertion : . { public Float_IsNotZero_Assertion(. context) { } @@ -4182,6 +4282,16 @@ namespace .Extensions [.(2)] public static . IsEqualTo(this . source, int expected, [.("expected")] string? expectedExpression = null) { } } + public static class IntIsCloseToAssertionExtensions + { + [.(2)] + public static . IsCloseTo(this . source, int expected, int tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class IntIsWithinPercentOfAssertionExtensions + { + [.(2)] + public static . IsWithinPercentOf(this . source, int expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Int_IsEven_Assertion : . { public Int_IsEven_Assertion(. context) { } @@ -4454,6 +4564,16 @@ namespace .Extensions [.(2)] public static . IsEqualTo(this . source, long expected, [.("expected")] string? expectedExpression = null) { } } + public static class LongIsCloseToAssertionExtensions + { + [.(2)] + public static . IsCloseTo(this . source, long expected, long tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class LongIsWithinPercentOfAssertionExtensions + { + [.(2)] + public static . IsWithinPercentOf(this . source, long expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Long_IsEven_Assertion : . { public Long_IsEven_Assertion(. context) { } diff --git a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.Net4_7.verified.txt b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.Net4_7.verified.txt index 3457173c39..99e4030670 100644 --- a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.Net4_7.verified.txt +++ b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.Net4_7.verified.txt @@ -835,6 +835,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(decimal actual, decimal expected, decimal tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class DecimalIsCloseToAssertion : . + { + public DecimalIsCloseToAssertion(. context, decimal expected, decimal tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class DecimalIsWithinPercentOfAssertion : . + { + public DecimalIsWithinPercentOfAssertion(. context, decimal expected, decimal percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class DictionaryAllKeysAssertion : . where TDictionary : . where TKey : notnull @@ -944,6 +958,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(double actual, double expected, double tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class DoubleIsCloseToAssertion : . + { + public DoubleIsCloseToAssertion(. context, double expected, double tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class DoubleIsWithinPercentOfAssertion : . + { + public DoubleIsWithinPercentOfAssertion(. context, double expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } [.("IsEqualTo")] public class EqualsAssertion : . { @@ -1056,6 +1084,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(float actual, float expected, float tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class FloatIsCloseToAssertion : . + { + public FloatIsCloseToAssertion(. context, float expected, float tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class FloatIsWithinPercentOfAssertion : . + { + public FloatIsWithinPercentOfAssertion(. context, float expected, float percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } [.("IsGreaterThan")] public class GreaterThanAssertion : . where TValue : @@ -1170,6 +1212,20 @@ namespace .Conditions protected override string GetExpectation() { } public . Within(int tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class IntIsCloseToAssertion : . + { + public IntIsCloseToAssertion(. context, int expected, int tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class IntIsWithinPercentOfAssertion : . + { + public IntIsWithinPercentOfAssertion(. context, int expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class IsAssignableToAssertion : . { public IsAssignableToAssertion(. context) { } @@ -1366,6 +1422,20 @@ namespace .Conditions protected override bool HasToleranceValue() { } protected override bool IsWithinTolerance(long actual, long expected, long tolerance) { } } + [.("IsCloseTo", OverloadResolutionPriority=2)] + public class LongIsCloseToAssertion : . + { + public LongIsCloseToAssertion(. context, long expected, long tolerance) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } + [.("IsWithinPercentOf", OverloadResolutionPriority=2)] + public class LongIsWithinPercentOfAssertion : . + { + public LongIsWithinPercentOfAssertion(. context, long expected, double percent) { } + protected override .<.> CheckAsync(. metadata) { } + protected override string GetExpectation() { } + } public class MappedSatisfiesAssertion : . { public MappedSatisfiesAssertion(. context, selector, <., .?> assertions, string selectorDescription) { } @@ -3003,6 +3073,14 @@ namespace .Extensions { public static . IsEqualTo(this . source, decimal expected, [.("expected")] string? expectedExpression = null) { } } + public static class DecimalIsCloseToAssertionExtensions + { + public static . IsCloseTo(this . source, decimal expected, decimal tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class DecimalIsWithinPercentOfAssertionExtensions + { + public static . IsWithinPercentOf(this . source, decimal expected, decimal percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Decimal_IsNotZero_Assertion : . { public Decimal_IsNotZero_Assertion(. context) { } @@ -3121,6 +3199,10 @@ namespace .Extensions { public static . IsEqualTo(this . source, double expected, [.("expected")] string? expectedExpression = null) { } } + public static class DoubleIsCloseToAssertionExtensions + { + public static . IsCloseTo(this . source, double expected, double tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } public class DoubleIsInfinityWithDoubleAssertion : . { public DoubleIsInfinityWithDoubleAssertion(. context, bool negated = false) { } @@ -3145,6 +3227,10 @@ namespace .Extensions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } } + public static class DoubleIsWithinPercentOfAssertionExtensions + { + public static . IsWithinPercentOf(this . source, double expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Double_IsNotZero_Assertion : . { public Double_IsNotZero_Assertion(. context) { } @@ -3405,6 +3491,10 @@ namespace .Extensions { public static . IsEqualTo(this . source, float expected, [.("expected")] string? expectedExpression = null) { } } + public static class FloatIsCloseToAssertionExtensions + { + public static . IsCloseTo(this . source, float expected, float tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } public class FloatIsInfinityWithFloatAssertion : . { public FloatIsInfinityWithFloatAssertion(. context, bool negated = false) { } @@ -3429,6 +3519,10 @@ namespace .Extensions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } } + public static class FloatIsWithinPercentOfAssertionExtensions + { + public static . IsWithinPercentOf(this . source, float expected, float percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Float_IsNotZero_Assertion : . { public Float_IsNotZero_Assertion(. context) { } @@ -3743,6 +3837,14 @@ namespace .Extensions { public static . IsEqualTo(this . source, int expected, [.("expected")] string? expectedExpression = null) { } } + public static class IntIsCloseToAssertionExtensions + { + public static . IsCloseTo(this . source, int expected, int tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class IntIsWithinPercentOfAssertionExtensions + { + public static . IsWithinPercentOf(this . source, int expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Int_IsEven_Assertion : . { public Int_IsEven_Assertion(. context) { } @@ -3978,6 +4080,14 @@ namespace .Extensions { public static . IsEqualTo(this . source, long expected, [.("expected")] string? expectedExpression = null) { } } + public static class LongIsCloseToAssertionExtensions + { + public static . IsCloseTo(this . source, long expected, long tolerance, [.("expected")] string? expectedExpression = null, [.("tolerance")] string? toleranceExpression = null) { } + } + public static class LongIsWithinPercentOfAssertionExtensions + { + public static . IsWithinPercentOf(this . source, long expected, double percent, [.("expected")] string? expectedExpression = null, [.("percent")] string? percentExpression = null) { } + } public sealed class Long_IsEven_Assertion : . { public Long_IsEven_Assertion(. context) { }