diff --git a/src/core-taggeds-optional/Optional/Optional.T/Internal.Comparison/Optional.T.InternalComparison.cs b/src/core-taggeds-optional/Optional/Optional.T/Internal.Comparison/Optional.T.InternalComparison.cs index 56f391ee..4c730f2b 100644 --- a/src/core-taggeds-optional/Optional/Optional.T/Internal.Comparison/Optional.T.InternalComparison.cs +++ b/src/core-taggeds-optional/Optional/Optional.T/Internal.Comparison/Optional.T.InternalComparison.cs @@ -20,4 +20,15 @@ internal int InternalCompareTo(Optional other, IComparer comparer) return ComparisonResult.EqualTo; } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal int InternalCompareTo(T other, Comparer comparer) + { + if (hasValue) + { + return ComparisonResult.Normalize(comparer.Compare(value, other)); + } + + return ComparisonResult.LessThan; + } } diff --git a/src/core-taggeds-optional/Optional/Optional/Optional.Comparison.cs b/src/core-taggeds-optional/Optional/Optional/Optional.Comparison.cs index 1ce23a18..08803953 100644 --- a/src/core-taggeds-optional/Optional/Optional/Optional.Comparison.cs +++ b/src/core-taggeds-optional/Optional/Optional/Optional.Comparison.cs @@ -4,9 +4,20 @@ namespace System; partial class Optional { - // TODO: Add the tests and open the method + // TODO: Add the tests and open the methods + internal static int Compare(Optional left, Optional right) where T : IComparable => left.InternalCompareTo(right, Comparer.Default); + + internal static int Compare(Optional left, T right) + where T : IComparable + => + left.InternalCompareTo(right, Comparer.Default); + + internal static int Compare(T left, Optional right) + where T : IComparable + => + right.InternalCompareTo(left, Comparer.Default); } diff --git a/src/core-taggeds-optional/Optional/OptionalExtensions/Comparison.cs b/src/core-taggeds-optional/Optional/OptionalExtensions/Comparison.cs index ee6d9fa1..75f890bc 100644 --- a/src/core-taggeds-optional/Optional/OptionalExtensions/Comparison.cs +++ b/src/core-taggeds-optional/Optional/OptionalExtensions/Comparison.cs @@ -4,9 +4,15 @@ namespace System; partial class OptionalExtensions { - // TODO: Add the tests and open the method + // TODO: Add the tests and open the methods + internal static int CompareTo(this Optional optional, Optional other) where T : IComparable => optional.InternalCompareTo(other, Comparer.Default); + + internal static int CompareTo(this Optional optional, T other) + where T : IComparable + => + optional.InternalCompareTo(other, Comparer.Default); }