Browse Source

Add unit tests for Union.

Bart De Smet 6 years ago
parent
commit
f598aad880
1 changed files with 93 additions and 3 deletions
  1. 93 3
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Union.cs

+ 93 - 3
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Union.cs

@@ -22,7 +22,7 @@ namespace Tests
         }
 
         [Fact]
-        public async Task Union1()
+        public async Task Union_Simple()
         {
             var xs = new[] { 1, 2, 3 }.ToAsyncEnumerable();
             var ys = new[] { 3, 5, 1, 4 }.ToAsyncEnumerable();
@@ -38,7 +38,7 @@ namespace Tests
         }
 
         [Fact]
-        public async Task Union2()
+        public async Task Union_EqualityComparer()
         {
             var xs = new[] { 1, 2, -3 }.ToAsyncEnumerable();
             var ys = new[] { 3, 5, -1, 4 }.ToAsyncEnumerable();
@@ -54,7 +54,7 @@ namespace Tests
         }
 
         [Fact]
-        public async Task Union3()
+        public async Task Union_UnionUnion()
         {
             var xs = new[] { 1, 2, 3 }.ToAsyncEnumerable();
             var ys = new[] { 3, 5, 1, 4 }.ToAsyncEnumerable();
@@ -72,6 +72,96 @@ namespace Tests
             await NoNextAsync(e);
         }
 
+        [Fact]
+        public async Task Union_UnionUnionUnion()
+        {
+            var xs = new[] { 1, 2, 3 }.ToAsyncEnumerable();
+            var ys = new[] { 3, 5, 1, 4 }.ToAsyncEnumerable();
+            var zs = new[] { 5, 7, 8, 1 }.ToAsyncEnumerable();
+            var us = new[] { 2, 4, 6, 8 }.ToAsyncEnumerable();
+            var res = xs.Union(ys).Union(zs).Union(us);
+
+            var e = res.GetAsyncEnumerator();
+            await HasNextAsync(e, 1);
+            await HasNextAsync(e, 2);
+            await HasNextAsync(e, 3);
+            await HasNextAsync(e, 5);
+            await HasNextAsync(e, 4);
+            await HasNextAsync(e, 7);
+            await HasNextAsync(e, 8);
+            await HasNextAsync(e, 6);
+            await NoNextAsync(e);
+        }
+
+        [Fact]
+        public async Task Union_UnionOfEmpty2()
+        {
+            var res = AsyncEnumerable.Empty<int>().Union(AsyncEnumerable.Empty<int>());
+
+            var e = res.GetAsyncEnumerator();
+            await NoNextAsync(e);
+        }
+
+        [Fact]
+        public async Task Union_UnionOfEmpty3()
+        {
+            var res = AsyncEnumerable.Empty<int>().Union(AsyncEnumerable.Empty<int>()).Union(AsyncEnumerable.Empty<int>());
+
+            var e = res.GetAsyncEnumerator();
+            await NoNextAsync(e);
+        }
+
+        [Fact]
+        public async Task Union_ManyUnionsWithEmpty()
+        {
+            var xs = new[] { 1, 2, 3 }.ToAsyncEnumerable();
+            var ys = new[] { 3, 5, 1, 4 }.ToAsyncEnumerable();
+            var zs = new[] { 5, 7, 8, 1 }.ToAsyncEnumerable();
+            var us = new[] { 2, 4, 6, 8 }.ToAsyncEnumerable();
+            var res = AsyncEnumerable.Empty<int>().Union(AsyncEnumerable.Empty<int>()).Union(xs).Union(ys).Union(zs).Union(us);
+
+            var e = res.GetAsyncEnumerator();
+            await HasNextAsync(e, 1);
+            await HasNextAsync(e, 2);
+            await HasNextAsync(e, 3);
+            await HasNextAsync(e, 5);
+            await HasNextAsync(e, 4);
+            await HasNextAsync(e, 7);
+            await HasNextAsync(e, 8);
+            await HasNextAsync(e, 6);
+            await NoNextAsync(e);
+        }
+
+        [Fact]
+        public async Task Union_Count()
+        {
+            var xs = new[] { 1, 2, 3 }.ToAsyncEnumerable();
+            var ys = new[] { 3, 5, 1, 4 }.ToAsyncEnumerable();
+            var res = xs.Union(ys);
+
+            Assert.Equal(5, await res.CountAsync());
+        }
+
+        [Fact]
+        public async Task Union_ToArray()
+        {
+            var xs = new[] { 1, 2, 3 }.ToAsyncEnumerable();
+            var ys = new[] { 3, 5, 1, 4 }.ToAsyncEnumerable();
+            var res = xs.Union(ys);
+
+            Assert.Equal(new[] { 1, 2, 3, 4, 5 }, (await res.ToArrayAsync()).OrderBy(x => x));
+        }
+
+        [Fact]
+        public async Task Union_ToList()
+        {
+            var xs = new[] { 1, 2, 3 }.ToAsyncEnumerable();
+            var ys = new[] { 3, 5, 1, 4 }.ToAsyncEnumerable();
+            var res = xs.Union(ys);
+
+            Assert.Equal(new[] { 1, 2, 3, 4, 5 }, (await res.ToListAsync()).OrderBy(x => x));
+        }
+
         private sealed class Eq : IEqualityComparer<int>
         {
             public bool Equals(int x, int y)