📷 A modern, cross-platform, 2D Graphics library for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

164 lines
4.1 KiB

// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
// ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Tests.Helpers;
public class TolerantMathTests
{
private readonly TolerantMath tolerantMath = new(0.1);
[Theory]
[InlineData(0)]
[InlineData(0.01)]
[InlineData(-0.05)]
public void IsZero_WhenTrue(double a)
{
Assert.True(this.tolerantMath.IsZero(a));
}
[Theory]
[InlineData(0.11)]
[InlineData(-0.101)]
[InlineData(42)]
public void IsZero_WhenFalse(double a)
{
Assert.False(this.tolerantMath.IsZero(a));
}
[Theory]
[InlineData(0.11)]
[InlineData(100)]
public void IsPositive_WhenTrue(double a)
{
Assert.True(this.tolerantMath.IsPositive(a));
}
[Theory]
[InlineData(0.09)]
[InlineData(-0.1)]
[InlineData(-1000)]
public void IsPositive_WhenFalse(double a)
{
Assert.False(this.tolerantMath.IsPositive(a));
}
[Theory]
[InlineData(-0.11)]
[InlineData(-100)]
public void IsNegative_WhenTrue(double a)
{
Assert.True(this.tolerantMath.IsNegative(a));
}
[Theory]
[InlineData(-0.09)]
[InlineData(0.1)]
[InlineData(1000)]
public void IsNegative_WhenFalse(double a)
{
Assert.False(this.tolerantMath.IsNegative(a));
}
[Theory]
[InlineData(4.2, 4.2)]
[InlineData(4.2, 4.25)]
[InlineData(-Math.PI, -Math.PI + 0.05)]
[InlineData(999999.2, 999999.25)]
public void AreEqual_WhenTrue(double a, double b)
{
Assert.True(this.tolerantMath.AreEqual(a, b));
}
[Theory]
[InlineData(1, 2)]
[InlineData(-1000000, -1000000.2)]
public void AreEqual_WhenFalse(double a, double b)
{
Assert.False(this.tolerantMath.AreEqual(a, b));
}
[Theory]
[InlineData(2, 1.8)]
[InlineData(-20, -20.2)]
[InlineData(0.1, -0.1)]
[InlineData(100, 10)]
public void IsGreater_IsLess_WhenTrue(double a, double b)
{
Assert.True(this.tolerantMath.IsGreater(a, b));
Assert.True(this.tolerantMath.IsLess(b, a));
}
[Theory]
[InlineData(2, 1.95)]
[InlineData(-20, -20.02)]
[InlineData(0.01, -0.01)]
[InlineData(999999, 999999.09)]
public void IsGreater_IsLess_WhenFalse(double a, double b)
{
Assert.False(this.tolerantMath.IsGreater(a, b));
Assert.False(this.tolerantMath.IsLess(b, a));
}
[Theory]
[InlineData(3, 2)]
[InlineData(3, 2.99)]
[InlineData(2.99, 3)]
[InlineData(-5, -6)]
[InlineData(-5, -5.05)]
[InlineData(-5.05, -5)]
public void IsGreaterOrEqual_IsLessOrEqual_WhenTrue(double a, double b)
{
Assert.True(this.tolerantMath.IsGreaterOrEqual(a, b));
Assert.True(this.tolerantMath.IsLessOrEqual(b, a));
}
[Theory]
[InlineData(2, 3)]
[InlineData(2.89, 3)]
[InlineData(-3, -2.89)]
public void IsGreaterOrEqual_IsLessOrEqual_WhenFalse(double a, double b)
{
Assert.False(this.tolerantMath.IsGreaterOrEqual(a, b));
Assert.False(this.tolerantMath.IsLessOrEqual(b, a));
}
[Theory]
[InlineData(3.5, 4.0)]
[InlineData(3.89, 4.0)]
[InlineData(4.09, 4.0)]
[InlineData(4.11, 5.0)]
[InlineData(0.11, 1)]
[InlineData(0.05, 0)]
[InlineData(-0.5, 0)]
[InlineData(-0.95, -1)]
[InlineData(-1.05, -1)]
[InlineData(-1.5, -1)]
public void Ceiling(double value, double expected)
{
double actual = this.tolerantMath.Ceiling(value);
Assert.Equal(expected, actual);
}
[Theory]
[InlineData(1, 1)]
[InlineData(0.99, 1)]
[InlineData(0.5, 0)]
[InlineData(0.01, 0)]
[InlineData(-0.09, 0)]
[InlineData(-0.11, -1)]
[InlineData(-100.11, -101)]
[InlineData(-100.09, -100)]
public void Floor(double value, double expected)
{
double plz1 = Math.IEEERemainder(1.1, 1);
double plz2 = Math.IEEERemainder(0.9, 1);
double plz3 = Math.IEEERemainder(-1.1, 1);
double plz4 = Math.IEEERemainder(-0.9, 1);
double actual = this.tolerantMath.Floor(value);
Assert.Equal(expected, actual);
}
}