diff --git a/FrameworkFeatureConstants.props b/FrameworkFeatureConstants.props
index 6912a6711..b7e712b17 100644
--- a/FrameworkFeatureConstants.props
+++ b/FrameworkFeatureConstants.props
@@ -21,4 +21,7 @@
$(DefineConstants);REFLECTION_ASSEMBLY_NAME_INFO;REFLECTION_TYPE_NAME;ORDERED_DICTIONARY
+
+ $(DefineConstants);SHUFFLE_EXTENSION;INTEGRATED_ASYNC
+
diff --git a/Funcky.Analyzers/Funcky.Analyzers.Test/Funcky.Analyzers.Test.csproj b/Funcky.Analyzers/Funcky.Analyzers.Test/Funcky.Analyzers.Test.csproj
index 069027b95..c7aa8f6e6 100644
--- a/Funcky.Analyzers/Funcky.Analyzers.Test/Funcky.Analyzers.Test.csproj
+++ b/Funcky.Analyzers/Funcky.Analyzers.Test/Funcky.Analyzers.Test.csproj
@@ -1,7 +1,7 @@
- net9.0
+ net10.0
true
true
diff --git a/Funcky.Async.Test/Funcky.Async.Test.csproj b/Funcky.Async.Test/Funcky.Async.Test.csproj
index d956a47ea..d02c45473 100644
--- a/Funcky.Async.Test/Funcky.Async.Test.csproj
+++ b/Funcky.Async.Test/Funcky.Async.Test.csproj
@@ -1,4 +1,4 @@
-
+
net9.0;net8.0;net7.0
preview
diff --git a/Funcky.SourceGenerator.Test/Funcky.SourceGenerator.Test.csproj b/Funcky.SourceGenerator.Test/Funcky.SourceGenerator.Test.csproj
index b50fdf5a8..6eec76836 100644
--- a/Funcky.SourceGenerator.Test/Funcky.SourceGenerator.Test.csproj
+++ b/Funcky.SourceGenerator.Test/Funcky.SourceGenerator.Test.csproj
@@ -3,7 +3,7 @@
Funcky.SourceGenerator.Test
Funcky.SourceGenerator.Test
- net9.0
+ net10.0
enable
enable
preview
diff --git a/Funcky.Test/AsyncGenerator.cs b/Funcky.Test/AsyncGenerator.cs
new file mode 100644
index 000000000..5d5979388
--- /dev/null
+++ b/Funcky.Test/AsyncGenerator.cs
@@ -0,0 +1,28 @@
+#if INTEGRATED_ASYNC
+using FsCheck;
+using FsCheck.Fluent;
+
+namespace Funcky.Async.Test;
+
+internal static class AsyncGenerator
+{
+ public static Arbitrary> GenerateAsyncEnumerable(IArbMap map)
+ => map.GeneratorFor>().Select(list => list.ToAsyncEnumerable()).ToArbitrary();
+
+ public static Arbitrary> GenerateAwaitSelector(IArbMap map)
+ => map.GeneratorFor>().Select(ResultToValueTask).ToArbitrary();
+
+ public static Arbitrary> GenerateAwaitWithCancellationSelector(IArbMap map)
+ => map.GeneratorFor>().Select(ResultToValueTaskX).ToArbitrary();
+
+ private static AwaitSelector ResultToValueTask(Func f)
+ => new(value => ValueTask.FromResult(f(value)));
+
+ private static AwaitSelectorWithCancellation ResultToValueTaskX(Func f)
+ => new((value, _) => ValueTask.FromResult(f(value)));
+}
+
+public sealed record AwaitSelector(Func> Get);
+
+public sealed record AwaitSelectorWithCancellation(Func> Get);
+#endif
diff --git a/Funcky.Test/AsyncSequence/ConcatTest.cs b/Funcky.Test/AsyncSequence/ConcatTest.cs
new file mode 100644
index 000000000..f46884133
--- /dev/null
+++ b/Funcky.Test/AsyncSequence/ConcatTest.cs
@@ -0,0 +1,40 @@
+#if INTEGRATED_ASYNC
+using System.Collections.Immutable;
+using FsCheck;
+using FsCheck.Fluent;
+using FsCheck.Xunit;
+using Funcky.Async.Test.TestUtilities;
+
+namespace Funcky.Async.Test;
+
+public sealed class ConcatTest
+{
+ [Fact]
+ public async Task ConcatenatedSequenceIsEmptyWhenNoSourcesAreProvidedAsync()
+ {
+ await AsyncAssert.Empty(AsyncSequence.Concat