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