diff --git a/Funcky.Async/Funcky.Async.csproj b/Funcky.Async/Funcky.Async.csproj
index 69d04de6c..48f8169c2 100644
--- a/Funcky.Async/Funcky.Async.csproj
+++ b/Funcky.Async/Funcky.Async.csproj
@@ -46,7 +46,7 @@
-
+
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