From 65ad8bd008a721dbc3d9bea99504b371d43e6389 Mon Sep 17 00:00:00 2001 From: pmosk Date: Thu, 30 Apr 2026 15:41:52 +0300 Subject: [PATCH] Implement SplitToFlatArray methods --- .../FlatArray.Tests/FlatArray.Tests.csproj | 2 +- .../AsFlatArray.cs} | 0 .../Split/Split.Char.Count.cs.cs | 80 +++++++++++++++++++ .../Split/Split.Char.cs | 64 +++++++++++++++ .../Split/Split.CharArray.Count.cs | 50 ++++++++++++ .../Split/Split.CharArray.cs | 46 +++++++++++ .../Split/Split.String.Count.cs | 50 ++++++++++++ .../Split/Split.String.cs | 47 +++++++++++ .../Split/Split.StringArray.Count.cs | 50 ++++++++++++ .../Split/Split.StringArray.cs | 46 +++++++++++ .../ToFlatArray.Array.cs} | 0 .../ToFlatArray.Enumerable.cs} | 0 .../ToFlatArray.FlatArray.Nullable.cs} | 0 .../ToFlatArray.FlatArray.cs} | 0 .../ToFlatArray.ImmutableArray.Nullable.cs} | 0 .../ToFlatArray.ImmutableArray.cs} | 0 .../ToFlatArray.List.cs} | 0 .../ToFlatArray.ReadOnlySpan.cs} | 0 .../ToFlatArray.Span.cs} | 0 .../Factory/Factory.Constructor.Private.cs | 2 +- .../FlatArray/FlatArray.csproj | 2 +- .../AsFlatArray.cs} | 0 .../SplitToFlatArray/SplitToFlatArray.Char.cs | 38 +++++++++ .../SplitToFlatArray.CharArray.cs | 38 +++++++++ .../SplitToFlatArray.String.cs | 38 +++++++++ .../SplitToFlatArray.StringArray.cs | 38 +++++++++ .../ToFlatArray.FromArray.cs} | 0 .../ToFlatArray.FromFlatArray.cs} | 0 .../ToFlatArray.FromIEnumerable.cs} | 0 .../ToFlatArray.FromImmutableArray.cs} | 0 .../ToFlatArray.FromList.cs} | 0 .../ToFlatArray.FromSpan.cs} | 0 .../FlatCollections/FlatCollections.csproj | 2 +- 33 files changed, 589 insertions(+), 4 deletions(-) rename src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/{Test.AsFlatArray.cs => AsFlatArray/AsFlatArray.cs} (100%) create mode 100644 src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.Char.Count.cs.cs create mode 100644 src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.Char.cs create mode 100644 src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.CharArray.Count.cs create mode 100644 src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.CharArray.cs create mode 100644 src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.String.Count.cs create mode 100644 src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.String.cs create mode 100644 src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.StringArray.Count.cs create mode 100644 src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.StringArray.cs rename src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/{Test.ToFlatArray.Array.cs => ToFlatArray/ToFlatArray.Array.cs} (100%) rename src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/{Test.ToFlatArray.Enumerable.cs => ToFlatArray/ToFlatArray.Enumerable.cs} (100%) rename src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/{Test.ToFlatArray.FlatArray.Nullable.cs => ToFlatArray/ToFlatArray.FlatArray.Nullable.cs} (100%) rename src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/{Test.ToFlatArray.FlatArray.cs => ToFlatArray/ToFlatArray.FlatArray.cs} (100%) rename src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/{Test.ToFlatArray.ImmutableArray.Nullable.cs => ToFlatArray/ToFlatArray.ImmutableArray.Nullable.cs} (100%) rename src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/{Test.ToFlatArray.ImmutableArray.cs => ToFlatArray/ToFlatArray.ImmutableArray.cs} (100%) rename src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/{Test.ToFlatArray.List.cs => ToFlatArray/ToFlatArray.List.cs} (100%) rename src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/{Test.ToFlatArray.ReadOnlySpan.cs => ToFlatArray/ToFlatArray.ReadOnlySpan.cs} (100%) rename src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/{Test.ToFlatArray.Span.cs => ToFlatArray/ToFlatArray.Span.cs} (100%) rename src/flatcollections-array/FlatArray/FlatArrayExtensions/{Extensions.AsFlatArray.cs => AsFlatArray/AsFlatArray.cs} (100%) create mode 100644 src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs create mode 100644 src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs create mode 100644 src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs create mode 100644 src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs rename src/flatcollections-array/FlatArray/FlatArrayExtensions/{Extensions.ToFlatArray.FromArray.cs => ToFlatArray/ToFlatArray.FromArray.cs} (100%) rename src/flatcollections-array/FlatArray/FlatArrayExtensions/{Extensions.ToFlatArray.FromFlatArray.cs => ToFlatArray/ToFlatArray.FromFlatArray.cs} (100%) rename src/flatcollections-array/FlatArray/FlatArrayExtensions/{Extensions.ToFlatArray.FromIEnumerable.cs => ToFlatArray/ToFlatArray.FromIEnumerable.cs} (100%) rename src/flatcollections-array/FlatArray/FlatArrayExtensions/{Extensions.ToFlatArray.FromImmutableArray.cs => ToFlatArray/ToFlatArray.FromImmutableArray.cs} (100%) rename src/flatcollections-array/FlatArray/FlatArrayExtensions/{Extensions.ToFlatArray.FromList.cs => ToFlatArray/ToFlatArray.FromList.cs} (100%) rename src/flatcollections-array/FlatArray/FlatArrayExtensions/{Extensions.ToFlatArray.FromSpan.cs => ToFlatArray/ToFlatArray.FromSpan.cs} (100%) diff --git a/src/flatcollections-array/FlatArray.Tests/FlatArray.Tests.csproj b/src/flatcollections-array/FlatArray.Tests/FlatArray.Tests.csproj index 2b562be9..efc24f86 100644 --- a/src/flatcollections-array/FlatArray.Tests/FlatArray.Tests.csproj +++ b/src/flatcollections-array/FlatArray.Tests/FlatArray.Tests.csproj @@ -7,7 +7,7 @@ enable true true - $(NoWarn);CA1861;IDE0130;xUnit1046 + $(NoWarn);CA1861;IDE0130;xUnit1044;xUnit1046 false true Andrei Sergeev, Pavel Moskovoy diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.AsFlatArray.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/AsFlatArray/AsFlatArray.cs similarity index 100% rename from src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.AsFlatArray.cs rename to src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/AsFlatArray/AsFlatArray.cs diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.Char.Count.cs.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.Char.Count.cs.cs new file mode 100644 index 00000000..f318c5f8 --- /dev/null +++ b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.Char.Count.cs.cs @@ -0,0 +1,80 @@ +using System; +using Xunit; + +namespace PrimeFuncPack.Core.Tests; + +using TestTheoryData = TheoryData; + +partial class FlatArrayExtensionsTest +{ + [Theory] + [MemberData(nameof(SplitToFlatArray_WithCharSeparatorAndCount_ExpectCorrectState_Cases))] + public void SplitToFlatArray_WithCharSeparatorAndCount_ExpectCorrectState( + string? source, char separator, int count, StringSplitOptions options, string[]? expectedItems, int expectedLength) + { + var actual = source.SplitToFlatArray(separator, count, options); + actual.VerifyInnerState(expectedItems, expectedLength); + } + + public static TestTheoryData SplitToFlatArray_WithCharSeparatorAndCount_ExpectCorrectState_Cases + => + [ + new(null, 'a', 1, StringSplitOptions.None, null, default), + new("a,b,c", ',', -5, StringSplitOptions.None, null, default), + new("a,b,c", ',', -1, StringSplitOptions.RemoveEmptyEntries, null, default), + new(string.Empty, ',', 1, StringSplitOptions.None, [string.Empty], 1), + new(string.Empty, ',', 1, StringSplitOptions.RemoveEmptyEntries, null, default), + new("a", ',', 1, StringSplitOptions.None, ["a"], 1), + new("abc", ',', 1, StringSplitOptions.None, ["abc"], 1), + new("a,b,c", ',', 1, StringSplitOptions.None, ["a,b,c"], 1), + new("a,b,c", ',', 2, StringSplitOptions.None, ["a", "b,c"], 2), + new("a,b,c", ',', 3, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,b,c", ',', 10, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,,c", ',', 2, StringSplitOptions.None, ["a", ",c"], 2), + new("a,,c", ',', 3, StringSplitOptions.None, ["a", "", "c"], 3), + new("a,,c", ',', 3, StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(",,,", ',', 1, StringSplitOptions.None, [",,,"], 1), + new(",,,", ',', 2, StringSplitOptions.None, ["", ",,"], 2), + new(",,,", ',', 4, StringSplitOptions.None, ["", "", "", ""], 4), + new(",,,", ',', 4, StringSplitOptions.RemoveEmptyEntries, null, default), + new(",a,b,", ',', 2, StringSplitOptions.None, ["", "a,b,"], 2), + new(",a,b,", ',', 4, StringSplitOptions.None, ["", "a", "b", ""], 4), + new(",a,b,", ',', 4, StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new(" a , b , c ", ',', 3, StringSplitOptions.None, [" a ", " b ", " c "], 3), + new(" a , b , c ", ',', 3, StringSplitOptions.TrimEntries, ["a", "b", "c"], 3), + new(" a , , c ", ',', 3, StringSplitOptions.TrimEntries, ["a", "", "c"], 3), + new(" a , , c ", ',', 3, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("a|b|c", '|', 2, StringSplitOptions.None, ["a", "b|c"], 2), + new("a|b|c", '|', 3, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a|b||c", '|', 4, StringSplitOptions.None, ["a", "b", "", "c"], 4), + new("a|b||c", '|', 4, StringSplitOptions.RemoveEmptyEntries, ["a", "b", "c"], 3), + new("|a|b|", '|', 2, StringSplitOptions.None, ["", "a|b|"], 2), + new("|a|b|", '|', 4, StringSplitOptions.None, ["", "a", "b", ""], 4), + new("|a|b|", '|', 4, StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new(" ", ' ', 1, StringSplitOptions.None, [" "], 1), + new(" ", ' ', 2, StringSplitOptions.None, ["", " "], 2), + new(" ", ' ', 4, StringSplitOptions.None, ["", "", "", ""], 4), + new(" ", ' ', 4, StringSplitOptions.RemoveEmptyEntries, null, default), + new(" ", ' ', 4, StringSplitOptions.TrimEntries, ["", "", "", ""], 4), + new(" ", ' ', 4, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, null, default), + new("a b c", ' ', 2, StringSplitOptions.None, ["a", "b c"], 2), + new("a b c", ' ', 3, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a b c", ' ', 4, StringSplitOptions.None, ["a", "b", "", "c"], 4), + new("a b c", ' ', 4, StringSplitOptions.RemoveEmptyEntries, ["a", "b", "c"], 3), + new(" a b c ", ' ', 5, StringSplitOptions.TrimEntries, ["", "a", "b", "c", ""], 5), + new(" a b c ", ' ', 5, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, ["a", "b", "c"], 3), + new("a\tb\tc", '\t', 3, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a\t\tc", '\t', 3, StringSplitOptions.None, ["a", "", "c"], 3), + new("a\t\tc", '\t', 3, StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("α,β,γ", ',', 3, StringSplitOptions.None, ["α", "β", "γ"], 3), + new("α,,γ", ',', 3, StringSplitOptions.None, ["α", "", "γ"], 3), + new("α,,γ", ',', 3, StringSplitOptions.RemoveEmptyEntries, ["α", "γ"], 2), + new("one", 'x', 1, StringSplitOptions.None, ["one"], 1), + new("one", 'x', 3, StringSplitOptions.None, ["one"], 1), + new("one", 'x', 3, StringSplitOptions.RemoveEmptyEntries, ["one"], 1), + new("xone", 'x', 2, StringSplitOptions.None, ["", "one"], 2), + new("onex", 'x', 2, StringSplitOptions.None, ["one", ""], 2), + new("xone", 'x', 2, StringSplitOptions.RemoveEmptyEntries, ["one"], 1), + new("onex", 'x', 2, StringSplitOptions.RemoveEmptyEntries, ["one"], 1) + ]; +} diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.Char.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.Char.cs new file mode 100644 index 00000000..78a05d66 --- /dev/null +++ b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.Char.cs @@ -0,0 +1,64 @@ +using System; +using Xunit; + +namespace PrimeFuncPack.Core.Tests; + +using TestTheoryData = TheoryData; + +partial class FlatArrayExtensionsTest +{ + [Theory] + [MemberData(nameof(SplitToFlatArray_WithCharSeparator_ExpectCorrectState_Cases))] + public void SplitToFlatArray_WithCharSeparator_ExpectCorrectState( + string? source, char separator, StringSplitOptions options, string[]? expectedItems, int expectedLength) + { + var actual = source.SplitToFlatArray(separator, options); + actual.VerifyInnerState(expectedItems, expectedLength); + } + + public static TestTheoryData SplitToFlatArray_WithCharSeparator_ExpectCorrectState_Cases + => + [ + new(null, 'a', StringSplitOptions.None, null, default), + new(string.Empty, ',', StringSplitOptions.None, [string.Empty], 1), + new(string.Empty, ',', StringSplitOptions.RemoveEmptyEntries, null, default), + new("a", ',', StringSplitOptions.None, ["a"], 1), + new("abc", ',', StringSplitOptions.None, ["abc"], 1), + new("a,b,c", ',', StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,,c", ',', StringSplitOptions.None, ["a", "", "c"], 3), + new("a,,c", ',', StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(",,,", ',', StringSplitOptions.None, ["", "", "", ""], 4), + new(",,,", ',', StringSplitOptions.RemoveEmptyEntries, null, default), + new(",a,b,", ',', StringSplitOptions.None, ["", "a", "b", ""], 4), + new(",a,b,", ',', StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new(" a , b , c ", ',', StringSplitOptions.None, [" a ", " b ", " c "], 3), + new(" a , b , c ", ',', StringSplitOptions.TrimEntries, ["a", "b", "c"], 3), + new(" a , , c ", ',', StringSplitOptions.TrimEntries, ["a", "", "c"], 3), + new(" a , , c ", ',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("a|b|c", '|', StringSplitOptions.None, ["a", "b", "c"], 3), + new("a|b||c", '|', StringSplitOptions.None, ["a", "b", "", "c"], 4), + new("a|b||c", '|', StringSplitOptions.RemoveEmptyEntries, ["a", "b", "c"], 3), + new("|a|b|", '|', StringSplitOptions.None, ["", "a", "b", ""], 4), + new("|a|b|", '|', StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new(" ", ' ', StringSplitOptions.None, ["", "", "", ""], 4), + new(" ", ' ', StringSplitOptions.RemoveEmptyEntries, null, default), + new(" ", ' ', StringSplitOptions.TrimEntries, ["", "", "", ""], 4), + new(" ", ' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, null, default), + new("a b c", ' ', StringSplitOptions.None, ["a", "b", "c"], 3), + new("a b c", ' ', StringSplitOptions.None, ["a", "b", "", "c"], 4), + new("a b c", ' ', StringSplitOptions.RemoveEmptyEntries, ["a", "b", "c"], 3), + new(" a b c ", ' ', StringSplitOptions.TrimEntries, ["", "a", "b", "c", ""], 5), + new("a\tb\tc", '\t', StringSplitOptions.None, ["a", "b", "c"], 3), + new("a\t\tc", '\t', StringSplitOptions.None, ["a", "", "c"], 3), + new("a\t\tc", '\t', StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("α,β,γ", ',', StringSplitOptions.None, ["α", "β", "γ"], 3), + new("α,,γ", ',', StringSplitOptions.None, ["α", "", "γ"], 3), + new("α,,γ", ',', StringSplitOptions.RemoveEmptyEntries, ["α", "γ"], 2), + new("one", 'x', StringSplitOptions.None, ["one"], 1), + new("one", 'x', StringSplitOptions.RemoveEmptyEntries, ["one"], 1), + new("xone", 'x', StringSplitOptions.None, ["", "one"], 2), + new("onex", 'x', StringSplitOptions.None, ["one", ""], 2), + new("xone", 'x', StringSplitOptions.RemoveEmptyEntries, ["one"], 1), + new("onex", 'x', StringSplitOptions.RemoveEmptyEntries, ["one"], 1) + ]; +} \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.CharArray.Count.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.CharArray.Count.cs new file mode 100644 index 00000000..81fe50d7 --- /dev/null +++ b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.CharArray.Count.cs @@ -0,0 +1,50 @@ +using System; +using Xunit; + +namespace PrimeFuncPack.Core.Tests; + +using TestTheoryData = TheoryData; + +partial class FlatArrayExtensionsTest +{ + [Theory] + [MemberData(nameof(SplitToFlatArray_WithCharSeparatorsAndCount_ExpectCorrectState_Cases))] + public void SplitToFlatArray_WithCharSeparatorsAndCount_ExpectCorrectState( + string? source, char[]? separators, int count, StringSplitOptions options, string[]? expectedItems, int expectedLength) + { + var actual = source.SplitToFlatArray(separators, count, options); + actual.VerifyInnerState(expectedItems, expectedLength); + } + + public static TestTheoryData SplitToFlatArray_WithCharSeparatorsAndCount_ExpectCorrectState_Cases + => + [ + new(null, [','], 1, StringSplitOptions.None, null, default), + new("a,b;c", [',', ';'], -5, StringSplitOptions.None, null, default), + new("a,b;c", [',', ';'], -1, StringSplitOptions.RemoveEmptyEntries, null, default), + new(string.Empty, [','], 1, StringSplitOptions.None, [string.Empty], 1), + new(string.Empty, [','], 1, StringSplitOptions.RemoveEmptyEntries, null, default), + new("a,b;c", [',', ';'], 1, StringSplitOptions.None, ["a,b;c"], 1), + new("a,b;c", [',', ';'], 2, StringSplitOptions.None, ["a", "b;c"], 2), + new("a,b;c", [',', ';'], 3, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,b;c", [',', ';'], 10, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,,c", [','], 2, StringSplitOptions.None, ["a", ",c"], 2), + new("a,,c", [','], 3, StringSplitOptions.None, ["a", "", "c"], 3), + new("a,,c", [','], 3, StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(",;a;;b,", [',', ';'], 2, StringSplitOptions.None, ["", ";a;;b,"], 2), + new(",;a;;b,", [',', ';'], 6, StringSplitOptions.None, ["", "", "a", "", "b", ""], 6), + new(",;a;;b,", [',', ';'], 6, StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new(" a | b ; c ", ['|', ';'], 3, StringSplitOptions.TrimEntries, ["a", "b", "c"], 3), + new(" a | ; c ", ['|', ';'], 3, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("a b c", null, 2, StringSplitOptions.None, ["a", "b c"], 2), + new("a\tb c", [], 2, StringSplitOptions.None, ["a", "b c"], 2), + new("a\tb c", [], 3, StringSplitOptions.None, ["a", "b", "c"], 3), + new(" ", [], 1, StringSplitOptions.None, [" "], 1), + new(" ", [], 4, StringSplitOptions.RemoveEmptyEntries, null, default), + new(" a b ", [], 2, StringSplitOptions.RemoveEmptyEntries, ["a", "b "], 2), + new("a b c", [], 2, StringSplitOptions.RemoveEmptyEntries, ["a", "b c"], 2), + new("a,b", [','], 0, StringSplitOptions.None, null, default), + new("one", ['x'], 3, StringSplitOptions.None, ["one"], 1), + new("xone", ['x'], 2, StringSplitOptions.RemoveEmptyEntries, ["one"], 1) + ]; +} diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.CharArray.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.CharArray.cs new file mode 100644 index 00000000..6f197d55 --- /dev/null +++ b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.CharArray.cs @@ -0,0 +1,46 @@ +using System; +using Xunit; + +namespace PrimeFuncPack.Core.Tests; + +using TestTheoryData = TheoryData; + +partial class FlatArrayExtensionsTest +{ + [Theory] + [MemberData(nameof(SplitToFlatArray_WithCharSeparators_ExpectCorrectState_Cases))] + public void SplitToFlatArray_WithCharSeparators_ExpectCorrectState( + string? source, char[]? separators, StringSplitOptions options, string[]? expectedItems, int expectedLength) + { + var actual = source.SplitToFlatArray(separators, options); + actual.VerifyInnerState(expectedItems, expectedLength); + } + + public static TestTheoryData SplitToFlatArray_WithCharSeparators_ExpectCorrectState_Cases + => + [ + new(null, [','], StringSplitOptions.None, null, default), + new(string.Empty, [','], StringSplitOptions.None, [string.Empty], 1), + new(string.Empty, [','], StringSplitOptions.RemoveEmptyEntries, null, default), + new("a,b;c", [',', ';'], StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,,c", [',', ';'], StringSplitOptions.None, ["a", "", "c"], 3), + new("a,,c", [','], StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(",;a;;b,", [',', ';'], StringSplitOptions.None, ["", "", "a", "", "b", ""], 6), + new(",;a;;b,", [',', ';'], StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new(" a | b ; c ", ['|', ';'], StringSplitOptions.None, [" a ", " b ", " c "], 3), + new(" a | b ; c ", ['|', ';'], StringSplitOptions.TrimEntries, ["a", "b", "c"], 3), + new(" a | ; c ", ['|', ';'], StringSplitOptions.TrimEntries, ["a", "", "c"], 3), + new(" a | ; c ", ['|', ';'], StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("a\tb c", [], StringSplitOptions.None, ["a", "b", "c"], 3), + new(" ", [], StringSplitOptions.None, ["", "", "", ""], 4), + new(" ", [], StringSplitOptions.RemoveEmptyEntries, null, default), + new(" a b ", [], StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new("one", ['x', 'y'], StringSplitOptions.None, ["one"], 1), + new("xone", ['x'], StringSplitOptions.None, ["", "one"], 2), + new("onex", ['x'], StringSplitOptions.RemoveEmptyEntries, ["one"], 1), + new("a||b;;c", ['|', ';'], StringSplitOptions.RemoveEmptyEntries, ["a", "b", "c"], 3), + new("a| |c", ['|'], StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("α,β;γ", [',', ';'], StringSplitOptions.None, ["α", "β", "γ"], 3), + new("a,b c", null, StringSplitOptions.None, ["a,b", "c"], 2) + ]; +} diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.String.Count.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.String.Count.cs new file mode 100644 index 00000000..d116587c --- /dev/null +++ b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.String.Count.cs @@ -0,0 +1,50 @@ +using System; +using Xunit; + +namespace PrimeFuncPack.Core.Tests; + +using TestTheoryData = TheoryData; + +partial class FlatArrayExtensionsTest +{ + [Theory] + [MemberData(nameof(SplitToFlatArray_WithStringSeparatorAndCount_ExpectCorrectState_Cases))] + public void SplitToFlatArray_WithStringSeparatorAndCount_ExpectCorrectState( + string? source, string? separator, int count, StringSplitOptions options, string[]? expectedItems, int expectedLength) + { + var actual = source.SplitToFlatArray(separator, count, options); + actual.VerifyInnerState(expectedItems, expectedLength); + } + + public static TestTheoryData SplitToFlatArray_WithStringSeparatorAndCount_ExpectCorrectState_Cases + => + [ + new(null, ",", 1, StringSplitOptions.None, null, default), + new("a,b,c", ",", -5, StringSplitOptions.None, null, default), + new("a,b,c", ",", -1, StringSplitOptions.RemoveEmptyEntries, null, default), + new(string.Empty, ",", 1, StringSplitOptions.None, [string.Empty], 1), + new(string.Empty, ",", 1, StringSplitOptions.RemoveEmptyEntries, null, default), + new("a,b,c", ",", 1, StringSplitOptions.None, ["a,b,c"], 1), + new("a,b,c", ",", 2, StringSplitOptions.None, ["a", "b,c"], 2), + new("a,b,c", ",", 3, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,b,c", ",", 10, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,,c", ",", 2, StringSplitOptions.None, ["a", ",c"], 2), + new("a,,c", ",", 3, StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(",a,b,", ",", 2, StringSplitOptions.None, ["", "a,b,"], 2), + new(",a,b,", ",", 4, StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new("a||b||c", "||", 2, StringSplitOptions.None, ["a", "b||c"], 2), + new("a||b||c", "||", 3, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a||||c", "||", 3, StringSplitOptions.None, ["a", "", "c"], 3), + new("a||||c", "||", 3, StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(" a :: b :: c ", "::", 3, StringSplitOptions.TrimEntries, ["a", "b", "c"], 3), + new(" a :: :: c ", "::", 3, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("a b c", null, 2, StringSplitOptions.None, ["a b c"], 1), + new("a b c", null, 3, StringSplitOptions.RemoveEmptyEntries, ["a b c"], 1), + new(" ", null, 1, StringSplitOptions.None, [" "], 1), + new(" ", null, 4, StringSplitOptions.RemoveEmptyEntries, [" "], 1), + new("one", "x", 3, StringSplitOptions.None, ["one"], 1), + new("xone", "x", 2, StringSplitOptions.RemoveEmptyEntries, ["one"], 1), + new("a,b", ",", 0, StringSplitOptions.None, null, default), + new("a b c", string.Empty, 2, StringSplitOptions.RemoveEmptyEntries, ["a b c"], 1) + ]; +} diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.String.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.String.cs new file mode 100644 index 00000000..df60f17f --- /dev/null +++ b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.String.cs @@ -0,0 +1,47 @@ +using System; +using Xunit; + +namespace PrimeFuncPack.Core.Tests; + +using TestTheoryData = TheoryData; + +partial class FlatArrayExtensionsTest +{ + [Theory] + [MemberData(nameof(SplitToFlatArray_WithStringSeparator_ExpectCorrectState_Cases))] + public void SplitToFlatArray_WithStringSeparator_ExpectCorrectState( + string? source, string? separator, StringSplitOptions options, string[]? expectedItems, int expectedLength) + { + var actual = source.SplitToFlatArray(separator, options); + actual.VerifyInnerState(expectedItems, expectedLength); + } + + public static TestTheoryData SplitToFlatArray_WithStringSeparator_ExpectCorrectState_Cases + => + [ + new(null, ",", StringSplitOptions.None, null, default), + new(string.Empty, ",", StringSplitOptions.None, [string.Empty], 1), + new(string.Empty, ",", StringSplitOptions.RemoveEmptyEntries, null, default), + new("a,b,c", ",", StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,,c", ",", StringSplitOptions.None, ["a", "", "c"], 3), + new("a,,c", ",", StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(",a,b,", ",", StringSplitOptions.None, ["", "a", "b", ""], 4), + new(",a,b,", ",", StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new("a||b||c", "||", StringSplitOptions.None, ["a", "b", "c"], 3), + new("a||||c", "||", StringSplitOptions.None, ["a", "", "c"], 3), + new("a||||c", "||", StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(" a :: b :: c ", "::", StringSplitOptions.None, [" a ", " b ", " c "], 3), + new(" a :: b :: c ", "::", StringSplitOptions.TrimEntries, ["a", "b", "c"], 3), + new(" a :: :: c ", "::", StringSplitOptions.TrimEntries, ["a", "", "c"], 3), + new(" a :: :: c ", "::", StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("a b\tc", null, StringSplitOptions.None, ["a b\tc"], 1), + new(" ", null, StringSplitOptions.None, [" "], 1), + new(" ", null, StringSplitOptions.RemoveEmptyEntries, [" "], 1), + new("a b c", string.Empty, StringSplitOptions.RemoveEmptyEntries, ["a b c"], 1), + new("a,b c", string.Empty, StringSplitOptions.None, ["a,b c"], 1), + new("one", "x", StringSplitOptions.None, ["one"], 1), + new("xone", "x", StringSplitOptions.None, ["", "one"], 2), + new("onex", "x", StringSplitOptions.RemoveEmptyEntries, ["one"], 1), + new("α||β||γ", "||", StringSplitOptions.None, ["α", "β", "γ"], 3) + ]; +} diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.StringArray.Count.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.StringArray.Count.cs new file mode 100644 index 00000000..03c101a8 --- /dev/null +++ b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.StringArray.Count.cs @@ -0,0 +1,50 @@ +using System; +using Xunit; + +namespace PrimeFuncPack.Core.Tests; + +using TestTheoryData = TheoryData; + +partial class FlatArrayExtensionsTest +{ + [Theory] + [MemberData(nameof(SplitToFlatArray_WithStringSeparatorsAndCount_ExpectCorrectState_Cases))] + public void SplitToFlatArray_WithStringSeparatorsAndCount_ExpectCorrectState( + string? source, string[]? separators, int count, StringSplitOptions options, string[]? expectedItems, int expectedLength) + { + var actual = source.SplitToFlatArray(separators, count, options); + actual.VerifyInnerState(expectedItems, expectedLength); + } + + public static TestTheoryData SplitToFlatArray_WithStringSeparatorsAndCount_ExpectCorrectState_Cases + => + [ + new(null, [","], 1, StringSplitOptions.None, null, default), + new("a,b;c", [",", ";"], -5, StringSplitOptions.None, null, default), + new("a,b;c", [",", ";"], -1, StringSplitOptions.RemoveEmptyEntries, null, default), + new(string.Empty, [","], 1, StringSplitOptions.None, [string.Empty], 1), + new(string.Empty, [","], 1, StringSplitOptions.RemoveEmptyEntries, null, default), + new("a,b;c", [",", ";"], 1, StringSplitOptions.None, ["a,b;c"], 1), + new("a,b;c", [",", ";"], 2, StringSplitOptions.None, ["a", "b;c"], 2), + new("a,b;c", [",", ";"], 3, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,b;c", [",", ";"], 10, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,,c", [","], 2, StringSplitOptions.None, ["a", ",c"], 2), + new("a,,c", [","], 3, StringSplitOptions.None, ["a", "", "c"], 3), + new("a,,c", [","], 3, StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(",;a;;b,", [",", ";"], 2, StringSplitOptions.None, ["", ";a;;b,"], 2), + new(",;a;;b,", [",", ";"], 6, StringSplitOptions.None, ["", "", "a", "", "b", ""], 6), + new(",;a;;b,", [",", ";"], 6, StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new("a||b<>c", ["||", "<>"], 2, StringSplitOptions.None, ["a", "b<>c"], 2), + new("a||b<>c", ["||", "<>"], 3, StringSplitOptions.None, ["a", "b", "c"], 3), + new("a||||c", ["||"], 3, StringSplitOptions.None, ["a", "", "c"], 3), + new("a||||c", ["||"], 3, StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(" a :: b -- c ", ["::", "--"], 3, StringSplitOptions.TrimEntries, ["a", "b", "c"], 3), + new(" a :: -- c ", ["::", "--"], 3, StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("a b c", null, 2, StringSplitOptions.None, ["a", "b c"], 2), + new("a b c", null, 3, StringSplitOptions.RemoveEmptyEntries, ["a", "b", "c"], 3), + new(" ", null, 1, StringSplitOptions.None, [" "], 1), + new(" ", null, 4, StringSplitOptions.RemoveEmptyEntries, null, default), + new("a,b", [","], 0, StringSplitOptions.None, null, default), + new("a b c", [], 2, StringSplitOptions.RemoveEmptyEntries, ["a", "b c"], 2) + ]; +} diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.StringArray.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.StringArray.cs new file mode 100644 index 00000000..45112fb2 --- /dev/null +++ b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Split/Split.StringArray.cs @@ -0,0 +1,46 @@ +using System; +using Xunit; + +namespace PrimeFuncPack.Core.Tests; + +using TestTheoryData = TheoryData; + +partial class FlatArrayExtensionsTest +{ + [Theory] + [MemberData(nameof(SplitToFlatArray_WithStringSeparators_ExpectCorrectState_Cases))] + public void SplitToFlatArray_WithStringSeparators_ExpectCorrectState( + string? source, string[]? separators, StringSplitOptions options, string[]? expectedItems, int expectedLength) + { + var actual = source.SplitToFlatArray(separators, options); + actual.VerifyInnerState(expectedItems, expectedLength); + } + + public static TestTheoryData SplitToFlatArray_WithStringSeparators_ExpectCorrectState_Cases + => + [ + new(null, [","], StringSplitOptions.None, null, default), + new(string.Empty, [","], StringSplitOptions.None, [string.Empty], 1), + new(string.Empty, [","], StringSplitOptions.RemoveEmptyEntries, null, default), + new("a,b;c", [",", ";"], StringSplitOptions.None, ["a", "b", "c"], 3), + new("a,,c", [",", ";"], StringSplitOptions.None, ["a", "", "c"], 3), + new("a,,c", [","], StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(",;a;;b,", [",", ";"], StringSplitOptions.None, ["", "", "a", "", "b", ""], 6), + new(",;a;;b,", [",", ";"], StringSplitOptions.RemoveEmptyEntries, ["a", "b"], 2), + new("a||b<>c", ["||", "<>"], StringSplitOptions.None, ["a", "b", "c"], 3), + new("a||||c", ["||"], StringSplitOptions.None, ["a", "", "c"], 3), + new("a||||c", ["||"], StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new(" a :: b -- c ", ["::", "--"], StringSplitOptions.None, [" a ", " b ", " c "], 3), + new(" a :: b -- c ", ["::", "--"], StringSplitOptions.TrimEntries, ["a", "b", "c"], 3), + new(" a :: -- c ", ["::", "--"], StringSplitOptions.TrimEntries, ["a", "", "c"], 3), + new(" a :: -- c ", ["::", "--"], StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries, ["a", "c"], 2), + new("a b\tc", null, StringSplitOptions.None, ["a", "b", "c"], 3), + new(" ", null, StringSplitOptions.None, ["", "", "", ""], 4), + new(" ", null, StringSplitOptions.RemoveEmptyEntries, null, default), + new("one", ["x", "y"], StringSplitOptions.None, ["one"], 1), + new("xone", ["x"], StringSplitOptions.None, ["", "one"], 2), + new("onex", ["x"], StringSplitOptions.RemoveEmptyEntries, ["one"], 1), + new("α||β<>γ", ["||", "<>"], StringSplitOptions.None, ["α", "β", "γ"], 3), + new("a b c", [], StringSplitOptions.None, ["a", "b", "c"], 3) + ]; +} diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.Array.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.Array.cs similarity index 100% rename from src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.Array.cs rename to src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.Array.cs diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.Enumerable.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.Enumerable.cs similarity index 100% rename from src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.Enumerable.cs rename to src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.Enumerable.cs diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.FlatArray.Nullable.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.FlatArray.Nullable.cs similarity index 100% rename from src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.FlatArray.Nullable.cs rename to src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.FlatArray.Nullable.cs diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.FlatArray.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.FlatArray.cs similarity index 100% rename from src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.FlatArray.cs rename to src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.FlatArray.cs diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.ImmutableArray.Nullable.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.ImmutableArray.Nullable.cs similarity index 100% rename from src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.ImmutableArray.Nullable.cs rename to src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.ImmutableArray.Nullable.cs diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.ImmutableArray.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.ImmutableArray.cs similarity index 100% rename from src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.ImmutableArray.cs rename to src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.ImmutableArray.cs diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.List.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.List.cs similarity index 100% rename from src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.List.cs rename to src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.List.cs diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.ReadOnlySpan.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.ReadOnlySpan.cs similarity index 100% rename from src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.ReadOnlySpan.cs rename to src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.ReadOnlySpan.cs diff --git a/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.Span.cs b/src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.Span.cs similarity index 100% rename from src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/Test.ToFlatArray.Span.cs rename to src/flatcollections-array/FlatArray.Tests/Tests.FlatArrayExtensions/ToFlatArray/ToFlatArray.Span.cs diff --git a/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Constructor.Private.cs b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Constructor.Private.cs index cd27ca4b..2a49e937 100644 --- a/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Constructor.Private.cs +++ b/src/flatcollections-array/FlatArray/FlatArray.T/Factory/Factory.Constructor.Private.cs @@ -26,7 +26,7 @@ private FlatArray(T[] items, int _) // the caller MUST ensure the length is GREATER than zero // [MethodImpl(MethodImplOptions.AggressiveInlining)] - private FlatArray(int length, T[] items) + internal FlatArray(int length, T[] items) { Debug.Assert(items is not null); Debug.Assert(length > 0 && length <= items.Length); diff --git a/src/flatcollections-array/FlatArray/FlatArray.csproj b/src/flatcollections-array/FlatArray/FlatArray.csproj index 081b68c8..4ccdb880 100644 --- a/src/flatcollections-array/FlatArray/FlatArray.csproj +++ b/src/flatcollections-array/FlatArray/FlatArray.csproj @@ -19,7 +19,7 @@ PrimeFuncPack Core.FlatArray is a core library for .NET consisting of immutable FlatArray targeted for use in functional programming. System PrimeFuncPack.Core.FlatArray - 1.5.2 + 1.6.0-preview.1 diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.AsFlatArray.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/AsFlatArray/AsFlatArray.cs similarity index 100% rename from src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.AsFlatArray.cs rename to src/flatcollections-array/FlatArray/FlatArrayExtensions/AsFlatArray/AsFlatArray.cs diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs new file mode 100644 index 00000000..84ff0ad7 --- /dev/null +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.Char.cs @@ -0,0 +1,38 @@ +namespace System; + +partial class FlatArrayExtensions +{ + public static FlatArray SplitToFlatArray( + this string? source, char separator, StringSplitOptions options = StringSplitOptions.None) + { + if (source is null) + { + return default; + } + + var array = source.Split(separator, options); + if (array.Length is 0) + { + return default; + } + + return new(array.Length, array); + } + + public static FlatArray SplitToFlatArray( + this string? source, char separator, int count, StringSplitOptions options = StringSplitOptions.None) + { + if (source is null || count <= 0) + { + return default; + } + + var array = source.Split(separator, count, options); + if (array.Length is 0) + { + return default; + } + + return new(array.Length, array); + } +} \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs new file mode 100644 index 00000000..9cd3a36e --- /dev/null +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.CharArray.cs @@ -0,0 +1,38 @@ +namespace System; + +partial class FlatArrayExtensions +{ + public static FlatArray SplitToFlatArray( + this string? source, char[]? separators, StringSplitOptions options = StringSplitOptions.None) + { + if (source is null) + { + return default; + } + + var array = source.Split(separators, options); + if (array.Length is 0) + { + return default; + } + + return new(array.Length, array); + } + + public static FlatArray SplitToFlatArray( + this string? source, char[]? separators, int count, StringSplitOptions options = StringSplitOptions.None) + { + if (source is null || count <= 0) + { + return default; + } + + var array = source.Split(separators, count, options); + if (array.Length is 0) + { + return default; + } + + return new(array.Length, array); + } +} \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs new file mode 100644 index 00000000..8898dac6 --- /dev/null +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.String.cs @@ -0,0 +1,38 @@ +namespace System; + +partial class FlatArrayExtensions +{ + public static FlatArray SplitToFlatArray( + this string? source, string? separator, StringSplitOptions options = StringSplitOptions.None) + { + if (source is null) + { + return default; + } + + var array = source.Split(separator, options); + if (array.Length is 0) + { + return default; + } + + return new(array.Length, array); + } + + public static FlatArray SplitToFlatArray( + this string? source, string? separator, int count, StringSplitOptions options = StringSplitOptions.None) + { + if (source is null || count <= 0) + { + return default; + } + + var array = source.Split(separator, count, options); + if (array.Length is 0) + { + return default; + } + + return new(array.Length, array); + } +} \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs new file mode 100644 index 00000000..c633ea05 --- /dev/null +++ b/src/flatcollections-array/FlatArray/FlatArrayExtensions/SplitToFlatArray/SplitToFlatArray.StringArray.cs @@ -0,0 +1,38 @@ +namespace System; + +partial class FlatArrayExtensions +{ + public static FlatArray SplitToFlatArray( + this string? source, string[]? separators, StringSplitOptions options = StringSplitOptions.None) + { + if (source is null) + { + return default; + } + + var array = source.Split(separators, options); + if (array.Length is 0) + { + return default; + } + + return new(array.Length, array); + } + + public static FlatArray SplitToFlatArray( + this string? source, string[]? separators, int count, StringSplitOptions options = StringSplitOptions.None) + { + if (source is null || count <= 0) + { + return default; + } + + var array = source.Split(separators, count, options); + if (array.Length is 0) + { + return default; + } + + return new(array.Length, array); + } +} \ No newline at end of file diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromArray.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromArray.cs similarity index 100% rename from src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromArray.cs rename to src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromArray.cs diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromFlatArray.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromFlatArray.cs similarity index 100% rename from src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromFlatArray.cs rename to src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromFlatArray.cs diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromIEnumerable.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromIEnumerable.cs similarity index 100% rename from src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromIEnumerable.cs rename to src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromIEnumerable.cs diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromImmutableArray.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromImmutableArray.cs similarity index 100% rename from src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromImmutableArray.cs rename to src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromImmutableArray.cs diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromList.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromList.cs similarity index 100% rename from src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromList.cs rename to src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromList.cs diff --git a/src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromSpan.cs b/src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromSpan.cs similarity index 100% rename from src/flatcollections-array/FlatArray/FlatArrayExtensions/Extensions.ToFlatArray.FromSpan.cs rename to src/flatcollections-array/FlatArray/FlatArrayExtensions/ToFlatArray/ToFlatArray.FromSpan.cs diff --git a/src/flatcollections/FlatCollections/FlatCollections.csproj b/src/flatcollections/FlatCollections/FlatCollections.csproj index fac5ac21..3b4cb68c 100644 --- a/src/flatcollections/FlatCollections/FlatCollections.csproj +++ b/src/flatcollections/FlatCollections/FlatCollections.csproj @@ -19,7 +19,7 @@ PrimeFuncPack Core.FlatCollections is a set of immutable Flat collections for .NET designed for developing business applications based on functional programming. System PrimeFuncPack.Core.FlatCollections - 1.5.2 + 1.6.0-preview.1