diff --git a/OpenNest.IO/Bom/Fraction.cs b/OpenNest.Core/Math/Fraction.cs similarity index 98% rename from OpenNest.IO/Bom/Fraction.cs rename to OpenNest.Core/Math/Fraction.cs index 704fb0a..a369a15 100644 --- a/OpenNest.IO/Bom/Fraction.cs +++ b/OpenNest.Core/Math/Fraction.cs @@ -3,7 +3,7 @@ using System.Linq; using System.Text; using System.Text.RegularExpressions; -namespace OpenNest.IO.Bom +namespace OpenNest.Math { public static class Fraction { diff --git a/OpenNest.Tests/Math/FractionTests.cs b/OpenNest.Tests/Math/FractionTests.cs new file mode 100644 index 0000000..3253e71 --- /dev/null +++ b/OpenNest.Tests/Math/FractionTests.cs @@ -0,0 +1,46 @@ +using OpenNest.Math; +using Xunit; + +namespace OpenNest.Tests.Math; + +public class FractionTests +{ + [Theory] + [InlineData("3/8", 0.375)] + [InlineData("1 3/4", 1.75)] + [InlineData("1-3/4", 1.75)] + [InlineData("1/2", 0.5)] + public void Parse_ValidFraction_ReturnsDouble(string input, double expected) + { + var result = Fraction.Parse(input); + + Assert.Equal(expected, result, 8); + } + + [Theory] + [InlineData("3/8", true)] + [InlineData("abc", false)] + [InlineData("1 3/4", true)] + public void IsValid_ReturnsExpected(string input, bool expected) + { + Assert.Equal(expected, Fraction.IsValid(input)); + } + + [Fact] + public void TryParse_InvalidInput_ReturnsFalse() + { + var result = Fraction.TryParse("abc", out var value); + + Assert.False(result); + Assert.Equal(0, value); + } + + [Fact] + public void ReplaceFractionsWithDecimals_ReplacesFractionInString() + { + var result = Fraction.ReplaceFractionsWithDecimals("length is 1 3/4 inches"); + + Assert.Contains("1.75", result); + Assert.DoesNotContain("3/4", result); + } +} diff --git a/OpenNest/ArchUnits.cs b/OpenNest/ArchUnits.cs index a618bc3..30304ad 100644 --- a/OpenNest/ArchUnits.cs +++ b/OpenNest/ArchUnits.cs @@ -1,4 +1,4 @@ -using OpenNest.IO.Bom; +using OpenNest.Math; using System; using System.Drawing; using System.Text;