From 67de246bb806d9ed5aba8bfad05625925b14586a Mon Sep 17 00:00:00 2001 From: Kenny Pflug Date: Sat, 1 Mar 2025 01:16:51 +0100 Subject: [PATCH 1/3] feat: add IsEmptyOrWhiteSpace for Span Signed-off-by: Kenny Pflug --- .../IsEmptyOrWhiteSpaceTests.cs | 36 +++++++++++++++++++ .../Check.IsEmptyOrWhiteSpace.cs | 30 ++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs create mode 100644 Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs diff --git a/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs b/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs new file mode 100644 index 0000000..04d8a0d --- /dev/null +++ b/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs @@ -0,0 +1,36 @@ +using System; +using FluentAssertions; +using Xunit; + +namespace Light.GuardClauses.Tests.StringAssertions; + +public static class CheckIsEmptyOrWhiteSpaceTests +{ + [Fact] + public static void EmptySpan() + { + var span = new Span([]); + span.IsEmptyOrWhiteSpace().Should().BeTrue(); + } + + [Fact] + public static void WhiteSpaceSpan() + { + var span = new Span([' ', '\t', '\n']); + span.IsEmptyOrWhiteSpace().Should().BeTrue(); + } + + [Fact] + public static void NonWhiteSpaceSpan() + { + var span = new Span(['a', 'b', 'c']); + span.IsEmptyOrWhiteSpace().Should().BeFalse(); + } + + [Fact] + public static void MixedSpan() + { + var span = new Span([' ', 'a', '\t']); + span.IsEmptyOrWhiteSpace().Should().BeFalse(); + } +} diff --git a/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs b/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs new file mode 100644 index 0000000..56efe90 --- /dev/null +++ b/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs @@ -0,0 +1,30 @@ +using System; +using System.Runtime.CompilerServices; + +namespace Light.GuardClauses; + +public static partial class Check +{ + /// + /// Checks if the specified span is empty or contains only white space characters. + /// + /// The span to be checked. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsEmptyOrWhiteSpace(this Span span) + { + if (span.IsEmpty) + { + return true; + } + + foreach (var character in span) + { + if (!character.IsWhiteSpace()) + { + return false; + } + } + + return true; + } +} From 32a7aa9eebf1ceb0bdbcdcbe224669e674e95048 Mon Sep 17 00:00:00 2001 From: Kenny Pflug Date: Sat, 1 Mar 2025 01:38:13 +0100 Subject: [PATCH 2/3] feat: add IsEmptyOrWhiteSpace for ReadOnlySpan Signed-off-by: Kenny Pflug --- .../IsEmptyOrWhiteSpaceTests.cs | 36 ++++++++++++++++--- .../Check.IsEmptyOrWhiteSpace.cs | 9 ++++- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs b/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs index 04d8a0d..522103d 100644 --- a/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs +++ b/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs @@ -4,7 +4,7 @@ namespace Light.GuardClauses.Tests.StringAssertions; -public static class CheckIsEmptyOrWhiteSpaceTests +public static class IsEmptyOrWhiteSpaceTests { [Fact] public static void EmptySpan() @@ -16,21 +16,49 @@ public static void EmptySpan() [Fact] public static void WhiteSpaceSpan() { - var span = new Span([' ', '\t', '\n']); + var span = new Span(" \t\n".ToCharArray()); span.IsEmptyOrWhiteSpace().Should().BeTrue(); } [Fact] public static void NonWhiteSpaceSpan() { - var span = new Span(['a', 'b', 'c']); + var span = new Span("abc".ToCharArray()); span.IsEmptyOrWhiteSpace().Should().BeFalse(); } [Fact] public static void MixedSpan() { - var span = new Span([' ', 'a', '\t']); + var span = new Span(" a\t".ToCharArray()); span.IsEmptyOrWhiteSpace().Should().BeFalse(); } + + [Fact] + public static void EmptyReadOnlySpan() + { + var readOnlySpan = string.Empty.AsSpan(); + readOnlySpan.IsEmptyOrWhiteSpace().Should().BeTrue(); + } + + [Fact] + public static void WhiteSpaceReadOnlySpan() + { + var readOnlySpan = " \t\n".AsSpan(); + readOnlySpan.IsEmptyOrWhiteSpace().Should().BeTrue(); + } + + [Fact] + public static void NonWhiteSpaceReadOnlySpan() + { + var readOnlySpan = "abc".AsSpan(); + readOnlySpan.IsEmptyOrWhiteSpace().Should().BeFalse(); + } + + [Fact] + public static void MixedReadOnlySpan() + { + var readOnlySpan = " a\t".AsSpan(); + readOnlySpan.IsEmptyOrWhiteSpace().Should().BeFalse(); + } } diff --git a/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs b/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs index 56efe90..24740d0 100644 --- a/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs +++ b/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs @@ -10,7 +10,14 @@ public static partial class Check /// /// The span to be checked. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool IsEmptyOrWhiteSpace(this Span span) + public static bool IsEmptyOrWhiteSpace(this Span span) => ((ReadOnlySpan) span).IsEmptyOrWhiteSpace(); + + /// + /// Checks if the specified span is empty or contains only white space characters. + /// + /// The span to be checked. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsEmptyOrWhiteSpace(this ReadOnlySpan span) { if (span.IsEmpty) { From e8db798896997ddb0be330e902a4c2751e89759c Mon Sep 17 00:00:00 2001 From: Kenny Pflug Date: Sat, 1 Mar 2025 01:54:01 +0100 Subject: [PATCH 3/3] feat: add IsEmptyOrWhiteSpace for Memory and ReadOnlyMemory Signed-off-by: Kenny Pflug --- .../IsEmptyOrWhiteSpaceTests.cs | 56 +++++++++++++++++++ .../Check.IsEmptyOrWhiteSpace.cs | 14 +++++ 2 files changed, 70 insertions(+) diff --git a/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs b/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs index 522103d..2048883 100644 --- a/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs +++ b/Code/Light.GuardClauses.Tests/StringAssertions/IsEmptyOrWhiteSpaceTests.cs @@ -61,4 +61,60 @@ public static void MixedReadOnlySpan() var readOnlySpan = " a\t".AsSpan(); readOnlySpan.IsEmptyOrWhiteSpace().Should().BeFalse(); } + + [Fact] + public static void EmptyMemory() + { + var memory = new Memory([]); + memory.IsEmptyOrWhiteSpace().Should().BeTrue(); + } + + [Fact] + public static void WhiteSpaceMemory() + { + var memory = new Memory(" \t\n".ToCharArray()); + memory.IsEmptyOrWhiteSpace().Should().BeTrue(); + } + + [Fact] + public static void NonWhiteSpaceMemory() + { + var memory = new Memory("abc".ToCharArray()); + memory.IsEmptyOrWhiteSpace().Should().BeFalse(); + } + + [Fact] + public static void MixedMemory() + { + var memory = new Memory(" a\t".ToCharArray()); + memory.IsEmptyOrWhiteSpace().Should().BeFalse(); + } + + [Fact] + public static void EmptyReadOnlyMemory() + { + var readOnlyMemory = new ReadOnlyMemory([]); + readOnlyMemory.IsEmptyOrWhiteSpace().Should().BeTrue(); + } + + [Fact] + public static void WhiteSpaceReadOnlyMemory() + { + var readOnlyMemory = new ReadOnlyMemory(" \t\n".ToCharArray()); + readOnlyMemory.IsEmptyOrWhiteSpace().Should().BeTrue(); + } + + [Fact] + public static void NonWhiteSpaceReadOnlyMemory() + { + var readOnlyMemory = new ReadOnlyMemory("abc".ToCharArray()); + readOnlyMemory.IsEmptyOrWhiteSpace().Should().BeFalse(); + } + + [Fact] + public static void MixedReadOnlyMemory() + { + var readOnlyMemory = new ReadOnlyMemory(" a\t".ToCharArray()); + readOnlyMemory.IsEmptyOrWhiteSpace().Should().BeFalse(); + } } diff --git a/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs b/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs index 24740d0..580c677 100644 --- a/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs +++ b/Code/Light.GuardClauses/Check.IsEmptyOrWhiteSpace.cs @@ -34,4 +34,18 @@ public static bool IsEmptyOrWhiteSpace(this ReadOnlySpan span) return true; } + + /// + /// Checks if the specified memory is empty or contains only white space characters. + /// + /// The memory to be checked. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsEmptyOrWhiteSpace(this Memory memory) => memory.Span.IsEmptyOrWhiteSpace(); + + /// + /// Checks if the specified memory is empty or contains only white space characters. + /// + /// The memory to be checked. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsEmptyOrWhiteSpace(this ReadOnlyMemory memory) => memory.Span.IsEmptyOrWhiteSpace(); }