From c09d20e3e95c7a8089f7759150478ec5e3169d53 Mon Sep 17 00:00:00 2001 From: Tigran <83982924+tsardaryanCamenAI@users.noreply.github.com> Date: Wed, 17 May 2023 19:47:27 +0000 Subject: [PATCH] fix for Retional.FromDouble(0) --- src/ImageSharp/Primitives/LongRational.cs | 9 ++++----- src/ImageSharp/Primitives/Rational.cs | 5 ----- tests/ImageSharp.Tests/Numerics/RationalTests.cs | 12 ++++++++++++ 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/ImageSharp/Primitives/LongRational.cs b/src/ImageSharp/Primitives/LongRational.cs index 349a3028e9..deef2d09be 100644 --- a/src/ImageSharp/Primitives/LongRational.cs +++ b/src/ImageSharp/Primitives/LongRational.cs @@ -153,6 +153,10 @@ internal readonly struct LongRational : IEquatable double df = numerator / (double)denominator; double epsilon = bestPrecision ? double.Epsilon : .000001; + if(val < epsilon) { + return new LongRational(0, 1); + } + while (Math.Abs(df - val) > epsilon) { if (df < val) @@ -201,11 +205,6 @@ internal readonly struct LongRational : IEquatable return this; } - if (this.Numerator == 0) - { - return new LongRational(0, 1); - } - if (this.Numerator == this.Denominator) { return new LongRational(1, 1); diff --git a/src/ImageSharp/Primitives/Rational.cs b/src/ImageSharp/Primitives/Rational.cs index 7970f993e8..59f34331a7 100644 --- a/src/ImageSharp/Primitives/Rational.cs +++ b/src/ImageSharp/Primitives/Rational.cs @@ -74,11 +74,6 @@ public readonly struct Rational : IEquatable this.Numerator = (uint)rational.Numerator; this.Denominator = (uint)rational.Denominator; - - if(this.Numerator == 0 && this.Denominator == 0) - { - this.Denominator = 1; - } } /// diff --git a/tests/ImageSharp.Tests/Numerics/RationalTests.cs b/tests/ImageSharp.Tests/Numerics/RationalTests.cs index d165bd9d39..a696cce9e5 100644 --- a/tests/ImageSharp.Tests/Numerics/RationalTests.cs +++ b/tests/ImageSharp.Tests/Numerics/RationalTests.cs @@ -41,6 +41,18 @@ public class RationalTests Assert.True(first != second); } + /// + /// Tests the correct FromDouble(0). + /// + [Fact] + public void FromDouble0Non0Denominator() + { + var r = Rational.FromDouble(0); + + Assert.Equal(0, r.Numerator); + Assert.Equal(1, r.Denominator); + } + /// /// Tests whether the Rational constructor correctly assign properties. ///