Skip to content

Commit dbe7357

Browse files
committed
Added operators to make using Ranges easier
Also tests to ensure they work as expected.
1 parent 79857f5 commit dbe7357

File tree

4 files changed

+232
-0
lines changed

4 files changed

+232
-0
lines changed

src/OpenRpg.Core/Utils/Range.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,15 @@ public Range(int min, int max)
1616

1717
public static implicit operator Range(RangeF range)
1818
{ return new Range((int)range.Min, (int)range.Max); }
19+
20+
public static Range operator +(Range a, Range b) => new Range(a.Min + b.Min, a.Max + b.Max);
21+
public static Range operator -(Range a, Range b) => new Range(a.Min - b.Min, a.Max - b.Max);
22+
public static Range operator *(Range a, Range b) => new Range(a.Min * b.Min, a.Max * b.Max);
23+
public static Range operator /(Range a, Range b) => new Range(a.Min / b.Min, a.Max / b.Max);
24+
25+
public static Range operator +(Range a, int b) => new Range(a.Min + b, a.Max + b);
26+
public static Range operator -(Range a, int b) => new Range(a.Min - b, a.Max - b);
27+
public static Range operator *(Range a, int b) => new Range(a.Min * b, a.Max * b);
28+
public static Range operator /(Range a, int b) => new Range(a.Min / b, a.Max / b);
1929
}
2030
}

src/OpenRpg.Core/Utils/RangeF.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,15 @@ public RangeF(float min, float max)
1616

1717
public static implicit operator RangeF(Range range)
1818
{ return new RangeF(range.Min, range.Max); }
19+
20+
public static RangeF operator +(RangeF a, RangeF b) => new RangeF(a.Min + b.Min, a.Max + b.Max);
21+
public static RangeF operator -(RangeF a, RangeF b) => new RangeF(a.Min - b.Min, a.Max - b.Max);
22+
public static RangeF operator *(RangeF a, RangeF b) => new RangeF(a.Min * b.Min, a.Max * b.Max);
23+
public static RangeF operator /(RangeF a, RangeF b) => new RangeF(a.Min / b.Min, a.Max / b.Max);
24+
25+
public static RangeF operator +(RangeF a, float b) => new RangeF(a.Min + b, a.Max + b);
26+
public static RangeF operator -(RangeF a, float b) => new RangeF(a.Min - b, a.Max - b);
27+
public static RangeF operator *(RangeF a, float b) => new RangeF(a.Min * b, a.Max * b);
28+
public static RangeF operator /(RangeF a, float b) => new RangeF(a.Min / b, a.Max / b);
1929
}
2030
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
using OpenRpg.Core.Utils;
2+
using Xunit;
3+
4+
namespace OpenRpg.UnitTests.Utility.Ranges;
5+
6+
public class RangeFTests
7+
{
8+
[Fact]
9+
public void should_correctly_convert_from_float_range_to_int_range()
10+
{
11+
var expectedRange = new Range(22, 33);
12+
var range = new RangeF(22.4f, 33.6f);
13+
Range actualRange = range;
14+
15+
Assert.Equal(expectedRange, actualRange);
16+
}
17+
18+
[Fact]
19+
public void should_correctly_add_from_two_ranges()
20+
{
21+
var expectedRange = new RangeF(5.0f, 10.0f);
22+
var rangeA = new RangeF(2.5f, 5.0f);
23+
var rangeB = new RangeF(2.5f, 5.0f);
24+
var actualRange = rangeA + rangeB;
25+
26+
Assert.Equal(expectedRange, actualRange);
27+
}
28+
29+
[Fact]
30+
public void should_correctly_add_from_number()
31+
{
32+
var expectedRange = new RangeF(5.0f, 7.5f);
33+
var rangeA = new RangeF(2.5f, 5.0f);
34+
var number = 2.5f;
35+
var actualRange = rangeA + number;
36+
37+
Assert.Equal(expectedRange, actualRange);
38+
}
39+
40+
[Fact]
41+
public void should_correctly_subtract_from_two_ranges()
42+
{
43+
var expectedRange = new RangeF(0, 2.5f);
44+
var rangeA = new RangeF(2.5f, 5.0f);
45+
var rangeB = new RangeF(2.5f, 2.5f);
46+
var actualRange = rangeA - rangeB;
47+
48+
Assert.Equal(expectedRange, actualRange);
49+
}
50+
51+
[Fact]
52+
public void should_correctly_subtract_from_number()
53+
{
54+
var expectedRange = new RangeF(0, 2.5f);
55+
var rangeA = new RangeF(2.5f, 5.0f);
56+
var number = 2.5f;
57+
var actualRange = rangeA - number;
58+
59+
Assert.Equal(expectedRange, actualRange);
60+
}
61+
62+
[Fact]
63+
public void should_correctly_multiply_from_two_ranges()
64+
{
65+
var expectedRange = new RangeF(5.0f, 50.0f);
66+
var rangeA = new RangeF(0.5f, 5.0f);
67+
var rangeB = new RangeF(10.0f, 10.0f);
68+
var actualRange = rangeA * rangeB;
69+
70+
Assert.Equal(expectedRange, actualRange);
71+
}
72+
73+
[Fact]
74+
public void should_correctly_multiply_from_number()
75+
{
76+
var expectedRange = new RangeF(25.0f, 50.0f);
77+
var rangeA = new RangeF(2.5f, 5.0f);
78+
var number = 10.0f;
79+
var actualRange = rangeA * number;
80+
81+
Assert.Equal(expectedRange, actualRange);
82+
}
83+
84+
85+
[Fact]
86+
public void should_correctly_divide_from_two_ranges()
87+
{
88+
var expectedRange = new RangeF(1.0f, 0.5f);
89+
var rangeA = new RangeF(10.0f, 5.0f);
90+
var rangeB = new RangeF(10.0f, 10.0f);
91+
var actualRange = rangeA / rangeB;
92+
93+
Assert.Equal(expectedRange, actualRange);
94+
}
95+
96+
[Fact]
97+
public void should_correctly_divide_from_number()
98+
{
99+
var expectedRange = new RangeF(0.5f, 1.0f);
100+
var rangeA = new RangeF(5.0f, 10.0f);
101+
var number = 10.0f;
102+
var actualRange = rangeA / number;
103+
104+
Assert.Equal(expectedRange, actualRange);
105+
}
106+
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
using OpenRpg.Core.Utils;
2+
using Xunit;
3+
4+
namespace OpenRpg.UnitTests.Utility.Ranges;
5+
6+
public class RangeTests
7+
{
8+
[Fact]
9+
public void should_correctly_convert_from_int_range_to_float_range()
10+
{
11+
var expectedRange = new RangeF(22, 33);
12+
var range = new Range(22, 33);
13+
RangeF actualRange = range;
14+
15+
Assert.Equal(expectedRange, actualRange);
16+
}
17+
18+
[Fact]
19+
public void should_correctly_add_from_two_ranges()
20+
{
21+
var expectedRange = new Range(50, 100);
22+
var rangeA = new Range(25, 50);
23+
var rangeB = new Range(25, 50);
24+
var actualRange = rangeA + rangeB;
25+
26+
Assert.Equal(expectedRange, actualRange);
27+
}
28+
29+
[Fact]
30+
public void should_correctly_add_from_number()
31+
{
32+
var expectedRange = new Range(50, 75);
33+
var rangeA = new Range(25, 50);
34+
var number = 25;
35+
var actualRange = rangeA + number;
36+
37+
Assert.Equal(expectedRange, actualRange);
38+
}
39+
40+
[Fact]
41+
public void should_correctly_subtract_from_two_ranges()
42+
{
43+
var expectedRange = new Range(0, 25);
44+
var rangeA = new Range(25, 50);
45+
var rangeB = new Range(25, 25);
46+
var actualRange = rangeA - rangeB;
47+
48+
Assert.Equal(expectedRange, actualRange);
49+
}
50+
51+
[Fact]
52+
public void should_correctly_subtract_from_number()
53+
{
54+
var expectedRange = new Range(0, 25);
55+
var rangeA = new Range(25, 50);
56+
var number = 25;
57+
var actualRange = rangeA - number;
58+
59+
Assert.Equal(expectedRange, actualRange);
60+
}
61+
62+
[Fact]
63+
public void should_correctly_multiply_from_two_ranges()
64+
{
65+
var expectedRange = new Range(50, 500);
66+
var rangeA = new Range(5, 50);
67+
var rangeB = new Range(10, 10);
68+
var actualRange = rangeA * rangeB;
69+
70+
Assert.Equal(expectedRange, actualRange);
71+
}
72+
73+
[Fact]
74+
public void should_correctly_multiply_from_number()
75+
{
76+
var expectedRange = new Range(250, 500);
77+
var rangeA = new Range(25, 50);
78+
var number = 10;
79+
var actualRange = rangeA * number;
80+
81+
Assert.Equal(expectedRange, actualRange);
82+
}
83+
84+
85+
[Fact]
86+
public void should_correctly_divide_from_two_ranges()
87+
{
88+
var expectedRange = new Range(10, 5);
89+
var rangeA = new Range(100, 50);
90+
var rangeB = new Range(10, 10);
91+
var actualRange = rangeA / rangeB;
92+
93+
Assert.Equal(expectedRange, actualRange);
94+
}
95+
96+
[Fact]
97+
public void should_correctly_divide_from_number()
98+
{
99+
var expectedRange = new Range(5, 10);
100+
var rangeA = new Range(50, 100);
101+
var number = 10;
102+
var actualRange = rangeA / number;
103+
104+
Assert.Equal(expectedRange, actualRange);
105+
}
106+
}

0 commit comments

Comments
 (0)