From bc51a3390dfc19b9dbb843beb78481b845fc61cf Mon Sep 17 00:00:00 2001 From: Thomas Bruderer Date: Mon, 29 Jan 2024 10:54:42 +0100 Subject: [PATCH 1/3] Add missing ParseExtensions.ParseCharOrNone * including tests * some cleanup --- .../ParseExtensionsTest.Char.cs | 23 +++++++++++++++++++ .../ParseExtensions/ParseExtension.Char.cs | 6 +++++ .../ParseExtensions.BigInteger.cs | 4 +--- .../ParseExtensions.Boolean.cs | 6 +++++ .../ParseExtensions.DateOnly.cs | 4 +--- .../ParseExtensions.DateTime.cs | 4 +--- .../ParseExtensions.DateTimeOffset.cs | 4 +--- ...eExtensions.cs => ParseExtensions.Enum.cs} | 3 --- .../ParseExtensions/ParseExtensions.Guid.cs | 4 +--- .../ParseExtensions.IpPrimitives.cs | 4 +--- .../ParseExtensions.Numbers.cs | 4 +--- .../ParseExtensions.TimeSpan.cs | 4 +--- .../ParseExtensions.Version.cs | 4 +--- Funcky/PublicAPI.Unshipped.txt | 1 + 14 files changed, 45 insertions(+), 30 deletions(-) create mode 100644 Funcky.Test/Extensions/ParseExtensions/ParseExtensionsTest.Char.cs create mode 100644 Funcky/Extensions/ParseExtensions/ParseExtension.Char.cs create mode 100644 Funcky/Extensions/ParseExtensions/ParseExtensions.Boolean.cs rename Funcky/Extensions/ParseExtensions/{ParseExtensions.cs => ParseExtensions.Enum.cs} (96%) diff --git a/Funcky.Test/Extensions/ParseExtensions/ParseExtensionsTest.Char.cs b/Funcky.Test/Extensions/ParseExtensions/ParseExtensionsTest.Char.cs new file mode 100644 index 00000000..a4104e6e --- /dev/null +++ b/Funcky.Test/Extensions/ParseExtensions/ParseExtensionsTest.Char.cs @@ -0,0 +1,23 @@ +namespace Funcky.Test.Extensions.ParseExtensions; + +public sealed partial class ParseExtensionsTest +{ + [Theory] + [InlineData('a', "a")] + [InlineData('x', "x")] + [InlineData('1', "1")] + [InlineData('δ', "δ")] + public void ParseCharOrNoneReturnsTheOnlyCharacterInAString(char expected, string input) + { + FunctionalAssert.Some(expected, input.ParseCharOrNone()); + } + + [Theory] + [InlineData("longer")] + [InlineData("")] + [InlineData("\ud83d\udd25")] // single fire emoji (outside BMP) + public void ParseCharOrNoneReturnsNoneIfItCanParseItToACharcter(string input) + { + FunctionalAssert.None(input.ParseCharOrNone()); + } +} diff --git a/Funcky/Extensions/ParseExtensions/ParseExtension.Char.cs b/Funcky/Extensions/ParseExtensions/ParseExtension.Char.cs new file mode 100644 index 00000000..b142b3b5 --- /dev/null +++ b/Funcky/Extensions/ParseExtensions/ParseExtension.Char.cs @@ -0,0 +1,6 @@ +using Funcky.Internal; + +namespace Funcky.Extensions; + +[OrNoneFromTryPattern(typeof(char), nameof(char.TryParse))] +public static partial class ParseExtensions; diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.BigInteger.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.BigInteger.cs index ae097341..f33be54f 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.BigInteger.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.BigInteger.cs @@ -4,6 +4,4 @@ namespace Funcky.Extensions; [OrNoneFromTryPattern(typeof(BigInteger), nameof(BigInteger.TryParse))] -public static partial class ParseExtensions -{ -} +public static partial class ParseExtensions; diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.Boolean.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.Boolean.cs new file mode 100644 index 00000000..30675cca --- /dev/null +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.Boolean.cs @@ -0,0 +1,6 @@ +using Funcky.Internal; + +namespace Funcky.Extensions; + +[OrNoneFromTryPattern(typeof(bool), nameof(bool.TryParse))] +public static partial class ParseExtensions; diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.DateOnly.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.DateOnly.cs index 449ab5bc..a3b36d97 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.DateOnly.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.DateOnly.cs @@ -5,7 +5,5 @@ namespace Funcky.Extensions; [OrNoneFromTryPattern(typeof(DateOnly), nameof(DateOnly.TryParse))] [OrNoneFromTryPattern(typeof(DateOnly), nameof(DateOnly.TryParseExact))] -public static partial class ParseExtensions -{ -} +public static partial class ParseExtensions; #endif diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.DateTime.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.DateTime.cs index 9e00c645..08b3b9d5 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.DateTime.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.DateTime.cs @@ -4,6 +4,4 @@ namespace Funcky.Extensions; [OrNoneFromTryPattern(typeof(DateTime), nameof(DateTime.TryParse))] [OrNoneFromTryPattern(typeof(DateTime), nameof(DateTime.TryParseExact))] -public static partial class ParseExtensions -{ -} +public static partial class ParseExtensions; diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.DateTimeOffset.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.DateTimeOffset.cs index 161e140f..4e4e268d 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.DateTimeOffset.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.DateTimeOffset.cs @@ -4,6 +4,4 @@ namespace Funcky.Extensions; [OrNoneFromTryPattern(typeof(DateTimeOffset), nameof(DateTimeOffset.TryParse))] [OrNoneFromTryPattern(typeof(DateTimeOffset), nameof(DateTimeOffset.TryParseExact))] -public static partial class ParseExtensions -{ -} +public static partial class ParseExtensions; diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.Enum.cs similarity index 96% rename from Funcky/Extensions/ParseExtensions/ParseExtensions.cs rename to Funcky/Extensions/ParseExtensions/ParseExtensions.Enum.cs index 544da48b..31e3a3fc 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.Enum.cs @@ -1,8 +1,5 @@ -using Funcky.Internal; - namespace Funcky.Extensions; -[OrNoneFromTryPattern(typeof(bool), nameof(bool.TryParse))] public static partial class ParseExtensions { [Pure] diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.Guid.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.Guid.cs index c841ba0a..9df34458 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.Guid.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.Guid.cs @@ -4,6 +4,4 @@ namespace Funcky.Extensions; [OrNoneFromTryPattern(typeof(Guid), nameof(Guid.TryParse))] [OrNoneFromTryPattern(typeof(Guid), nameof(Guid.TryParseExact))] -public partial class ParseExtensions -{ -} +public static partial class ParseExtensions; diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.IpPrimitives.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.IpPrimitives.cs index 8c3aac8c..40c888d5 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.IpPrimitives.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.IpPrimitives.cs @@ -7,6 +7,4 @@ namespace Funcky.Extensions; #if IP_END_POINT_TRY_PARSE_SUPPORTED [OrNoneFromTryPattern(typeof(IPEndPoint), nameof(IPEndPoint.TryParse))] #endif -public static partial class ParseExtensions -{ -} +public static partial class ParseExtensions; diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.Numbers.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.Numbers.cs index 66632a5d..8aab2599 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.Numbers.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.Numbers.cs @@ -13,6 +13,4 @@ namespace Funcky.Extensions; [OrNoneFromTryPattern(typeof(float), nameof(float.TryParse))] [OrNoneFromTryPattern(typeof(double), nameof(double.TryParse))] [OrNoneFromTryPattern(typeof(decimal), nameof(decimal.TryParse))] -public static partial class ParseExtensions -{ -} +public static partial class ParseExtensions; diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.TimeSpan.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.TimeSpan.cs index 7e38cfd5..7559d222 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.TimeSpan.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.TimeSpan.cs @@ -4,6 +4,4 @@ namespace Funcky.Extensions; [OrNoneFromTryPattern(typeof(TimeSpan), nameof(TimeSpan.TryParse))] [OrNoneFromTryPattern(typeof(TimeSpan), nameof(TimeSpan.TryParseExact))] -public static partial class ParseExtensions -{ -} +public static partial class ParseExtensions; diff --git a/Funcky/Extensions/ParseExtensions/ParseExtensions.Version.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.Version.cs index fdffd009..033bc3ad 100644 --- a/Funcky/Extensions/ParseExtensions/ParseExtensions.Version.cs +++ b/Funcky/Extensions/ParseExtensions/ParseExtensions.Version.cs @@ -3,6 +3,4 @@ namespace Funcky.Extensions; [OrNoneFromTryPattern(typeof(Version), nameof(Version.TryParse))] -public static partial class ParseExtensions -{ -} +public static partial class ParseExtensions; diff --git a/Funcky/PublicAPI.Unshipped.txt b/Funcky/PublicAPI.Unshipped.txt index c3d89b86..8e1c4602 100644 --- a/Funcky/PublicAPI.Unshipped.txt +++ b/Funcky/PublicAPI.Unshipped.txt @@ -15,6 +15,7 @@ static Funcky.Extensions.EnumeratorExtensions.MoveNextOrNone(this System.Coll static Funcky.Extensions.ParseExtensions.ParseByteOrNone(this System.ReadOnlySpan candidate, System.Globalization.NumberStyles style, System.IFormatProvider? provider) -> Funcky.Monads.Option static Funcky.Extensions.ParseExtensions.ParseByteOrNone(this System.ReadOnlySpan candidate, System.IFormatProvider? provider) -> Funcky.Monads.Option static Funcky.Extensions.ParseExtensions.ParseByteOrNone(this System.ReadOnlySpan candidate) -> Funcky.Monads.Option +static Funcky.Extensions.ParseExtensions.ParseCharOrNone(this string? candidate) -> Funcky.Monads.Option static Funcky.Extensions.ParseExtensions.ParseDecimalOrNone(this System.ReadOnlySpan candidate, System.Globalization.NumberStyles style, System.IFormatProvider? provider) -> Funcky.Monads.Option static Funcky.Extensions.ParseExtensions.ParseDecimalOrNone(this System.ReadOnlySpan candidate, System.IFormatProvider? provider) -> Funcky.Monads.Option static Funcky.Extensions.ParseExtensions.ParseDecimalOrNone(this System.ReadOnlySpan candidate) -> Funcky.Monads.Option From 3d597801a771cd6d238a7a6e3bd775668641d100 Mon Sep 17 00:00:00 2001 From: Thomas Bruderer Date: Mon, 29 Jan 2024 10:56:39 +0100 Subject: [PATCH 2/3] Add a null case --- .../Extensions/ParseExtensions/ParseExtensionsTest.Char.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Funcky.Test/Extensions/ParseExtensions/ParseExtensionsTest.Char.cs b/Funcky.Test/Extensions/ParseExtensions/ParseExtensionsTest.Char.cs index a4104e6e..12ba7a48 100644 --- a/Funcky.Test/Extensions/ParseExtensions/ParseExtensionsTest.Char.cs +++ b/Funcky.Test/Extensions/ParseExtensions/ParseExtensionsTest.Char.cs @@ -13,10 +13,11 @@ public void ParseCharOrNoneReturnsTheOnlyCharacterInAString(char expected, strin } [Theory] + [InlineData(null)] [InlineData("longer")] [InlineData("")] [InlineData("\ud83d\udd25")] // single fire emoji (outside BMP) - public void ParseCharOrNoneReturnsNoneIfItCanParseItToACharcter(string input) + public void ParseCharOrNoneReturnsNoneIfItCanParseItToACharcter(string? input) { FunctionalAssert.None(input.ParseCharOrNone()); } From 61f4be935616e1b064afbe74374567f9046a8546 Mon Sep 17 00:00:00 2001 From: Thomas Bruderer Date: Mon, 29 Jan 2024 11:00:05 +0100 Subject: [PATCH 3/3] Rename --- .../{ParseExtension.Char.cs => ParseExtensions.Char.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Funcky/Extensions/ParseExtensions/{ParseExtension.Char.cs => ParseExtensions.Char.cs} (100%) diff --git a/Funcky/Extensions/ParseExtensions/ParseExtension.Char.cs b/Funcky/Extensions/ParseExtensions/ParseExtensions.Char.cs similarity index 100% rename from Funcky/Extensions/ParseExtensions/ParseExtension.Char.cs rename to Funcky/Extensions/ParseExtensions/ParseExtensions.Char.cs