diff --git a/src/OpenRpg.Core/Utils/Range.cs b/src/OpenRpg.Core/Utils/Range.cs index b1b0d80..5b98002 100644 --- a/src/OpenRpg.Core/Utils/Range.cs +++ b/src/OpenRpg.Core/Utils/Range.cs @@ -16,5 +16,15 @@ public Range(int min, int max) public static implicit operator Range(RangeF range) { return new Range((int)range.Min, (int)range.Max); } + + public static Range operator +(Range a, Range b) => new Range(a.Min + b.Min, a.Max + b.Max); + public static Range operator -(Range a, Range b) => new Range(a.Min - b.Min, a.Max - b.Max); + public static Range operator *(Range a, Range b) => new Range(a.Min * b.Min, a.Max * b.Max); + public static Range operator /(Range a, Range b) => new Range(a.Min / b.Min, a.Max / b.Max); + + public static Range operator +(Range a, int b) => new Range(a.Min + b, a.Max + b); + public static Range operator -(Range a, int b) => new Range(a.Min - b, a.Max - b); + public static Range operator *(Range a, int b) => new Range(a.Min * b, a.Max * b); + public static Range operator /(Range a, int b) => new Range(a.Min / b, a.Max / b); } } \ No newline at end of file diff --git a/src/OpenRpg.Core/Utils/RangeF.cs b/src/OpenRpg.Core/Utils/RangeF.cs index 5b814da..efb80ea 100644 --- a/src/OpenRpg.Core/Utils/RangeF.cs +++ b/src/OpenRpg.Core/Utils/RangeF.cs @@ -16,5 +16,15 @@ public RangeF(float min, float max) public static implicit operator RangeF(Range range) { return new RangeF(range.Min, range.Max); } + + public static RangeF operator +(RangeF a, RangeF b) => new RangeF(a.Min + b.Min, a.Max + b.Max); + public static RangeF operator -(RangeF a, RangeF b) => new RangeF(a.Min - b.Min, a.Max - b.Max); + public static RangeF operator *(RangeF a, RangeF b) => new RangeF(a.Min * b.Min, a.Max * b.Max); + public static RangeF operator /(RangeF a, RangeF b) => new RangeF(a.Min / b.Min, a.Max / b.Max); + + public static RangeF operator +(RangeF a, float b) => new RangeF(a.Min + b, a.Max + b); + public static RangeF operator -(RangeF a, float b) => new RangeF(a.Min - b, a.Max - b); + public static RangeF operator *(RangeF a, float b) => new RangeF(a.Min * b, a.Max * b); + public static RangeF operator /(RangeF a, float b) => new RangeF(a.Min / b, a.Max / b); } } \ No newline at end of file diff --git a/src/OpenRpg.UnitTests/Utility/Ranges/RangeFTests.cs b/src/OpenRpg.UnitTests/Utility/Ranges/RangeFTests.cs new file mode 100644 index 0000000..642973e --- /dev/null +++ b/src/OpenRpg.UnitTests/Utility/Ranges/RangeFTests.cs @@ -0,0 +1,106 @@ +using OpenRpg.Core.Utils; +using Xunit; + +namespace OpenRpg.UnitTests.Utility.Ranges; + +public class RangeFTests +{ + [Fact] + public void should_correctly_convert_from_float_range_to_int_range() + { + var expectedRange = new Range(22, 33); + var range = new RangeF(22.4f, 33.6f); + Range actualRange = range; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_add_from_two_ranges() + { + var expectedRange = new RangeF(5.0f, 10.0f); + var rangeA = new RangeF(2.5f, 5.0f); + var rangeB = new RangeF(2.5f, 5.0f); + var actualRange = rangeA + rangeB; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_add_from_number() + { + var expectedRange = new RangeF(5.0f, 7.5f); + var rangeA = new RangeF(2.5f, 5.0f); + var number = 2.5f; + var actualRange = rangeA + number; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_subtract_from_two_ranges() + { + var expectedRange = new RangeF(0, 2.5f); + var rangeA = new RangeF(2.5f, 5.0f); + var rangeB = new RangeF(2.5f, 2.5f); + var actualRange = rangeA - rangeB; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_subtract_from_number() + { + var expectedRange = new RangeF(0, 2.5f); + var rangeA = new RangeF(2.5f, 5.0f); + var number = 2.5f; + var actualRange = rangeA - number; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_multiply_from_two_ranges() + { + var expectedRange = new RangeF(5.0f, 50.0f); + var rangeA = new RangeF(0.5f, 5.0f); + var rangeB = new RangeF(10.0f, 10.0f); + var actualRange = rangeA * rangeB; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_multiply_from_number() + { + var expectedRange = new RangeF(25.0f, 50.0f); + var rangeA = new RangeF(2.5f, 5.0f); + var number = 10.0f; + var actualRange = rangeA * number; + + Assert.Equal(expectedRange, actualRange); + } + + + [Fact] + public void should_correctly_divide_from_two_ranges() + { + var expectedRange = new RangeF(1.0f, 0.5f); + var rangeA = new RangeF(10.0f, 5.0f); + var rangeB = new RangeF(10.0f, 10.0f); + var actualRange = rangeA / rangeB; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_divide_from_number() + { + var expectedRange = new RangeF(0.5f, 1.0f); + var rangeA = new RangeF(5.0f, 10.0f); + var number = 10.0f; + var actualRange = rangeA / number; + + Assert.Equal(expectedRange, actualRange); + } +} \ No newline at end of file diff --git a/src/OpenRpg.UnitTests/Utility/Ranges/RangeTests.cs b/src/OpenRpg.UnitTests/Utility/Ranges/RangeTests.cs new file mode 100644 index 0000000..24cc370 --- /dev/null +++ b/src/OpenRpg.UnitTests/Utility/Ranges/RangeTests.cs @@ -0,0 +1,106 @@ +using OpenRpg.Core.Utils; +using Xunit; + +namespace OpenRpg.UnitTests.Utility.Ranges; + +public class RangeTests +{ + [Fact] + public void should_correctly_convert_from_int_range_to_float_range() + { + var expectedRange = new RangeF(22, 33); + var range = new Range(22, 33); + RangeF actualRange = range; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_add_from_two_ranges() + { + var expectedRange = new Range(50, 100); + var rangeA = new Range(25, 50); + var rangeB = new Range(25, 50); + var actualRange = rangeA + rangeB; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_add_from_number() + { + var expectedRange = new Range(50, 75); + var rangeA = new Range(25, 50); + var number = 25; + var actualRange = rangeA + number; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_subtract_from_two_ranges() + { + var expectedRange = new Range(0, 25); + var rangeA = new Range(25, 50); + var rangeB = new Range(25, 25); + var actualRange = rangeA - rangeB; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_subtract_from_number() + { + var expectedRange = new Range(0, 25); + var rangeA = new Range(25, 50); + var number = 25; + var actualRange = rangeA - number; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_multiply_from_two_ranges() + { + var expectedRange = new Range(50, 500); + var rangeA = new Range(5, 50); + var rangeB = new Range(10, 10); + var actualRange = rangeA * rangeB; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_multiply_from_number() + { + var expectedRange = new Range(250, 500); + var rangeA = new Range(25, 50); + var number = 10; + var actualRange = rangeA * number; + + Assert.Equal(expectedRange, actualRange); + } + + + [Fact] + public void should_correctly_divide_from_two_ranges() + { + var expectedRange = new Range(10, 5); + var rangeA = new Range(100, 50); + var rangeB = new Range(10, 10); + var actualRange = rangeA / rangeB; + + Assert.Equal(expectedRange, actualRange); + } + + [Fact] + public void should_correctly_divide_from_number() + { + var expectedRange = new Range(5, 10); + var rangeA = new Range(50, 100); + var number = 10; + var actualRange = rangeA / number; + + Assert.Equal(expectedRange, actualRange); + } +} \ No newline at end of file