-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
…ndaries.
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
namespace Funcky.Test.Extensions; | ||
|
||
public class NumberExtensionsTest | ||
{ | ||
[Fact] | ||
public void Example() | ||
{ | ||
var position = 12; | ||
|
||
Assert.True(position.IsBetween<Including, Excluding>(20, 0)); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
namespace Funcky.Extensions; | ||
|
||
public class Excluding : IIntervalBoundary | ||
Check warning on line 3 in Funcky/Extensions/Excluding.cs GitHub Actions / Generate NuGet Packages
Check failure on line 3 in Funcky/Extensions/Excluding.cs GitHub Actions / Build and Test (ubuntu-latest, 5.0.0)
Check failure on line 3 in Funcky/Extensions/Excluding.cs GitHub Actions / Trimming Test
Check failure on line 3 in Funcky/Extensions/Excluding.cs GitHub Actions / Build and Test (ubuntu-latest, 6.0.1)
|
||
{ | ||
private Excluding(int number) | ||
{ | ||
Value = number; | ||
} | ||
|
||
public int Value { get; } | ||
Check warning on line 10 in Funcky/Extensions/Excluding.cs GitHub Actions / Generate NuGet Packages
Check failure on line 10 in Funcky/Extensions/Excluding.cs GitHub Actions / Build and Test (ubuntu-latest, 5.0.0)
Check failure on line 10 in Funcky/Extensions/Excluding.cs GitHub Actions / Trimming Test
Check failure on line 10 in Funcky/Extensions/Excluding.cs GitHub Actions / Build and Test (ubuntu-latest, 6.0.1)
|
||
|
||
public static implicit operator Excluding(int number) => new(number); | ||
Check warning on line 12 in Funcky/Extensions/Excluding.cs GitHub Actions / Generate NuGet Packages
Check failure on line 12 in Funcky/Extensions/Excluding.cs GitHub Actions / Build and Test (ubuntu-latest, 5.0.0)
Check failure on line 12 in Funcky/Extensions/Excluding.cs GitHub Actions / Trimming Test
Check failure on line 12 in Funcky/Extensions/Excluding.cs GitHub Actions / Build and Test (ubuntu-latest, 6.0.1)
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
namespace Funcky.Extensions; | ||
|
||
public interface IIntervalBoundary | ||
Check warning on line 3 in Funcky/Extensions/IIntervalBoundary.cs GitHub Actions / Generate NuGet Packages
Check failure on line 3 in Funcky/Extensions/IIntervalBoundary.cs GitHub Actions / Build and Test (ubuntu-latest, 5.0.0)
Check failure on line 3 in Funcky/Extensions/IIntervalBoundary.cs GitHub Actions / Trimming Test
Check failure on line 3 in Funcky/Extensions/IIntervalBoundary.cs GitHub Actions / Build and Test (ubuntu-latest, 6.0.1)
|
||
{ | ||
int Value { get; } | ||
Check warning on line 5 in Funcky/Extensions/IIntervalBoundary.cs GitHub Actions / Generate NuGet Packages
Check failure on line 5 in Funcky/Extensions/IIntervalBoundary.cs GitHub Actions / Build and Test (ubuntu-latest, 5.0.0)
Check failure on line 5 in Funcky/Extensions/IIntervalBoundary.cs GitHub Actions / Trimming Test
Check failure on line 5 in Funcky/Extensions/IIntervalBoundary.cs GitHub Actions / Build and Test (ubuntu-latest, 6.0.1)
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
namespace Funcky.Extensions; | ||
|
||
public class Including : IIntervalBoundary | ||
Check warning on line 3 in Funcky/Extensions/Including.cs GitHub Actions / Generate NuGet Packages
Check failure on line 3 in Funcky/Extensions/Including.cs GitHub Actions / Build and Test (ubuntu-latest, 5.0.0)
Check failure on line 3 in Funcky/Extensions/Including.cs GitHub Actions / Trimming Test
Check failure on line 3 in Funcky/Extensions/Including.cs GitHub Actions / Build and Test (ubuntu-latest, 6.0.1)
|
||
{ | ||
private Including(int number) | ||
{ | ||
Value = number; | ||
} | ||
|
||
public int Value { get; } | ||
Check warning on line 10 in Funcky/Extensions/Including.cs GitHub Actions / Generate NuGet Packages
Check failure on line 10 in Funcky/Extensions/Including.cs GitHub Actions / Build and Test (ubuntu-latest, 5.0.0)
Check failure on line 10 in Funcky/Extensions/Including.cs GitHub Actions / Trimming Test
Check failure on line 10 in Funcky/Extensions/Including.cs GitHub Actions / Build and Test (ubuntu-latest, 6.0.1)
|
||
|
||
public static implicit operator Including(int number) => new(number); | ||
Check warning on line 12 in Funcky/Extensions/Including.cs GitHub Actions / Generate NuGet Packages
Check failure on line 12 in Funcky/Extensions/Including.cs GitHub Actions / Build and Test (ubuntu-latest, 5.0.0)
Check failure on line 12 in Funcky/Extensions/Including.cs GitHub Actions / Trimming Test
Check failure on line 12 in Funcky/Extensions/Including.cs GitHub Actions / Build and Test (ubuntu-latest, 6.0.1)
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
namespace Funcky.Extensions; | ||
|
||
public static class NumberExtensions | ||
Check warning on line 3 in Funcky/Extensions/NumberExtensions.cs GitHub Actions / Generate NuGet Packages
Check failure on line 3 in Funcky/Extensions/NumberExtensions.cs GitHub Actions / Build and Test (ubuntu-latest, 5.0.0)
Check failure on line 3 in Funcky/Extensions/NumberExtensions.cs GitHub Actions / Trimming Test
Check failure on line 3 in Funcky/Extensions/NumberExtensions.cs GitHub Actions / Build and Test (ubuntu-latest, 6.0.1)
|
||
{ | ||
public static bool IsBetween<TFrom, TTo>(this int number, TFrom from, TTo to) | ||
Check warning on line 5 in Funcky/Extensions/NumberExtensions.cs GitHub Actions / Generate NuGet Packages
Check failure on line 5 in Funcky/Extensions/NumberExtensions.cs GitHub Actions / Build and Test (ubuntu-latest, 5.0.0)
Check failure on line 5 in Funcky/Extensions/NumberExtensions.cs GitHub Actions / Trimming Test
Check failure on line 5 in Funcky/Extensions/NumberExtensions.cs GitHub Actions / Build and Test (ubuntu-latest, 6.0.1)
|
||
where TFrom : IIntervalBoundary | ||
where TTo : IIntervalBoundary | ||
=> from.Value < to.Value | ||
? IsBetweenForward(number, from, to) | ||
: IsBetweenBackward(number, from, to); | ||
|
||
private static bool IsBetweenForward<TFrom, TTo>(int number, TFrom from, TTo to) | ||
where TFrom : IIntervalBoundary | ||
where TTo : IIntervalBoundary | ||
=> (from, to) switch | ||
{ | ||
(Including, Including) => from.Value <= number && number <= to.Value, | ||
(Including, Excluding) => from.Value <= number && number < to.Value, | ||
(Excluding, Including) => from.Value < number && number <= to.Value, | ||
(Excluding, Excluding) => from.Value < number && number < to.Value, | ||
_ => false, | ||
}; | ||
|
||
private static bool IsBetweenBackward<TFrom, TTo>(int number, TFrom from, TTo to) | ||
where TFrom : IIntervalBoundary | ||
where TTo : IIntervalBoundary | ||
=> (from, to) switch | ||
{ | ||
(Including, Including) => from.Value >= number && number >= to.Value, | ||
(Including, Excluding) => from.Value >= number && number > to.Value, | ||
(Excluding, Including) => from.Value > number && number >= to.Value, | ||
(Excluding, Excluding) => from.Value > number && number > to.Value, | ||
_ => false, | ||
}; | ||
} |