Browse Source

Using a null comparer is allowed.

Bart De Smet 7 years ago
parent
commit
1eb95c90fe
28 changed files with 38 additions and 168 deletions
  1. 0 1
      Ix.NET/Source/System.Interactive.Async.Tests/System/Linq/Operators/Distinct.cs
  2. 0 2
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Contains.cs
  3. 0 1
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Distinct.cs
  4. 0 1
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Except.cs
  5. 0 4
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/GroupBy.cs
  6. 0 1
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/GroupJoin.cs
  7. 0 1
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Intersect.cs
  8. 0 1
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Join.cs
  9. 0 4
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/OrderBy.cs
  10. 0 2
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/SequenceEqual.cs
  11. 0 4
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/ToDictionary.cs
  12. 0 1
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/ToHashSet.cs
  13. 0 4
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/ToLookup.cs
  14. 0 2
      Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Union.cs
  15. 0 4
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Contains.cs
  16. 1 3
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Distinct.cs
  17. 1 4
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Except.cs
  18. 8 30
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/GroupBy.cs
  19. 2 6
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/GroupJoin.cs
  20. 1 4
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Intersect.cs
  21. 2 8
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Join.cs
  22. 4 20
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/OrderBy.cs
  23. 1 3
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/OrderedAsyncEnumerable.cs
  24. 7 6
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SequenceEqual.cs
  25. 0 16
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToDictionary.cs
  26. 2 6
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToHashSet.cs
  27. 8 26
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToLookup.cs
  28. 1 3
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Union.cs

+ 0 - 1
Ix.NET/Source/System.Interactive.Async.Tests/System/Linq/Operators/Distinct.cs

@@ -22,7 +22,6 @@ namespace Tests
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerableEx.Distinct(default(IAsyncEnumerable<int>), x => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerableEx.Distinct(Return42, default(Func<int, int>), EqualityComparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerableEx.Distinct(Return42, x => x, default));
         }
 
         [Fact]

+ 0 - 2
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Contains.cs

@@ -18,11 +18,9 @@ namespace Tests
         {
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.Contains<int>(default, 42));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.Contains<int>(default, 42, EqualityComparer<int>.Default));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.Contains<int>(Return42, 42, null));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.Contains<int>(default, 42, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.Contains<int>(default, 42, EqualityComparer<int>.Default, CancellationToken.None));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.Contains<int>(Return42, 42, null, CancellationToken.None));
         }
 
         [Fact]

+ 0 - 1
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Distinct.cs

@@ -17,7 +17,6 @@ namespace Tests
         {
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Distinct<int>(default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Distinct<int>(default, EqualityComparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Distinct<int>(Return42, default));
         }
 
         [Fact]

+ 0 - 1
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Except.cs

@@ -20,7 +20,6 @@ namespace Tests
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Except<int>(default, Return42, new Eq()));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Except<int>(Return42, null, new Eq()));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Except<int>(Return42, Return42, default));
         }
 
         [Fact]

+ 0 - 4
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/GroupBy.cs

@@ -20,7 +20,6 @@ namespace Tests
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int>(default, x => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int>(Return42, default(Func<int, int>), EqualityComparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int>(Return42, x => x, default));
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(default, x => x, x => x));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(Return42, default, x => x));
@@ -29,7 +28,6 @@ namespace Tests
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(default, x => x, x => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(Return42, default, x => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(Return42, x => x, default(Func<int, int>), EqualityComparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(Return42, x => x, x => x, default));
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(default, x => x, (x, ys) => x));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(Return42, default, (x, ys) => x));
@@ -38,7 +36,6 @@ namespace Tests
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(default, x => x, (x, ys) => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(Return42, default, (x, ys) => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(Return42, x => x, default(Func<int, IAsyncEnumerable<int>, int>), EqualityComparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int>(Return42, x => x, (x, ys) => x, default));
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int, int>(default, x => x, x => x, (x, ys) => x));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int, int>(Return42, default, x => x, (x, ys) => x));
@@ -49,7 +46,6 @@ namespace Tests
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int, int>(Return42, default, x => x, (x, ys) => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int, int>(Return42, x => x, default, (x, ys) => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int, int>(Return42, x => x, x => x, default, EqualityComparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupBy<int, int, int, int>(Return42, x => x, x => x, (x, ys) => x, default));
         }
 
         [Fact]

+ 0 - 1
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/GroupJoin.cs

@@ -25,7 +25,6 @@ namespace Tests
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupJoin<int, int, int, int>(Return42, Return42, default, x => x, (x, y) => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupJoin<int, int, int, int>(Return42, Return42, x => x, default, (x, y) => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupJoin<int, int, int, int>(Return42, Return42, x => x, x => x, default, EqualityComparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.GroupJoin<int, int, int, int>(Return42, Return42, x => x, x => x, (x, y) => x, default));
         }
 
         [Fact]

+ 0 - 1
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Intersect.cs

@@ -20,7 +20,6 @@ namespace Tests
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Intersect<int>(default, Return42, new Eq()));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Intersect<int>(Return42, default, new Eq()));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Intersect<int>(Return42, Return42, default));
         }
 
         [Fact]

+ 0 - 1
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Join.cs

@@ -26,7 +26,6 @@ namespace Tests
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Join<int, int, int, int>(Return42, Return42, default, x => x, (x, y) => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Join<int, int, int, int>(Return42, Return42, x => x, default, (x, y) => x, EqualityComparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Join<int, int, int, int>(Return42, Return42, x => x, x => x, default, EqualityComparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Join<int, int, int, int>(Return42, Return42, x => x, x => x, (x, y) => x, default));
         }
 
         [Fact]

+ 0 - 4
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/OrderBy.cs

@@ -20,14 +20,12 @@ namespace Tests
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.OrderBy<int, int>(default, x => x, Comparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.OrderBy<int, int>(Return42, default(Func<int, int>), Comparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.OrderBy<int, int>(Return42, x => x, default));
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.OrderByDescending<int, int>(default, x => x));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.OrderByDescending<int, int>(Return42, default(Func<int, int>)));
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.OrderByDescending<int, int>(default, x => x, Comparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.OrderByDescending<int, int>(Return42, default(Func<int, int>), Comparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.OrderByDescending<int, int>(Return42, x => x, default));
 
             var xs = Return42.OrderBy(x => x);
 
@@ -36,14 +34,12 @@ namespace Tests
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.ThenBy<int, int>(default, x => x, Comparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.ThenBy<int, int>(xs, default(Func<int, int>), Comparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.ThenBy<int, int>(xs, x => x, default));
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.ThenByDescending<int, int>(default, x => x));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.ThenByDescending<int, int>(xs, default(Func<int, int>)));
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.ThenByDescending<int, int>(default, x => x, Comparer<int>.Default));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.ThenByDescending<int, int>(xs, default(Func<int, int>), Comparer<int>.Default));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.ThenByDescending<int, int>(xs, x => x, default));
         }
 
         [Fact]

+ 0 - 2
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/SequenceEqual.cs

@@ -21,14 +21,12 @@ namespace Tests
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.SequenceEqual<int>(default, Return42, new Eq()));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.SequenceEqual<int>(Return42, default, new Eq()));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.SequenceEqual<int>(Return42, Return42, default(IEqualityComparer<int>)));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.SequenceEqual<int>(default, Return42, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.SequenceEqual<int>(Return42, default, CancellationToken.None));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.SequenceEqual<int>(default, Return42, new Eq(), CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.SequenceEqual<int>(Return42, default, new Eq(), CancellationToken.None));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.SequenceEqual<int>(Return42, Return42, default, CancellationToken.None));
         }
 
         [Fact]

+ 0 - 4
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/ToDictionary.cs

@@ -21,7 +21,6 @@ namespace Tests
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int>(default, x => 0, EqualityComparer<int>.Default));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int>(Return42, default(Func<int, int>), EqualityComparer<int>.Default));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int>(Return42, x => 0, default(IEqualityComparer<int>)));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(default, x => 0, x => 0));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(Return42, default, x => 0));
@@ -30,14 +29,12 @@ namespace Tests
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(default, x => 0, x => 0, EqualityComparer<int>.Default));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(Return42, default, x => 0, EqualityComparer<int>.Default));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(Return42, x => 0, default, EqualityComparer<int>.Default));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(Return42, x => 0, x => 0, default(IEqualityComparer<int>)));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int>(default, x => 0, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int>(Return42, default(Func<int, int>), CancellationToken.None));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int>(default, x => 0, EqualityComparer<int>.Default, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int>(Return42, default(Func<int, int>), EqualityComparer<int>.Default, CancellationToken.None));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int>(Return42, x => 0, default, CancellationToken.None));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(default, x => 0, x => 0, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(Return42, default, x => 0, CancellationToken.None));
@@ -46,7 +43,6 @@ namespace Tests
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(default, x => 0, x => 0, EqualityComparer<int>.Default, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(Return42, default, x => 0, EqualityComparer<int>.Default, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(Return42, x => 0, default, EqualityComparer<int>.Default, CancellationToken.None));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToDictionary<int, int, int>(Return42, x => 0, x => 0, default, CancellationToken.None));
         }
 
         [Fact]

+ 0 - 1
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/ToHashSet.cs

@@ -20,7 +20,6 @@ namespace Tests
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToHashSet<int>(default, CancellationToken.None));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToHashSet<int>(default, EqualityComparer<int>.Default, CancellationToken.None));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToHashSet<int>(Return42, default, CancellationToken.None));
         }
 
         [Fact]

+ 0 - 4
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/ToLookup.cs

@@ -22,7 +22,6 @@ namespace Tests
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int>(default, x => 0, EqualityComparer<int>.Default));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int>(Return42, default(Func<int, int>), EqualityComparer<int>.Default));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int>(Return42, x => 0, default(IEqualityComparer<int>)));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(default, x => 0, x => 0));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(Return42, default, x => 0));
@@ -31,14 +30,12 @@ namespace Tests
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(default, x => 0, x => 0, EqualityComparer<int>.Default));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(Return42, default, x => 0, EqualityComparer<int>.Default));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(Return42, x => 0, default, EqualityComparer<int>.Default));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(Return42, x => 0, x => 0, default(IEqualityComparer<int>)));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int>(default, x => 0, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int>(Return42, default(Func<int, int>), CancellationToken.None));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int>(default, x => 0, EqualityComparer<int>.Default, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int>(Return42, default(Func<int, int>), EqualityComparer<int>.Default, CancellationToken.None));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int>(Return42, x => 0, default, CancellationToken.None));
 
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(default, x => 0, x => 0, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(Return42, default, x => 0, CancellationToken.None));
@@ -47,7 +44,6 @@ namespace Tests
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(default, x => 0, x => 0, EqualityComparer<int>.Default, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(Return42, default, x => 0, EqualityComparer<int>.Default, CancellationToken.None));
             await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(Return42, x => 0, default, EqualityComparer<int>.Default, CancellationToken.None));
-            await Assert.ThrowsAsync<ArgumentNullException>(() => AsyncEnumerable.ToLookup<int, int, int>(Return42, x => 0, x => 0, default, CancellationToken.None));
         }
 
         [Fact]

+ 0 - 2
Ix.NET/Source/System.Linq.Async.Tests/System/Linq/Operators/Union.cs

@@ -15,11 +15,9 @@ namespace Tests
         public void Union_Null()
         {
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Union<int>(default, Return42));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Union<int>(Return42, default));
 
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Union<int>(default, Return42, new Eq()));
             AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Union<int>(Return42, default, new Eq()));
-            AssertThrows<ArgumentNullException>(() => AsyncEnumerable.Union<int>(Return42, Return42, default));
         }
 
         [Fact]

+ 0 - 4
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Contains.cs

@@ -30,8 +30,6 @@ namespace System.Linq
         {
             if (source == null)
                 throw Error.ArgumentNull(nameof(source));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ContainsCore(source, value, comparer, CancellationToken.None);
         }
@@ -40,8 +38,6 @@ namespace System.Linq
         {
             if (source == null)
                 throw Error.ArgumentNull(nameof(source));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ContainsCore(source, value, comparer, cancellationToken);
         }

+ 1 - 3
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Distinct.cs

@@ -16,15 +16,13 @@ namespace System.Linq
             if (source == null)
                 throw Error.ArgumentNull(nameof(source));
 
-            return new DistinctAsyncIterator<TSource>(source, EqualityComparer<TSource>.Default);
+            return new DistinctAsyncIterator<TSource>(source, comparer: null);
         }
 
         public static IAsyncEnumerable<TSource> Distinct<TSource>(this IAsyncEnumerable<TSource> source, IEqualityComparer<TSource> comparer)
         {
             if (source == null)
                 throw Error.ArgumentNull(nameof(source));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new DistinctAsyncIterator<TSource>(source, comparer);
         }

+ 1 - 4
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Except.cs

@@ -18,7 +18,7 @@ namespace System.Linq
             if (second == null)
                 throw Error.ArgumentNull(nameof(second));
 
-            return new ExceptAsyncIterator<TSource>(first, second, EqualityComparer<TSource>.Default);
+            return new ExceptAsyncIterator<TSource>(first, second, comparer: null);
         }
 
         public static IAsyncEnumerable<TSource> Except<TSource>(this IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
@@ -27,8 +27,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(first));
             if (second == null)
                 throw Error.ArgumentNull(nameof(second));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new ExceptAsyncIterator<TSource>(first, second, comparer);
         }
@@ -46,7 +44,6 @@ namespace System.Linq
             {
                 Debug.Assert(first != null);
                 Debug.Assert(second != null);
-                Debug.Assert(comparer != null);
 
                 _first = first;
                 _second = second;

+ 8 - 30
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/GroupBy.cs

@@ -18,7 +18,7 @@ namespace System.Linq
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
 
-            return new GroupedAsyncEnumerable<TSource, TKey>(source, keySelector, EqualityComparer<TKey>.Default);
+            return new GroupedAsyncEnumerable<TSource, TKey>(source, keySelector, comparer: null);
         }
 
         public static IAsyncEnumerable<IAsyncGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
@@ -27,8 +27,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new GroupedAsyncEnumerable<TSource, TKey>(source, keySelector, comparer);
         }
@@ -40,7 +38,7 @@ namespace System.Linq
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
 
-            return new GroupedAsyncEnumerableWithTask<TSource, TKey>(source, keySelector, EqualityComparer<TKey>.Default);
+            return new GroupedAsyncEnumerableWithTask<TSource, TKey>(source, keySelector, comparer: null);
         }
 
         public static IAsyncEnumerable<IAsyncGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<TKey>> keySelector, IEqualityComparer<TKey> comparer)
@@ -49,8 +47,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new GroupedAsyncEnumerableWithTask<TSource, TKey>(source, keySelector, comparer);
         }
@@ -64,7 +60,7 @@ namespace System.Linq
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
 
-            return new GroupedAsyncEnumerable<TSource, TKey, TElement>(source, keySelector, elementSelector, EqualityComparer<TKey>.Default);
+            return new GroupedAsyncEnumerable<TSource, TKey, TElement>(source, keySelector, elementSelector, comparer: null);
         }
 
         public static IAsyncEnumerable<IAsyncGrouping<TKey, TElement>> GroupBy<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer)
@@ -75,8 +71,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new GroupedAsyncEnumerable<TSource, TKey, TElement>(source, keySelector, elementSelector, comparer);
         }
@@ -90,7 +84,7 @@ namespace System.Linq
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
 
-            return new GroupedAsyncEnumerableWithTask<TSource, TKey, TElement>(source, keySelector, elementSelector, EqualityComparer<TKey>.Default);
+            return new GroupedAsyncEnumerableWithTask<TSource, TKey, TElement>(source, keySelector, elementSelector, comparer: null);
         }
 
         public static IAsyncEnumerable<IAsyncGrouping<TKey, TElement>> GroupBy<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<TKey>> keySelector, Func<TSource, Task<TElement>> elementSelector, IEqualityComparer<TKey> comparer)
@@ -101,8 +95,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new GroupedAsyncEnumerableWithTask<TSource, TKey, TElement>(source, keySelector, elementSelector, comparer);
         }
@@ -116,7 +108,7 @@ namespace System.Linq
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
 
-            return new GroupedResultAsyncEnumerable<TSource, TKey, TResult>(source, keySelector, resultSelector, EqualityComparer<TKey>.Default);
+            return new GroupedResultAsyncEnumerable<TSource, TKey, TResult>(source, keySelector, resultSelector, comparer: null);
         }
 
         public static IAsyncEnumerable<TResult> GroupBy<TSource, TKey, TResult>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TKey, IAsyncEnumerable<TSource>, TResult> resultSelector, IEqualityComparer<TKey> comparer)
@@ -127,8 +119,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new GroupedResultAsyncEnumerable<TSource, TKey, TResult>(source, keySelector, resultSelector, comparer);
         }
@@ -142,7 +132,7 @@ namespace System.Linq
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
 
-            return new GroupedResultAsyncEnumerableWithTask<TSource, TKey, TResult>(source, keySelector, resultSelector, EqualityComparer<TKey>.Default);
+            return new GroupedResultAsyncEnumerableWithTask<TSource, TKey, TResult>(source, keySelector, resultSelector, comparer: null);
         }
 
         public static IAsyncEnumerable<TResult> GroupBy<TSource, TKey, TResult>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<TKey>> keySelector, Func<TKey, IAsyncEnumerable<TSource>, Task<TResult>> resultSelector, IEqualityComparer<TKey> comparer)
@@ -153,8 +143,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new GroupedResultAsyncEnumerableWithTask<TSource, TKey, TResult>(source, keySelector, resultSelector, comparer);
         }
@@ -170,7 +158,7 @@ namespace System.Linq
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
 
-            return source.GroupBy(keySelector, elementSelector, EqualityComparer<TKey>.Default).Select(g => resultSelector(g.Key, g));
+            return source.GroupBy(keySelector, elementSelector, comparer: null).Select(g => resultSelector(g.Key, g));
         }
 
         public static IAsyncEnumerable<TResult> GroupBy<TSource, TKey, TElement, TResult>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, Func<TKey, IAsyncEnumerable<TElement>, TResult> resultSelector, IEqualityComparer<TKey> comparer)
@@ -183,8 +171,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(elementSelector));
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return source.GroupBy(keySelector, elementSelector, comparer).Select(g => resultSelector(g.Key, g));
         }
@@ -200,7 +186,7 @@ namespace System.Linq
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
 
-            return source.GroupBy(keySelector, elementSelector, EqualityComparer<TKey>.Default).Select(g => resultSelector(g.Key, g));
+            return source.GroupBy<TSource, TKey, TElement>(keySelector, elementSelector, comparer: null).Select(g => resultSelector(g.Key, g));
         }
 
         public static IAsyncEnumerable<TResult> GroupBy<TSource, TKey, TElement, TResult>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<TKey>> keySelector, Func<TSource, Task<TElement>> elementSelector, Func<TKey, IAsyncEnumerable<TElement>, Task<TResult>> resultSelector, IEqualityComparer<TKey> comparer)
@@ -213,8 +199,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(elementSelector));
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return source.GroupBy(keySelector, elementSelector, comparer).Select(g => resultSelector(g.Key, g));
         }
@@ -234,7 +218,6 @@ namespace System.Linq
                 Debug.Assert(source != null);
                 Debug.Assert(keySelector != null);
                 Debug.Assert(resultSelector != null);
-                Debug.Assert(comparer != null);
 
                 _source = source;
                 _keySelector = keySelector;
@@ -328,7 +311,6 @@ namespace System.Linq
                 Debug.Assert(source != null);
                 Debug.Assert(keySelector != null);
                 Debug.Assert(resultSelector != null);
-                Debug.Assert(comparer != null);
 
                 _source = source;
                 _keySelector = keySelector;
@@ -422,7 +404,6 @@ namespace System.Linq
                 Debug.Assert(source != null);
                 Debug.Assert(keySelector != null);
                 Debug.Assert(elementSelector != null);
-                Debug.Assert(comparer != null);
 
                 _source = source;
                 _keySelector = keySelector;
@@ -516,7 +497,6 @@ namespace System.Linq
                 Debug.Assert(source != null);
                 Debug.Assert(keySelector != null);
                 Debug.Assert(elementSelector != null);
-                Debug.Assert(comparer != null);
 
                 _source = source;
                 _keySelector = keySelector;
@@ -608,7 +588,6 @@ namespace System.Linq
             {
                 Debug.Assert(source != null);
                 Debug.Assert(keySelector != null);
-                Debug.Assert(comparer != null);
 
                 _source = source;
                 _keySelector = keySelector;
@@ -698,7 +677,6 @@ namespace System.Linq
             {
                 Debug.Assert(source != null);
                 Debug.Assert(keySelector != null);
-                Debug.Assert(comparer != null);
 
                 _source = source;
                 _keySelector = keySelector;

+ 2 - 6
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/GroupJoin.cs

@@ -23,7 +23,7 @@ namespace System.Linq
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
 
-            return outer.GroupJoin(inner, outerKeySelector, innerKeySelector, resultSelector, EqualityComparer<TKey>.Default);
+            return new GroupJoinAsyncEnumerable<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer: null);
         }
 
         public static IAsyncEnumerable<TResult> GroupJoin<TOuter, TInner, TKey, TResult>(this IAsyncEnumerable<TOuter> outer, IAsyncEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector, Func<TInner, TKey> innerKeySelector, Func<TOuter, IAsyncEnumerable<TInner>, TResult> resultSelector, IEqualityComparer<TKey> comparer)
@@ -38,8 +38,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(innerKeySelector));
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new GroupJoinAsyncEnumerable<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer);
         }
@@ -57,7 +55,7 @@ namespace System.Linq
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
 
-            return outer.GroupJoin(inner, outerKeySelector, innerKeySelector, resultSelector, EqualityComparer<TKey>.Default);
+            return new GroupJoinAsyncEnumerableWithTask<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer: null);
         }
 
         public static IAsyncEnumerable<TResult> GroupJoin<TOuter, TInner, TKey, TResult>(this IAsyncEnumerable<TOuter> outer, IAsyncEnumerable<TInner> inner, Func<TOuter, Task<TKey>> outerKeySelector, Func<TInner, Task<TKey>> innerKeySelector, Func<TOuter, IAsyncEnumerable<TInner>, Task<TResult>> resultSelector, IEqualityComparer<TKey> comparer)
@@ -72,8 +70,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(innerKeySelector));
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new GroupJoinAsyncEnumerableWithTask<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer);
         }

+ 1 - 4
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Intersect.cs

@@ -18,7 +18,7 @@ namespace System.Linq
             if (second == null)
                 throw Error.ArgumentNull(nameof(second));
 
-            return new IntersectAsyncIterator<TSource>(first, second, EqualityComparer<TSource>.Default);
+            return new IntersectAsyncIterator<TSource>(first, second, comparer: null);
         }
 
         public static IAsyncEnumerable<TSource> Intersect<TSource>(this IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
@@ -27,8 +27,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(first));
             if (second == null)
                 throw Error.ArgumentNull(nameof(second));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new IntersectAsyncIterator<TSource>(first, second, comparer);
         }
@@ -46,7 +44,6 @@ namespace System.Linq
             {
                 Debug.Assert(first != null);
                 Debug.Assert(second != null);
-                Debug.Assert(comparer != null);
 
                 _first = first;
                 _second = second;

+ 2 - 8
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Join.cs

@@ -24,7 +24,7 @@ namespace System.Linq
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
 
-            return new JoinAsyncIterator<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, EqualityComparer<TKey>.Default);
+            return new JoinAsyncIterator<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer: null);
         }
 
         public static IAsyncEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this IAsyncEnumerable<TOuter> outer, IAsyncEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector, Func<TInner, TKey> innerKeySelector, Func<TOuter, TInner, TResult> resultSelector, IEqualityComparer<TKey> comparer)
@@ -39,8 +39,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(innerKeySelector));
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new JoinAsyncIterator<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer);
         }
@@ -58,7 +56,7 @@ namespace System.Linq
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
 
-            return new JoinAsyncIteratorWithTask<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, EqualityComparer<TKey>.Default);
+            return new JoinAsyncIteratorWithTask<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer: null);
         }
 
         public static IAsyncEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this IAsyncEnumerable<TOuter> outer, IAsyncEnumerable<TInner> inner, Func<TOuter, Task<TKey>> outerKeySelector, Func<TInner, Task<TKey>> innerKeySelector, Func<TOuter, TInner, Task<TResult>> resultSelector, IEqualityComparer<TKey> comparer)
@@ -73,8 +71,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(innerKeySelector));
             if (resultSelector == null)
                 throw Error.ArgumentNull(nameof(resultSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new JoinAsyncIteratorWithTask<TOuter, TInner, TKey, TResult>(outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer);
         }
@@ -97,7 +93,6 @@ namespace System.Linq
                 Debug.Assert(outerKeySelector != null);
                 Debug.Assert(innerKeySelector != null);
                 Debug.Assert(resultSelector != null);
-                Debug.Assert(comparer != null);
 
                 _outer = outer;
                 _inner = inner;
@@ -225,7 +220,6 @@ namespace System.Linq
                 Debug.Assert(outerKeySelector != null);
                 Debug.Assert(innerKeySelector != null);
                 Debug.Assert(resultSelector != null);
-                Debug.Assert(comparer != null);
 
                 _outer = outer;
                 _inner = inner;

+ 4 - 20
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/OrderBy.cs

@@ -16,7 +16,7 @@ namespace System.Linq
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
 
-            return source.OrderBy(keySelector, Comparer<TKey>.Default);
+            return OrderBy(source, keySelector, comparer: null);
         }
 
         public static IOrderedAsyncEnumerable<TSource> OrderBy<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<TKey>> keySelector)
@@ -26,7 +26,7 @@ namespace System.Linq
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
 
-            return source.OrderBy(keySelector, Comparer<TKey>.Default);
+            return OrderBy<TSource, TKey>(source, keySelector, comparer: null);
         }
 
         public static IOrderedAsyncEnumerable<TSource> OrderBy<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, IComparer<TKey> comparer)
@@ -35,8 +35,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new OrderedAsyncEnumerable<TSource, TKey>(source, keySelector, comparer, descending: false, parent: null);
         }
@@ -46,8 +44,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new OrderedAsyncEnumerableWithTask<TSource, TKey>(source, keySelector, comparer, descending: false, parent: null);
         }
@@ -59,7 +55,7 @@ namespace System.Linq
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
 
-            return source.OrderByDescending(keySelector, Comparer<TKey>.Default);
+            return source.OrderByDescending(keySelector, comparer: null);
         }
 
         public static IOrderedAsyncEnumerable<TSource> OrderByDescending<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<TKey>> keySelector)
@@ -69,7 +65,7 @@ namespace System.Linq
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
 
-            return source.OrderByDescending(keySelector, Comparer<TKey>.Default);
+            return source.OrderByDescending<TSource, TKey>(keySelector, comparer: null);
         }
 
         public static IOrderedAsyncEnumerable<TSource> OrderByDescending<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, IComparer<TKey> comparer)
@@ -78,8 +74,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new OrderedAsyncEnumerable<TSource, TKey>(source, keySelector, comparer, descending: true, parent: null);
         }
@@ -90,8 +84,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return new OrderedAsyncEnumerableWithTask<TSource, TKey>(source, keySelector, comparer, descending: true, parent: null);
         }
@@ -122,8 +114,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return source.CreateOrderedEnumerable(keySelector, comparer, descending: false);
         }
@@ -134,8 +124,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return source.CreateOrderedEnumerable(keySelector, comparer, descending: false);
         }
@@ -166,8 +154,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return source.CreateOrderedEnumerable(keySelector, comparer, descending: true);
         }
@@ -178,8 +164,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return source.CreateOrderedEnumerable(keySelector, comparer, descending: true);
         }

+ 1 - 3
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/OrderedAsyncEnumerable.cs

@@ -80,7 +80,6 @@ namespace System.Linq
         {
             Debug.Assert(source != null);
             Debug.Assert(keySelector != null);
-            Debug.Assert(comparer != null);
 
             _source = source;
             _keySelector = keySelector;
@@ -118,7 +117,6 @@ namespace System.Linq
         {
             Debug.Assert(source != null);
             Debug.Assert(keySelector != null);
-            Debug.Assert(comparer != null);
 
             _source = source;
             _keySelector = keySelector;
@@ -236,7 +234,7 @@ namespace System.Linq
 
         public AsyncEnumerableSorterBase(IComparer<TKey> comparer, bool descending, AsyncEnumerableSorter<TElement> next)
         {
-            _comparer = comparer;
+            _comparer = comparer ?? Comparer<TKey>.Default;
             _descending = descending;
             _next = next;
         }

+ 7 - 6
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/SequenceEqual.cs

@@ -17,7 +17,7 @@ namespace System.Linq
             if (second == null)
                 throw Error.ArgumentNull(nameof(second));
 
-            return SequenceEqualCore(first, second, EqualityComparer<TSource>.Default, CancellationToken.None);
+            return SequenceEqualCore(first, second, comparer: null, CancellationToken.None);
         }
 
         public static Task<bool> SequenceEqual<TSource>(this IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second, CancellationToken cancellationToken)
@@ -27,7 +27,7 @@ namespace System.Linq
             if (second == null)
                 throw Error.ArgumentNull(nameof(second));
 
-            return SequenceEqualCore(first, second, EqualityComparer<TSource>.Default, cancellationToken);
+            return SequenceEqualCore(first, second, comparer: null, cancellationToken);
         }
 
         public static Task<bool> SequenceEqual<TSource>(this IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
@@ -36,8 +36,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(first));
             if (second == null)
                 throw Error.ArgumentNull(nameof(second));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return SequenceEqualCore(first, second, comparer, CancellationToken.None);
         }
@@ -48,8 +46,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(first));
             if (second == null)
                 throw Error.ArgumentNull(nameof(second));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return SequenceEqualCore(first, second, comparer, cancellationToken);
         }
@@ -61,6 +57,11 @@ namespace System.Linq
                 return Task.FromResult(false);
             }
 
+            if (comparer == null)
+            {
+                comparer = EqualityComparer<TSource>.Default;
+            }
+
             return Core();
 
             async Task<bool> Core()

+ 0 - 16
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToDictionary.cs

@@ -56,8 +56,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToDictionaryCore(source, keySelector, x => x, comparer, CancellationToken.None);
         }
@@ -68,8 +66,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToDictionaryCore(source, keySelector, x => x, comparer, cancellationToken);
         }
@@ -80,8 +76,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToDictionaryCore(source, keySelector, x => Task.FromResult(x), comparer, CancellationToken.None);
         }
@@ -92,8 +86,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToDictionaryCore(source, keySelector, x => Task.FromResult(x), comparer, cancellationToken);
         }
@@ -154,8 +146,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToDictionaryCore(source, keySelector, elementSelector, comparer, CancellationToken.None);
         }
@@ -168,8 +158,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToDictionaryCore(source, keySelector, elementSelector, comparer, cancellationToken);
         }
@@ -182,8 +170,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToDictionaryCore(source, keySelector, elementSelector, comparer, CancellationToken.None);
         }
@@ -196,8 +182,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToDictionaryCore(source, keySelector, elementSelector, comparer, cancellationToken);
         }

+ 2 - 6
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToHashSet.cs

@@ -15,7 +15,7 @@ namespace System.Linq
             if (source == null)
                 throw Error.ArgumentNull(nameof(source));
 
-            return ToHashSetCore(source, EqualityComparer<TSource>.Default, CancellationToken.None);
+            return ToHashSetCore(source, comparer: null, CancellationToken.None);
         }
 
         public static Task<HashSet<TSource>> ToHashSet<TSource>(this IAsyncEnumerable<TSource> source, CancellationToken cancellationToken)
@@ -23,15 +23,13 @@ namespace System.Linq
             if (source == null)
                 throw Error.ArgumentNull(nameof(source));
 
-            return ToHashSetCore(source, EqualityComparer<TSource>.Default, cancellationToken);
+            return ToHashSetCore(source, comparer: null, cancellationToken);
         }
 
         public static Task<HashSet<TSource>> ToHashSet<TSource>(this IAsyncEnumerable<TSource> source, IEqualityComparer<TSource> comparer)
         {
             if (source == null)
                 throw Error.ArgumentNull(nameof(source));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToHashSetCore(source, comparer, CancellationToken.None);
         }
@@ -40,8 +38,6 @@ namespace System.Linq
         {
             if (source == null)
                 throw Error.ArgumentNull(nameof(source));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToHashSetCore(source, comparer, cancellationToken);
         }

+ 8 - 26
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToLookup.cs

@@ -2,9 +2,7 @@
 // The .NET Foundation licenses this file to you under the Apache 2.0 License.
 // See the LICENSE file in the project root for more information. 
 
-using System.Collections;
 using System.Collections.Generic;
-using System.Diagnostics;
 using System.Threading;
 using System.Threading.Tasks;
 
@@ -19,7 +17,7 @@ namespace System.Linq
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
 
-            return ToLookupCore(source, keySelector, x => x, EqualityComparer<TKey>.Default, CancellationToken.None);
+            return ToLookupCore(source, keySelector, x => x, comparer: null, CancellationToken.None);
         }
 
         public static Task<ILookup<TKey, TSource>> ToLookup<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, CancellationToken cancellationToken)
@@ -29,7 +27,7 @@ namespace System.Linq
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
 
-            return ToLookupCore(source, keySelector, x => x, EqualityComparer<TKey>.Default, cancellationToken);
+            return ToLookupCore(source, keySelector, x => x, comparer: null, cancellationToken);
         }
 
         public static Task<ILookup<TKey, TSource>> ToLookup<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<TKey>> keySelector)
@@ -39,7 +37,7 @@ namespace System.Linq
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
 
-            return ToLookupCore(source, keySelector, x => Task.FromResult(x), EqualityComparer<TKey>.Default, CancellationToken.None);
+            return ToLookupCore<TSource, TKey, TSource>(source, keySelector, x => Task.FromResult(x), comparer: null, CancellationToken.None);
         }
 
         public static Task<ILookup<TKey, TSource>> ToLookup<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<TKey>> keySelector, CancellationToken cancellationToken)
@@ -49,7 +47,7 @@ namespace System.Linq
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
 
-            return ToLookupCore(source, keySelector, x => Task.FromResult(x), EqualityComparer<TKey>.Default, cancellationToken);
+            return ToLookupCore<TSource, TKey, TSource>(source, keySelector, x => Task.FromResult(x), comparer: null, cancellationToken);
         }
 
         public static Task<ILookup<TKey, TSource>> ToLookup<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
@@ -58,8 +56,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToLookupCore(source, keySelector, x => x, comparer, CancellationToken.None);
         }
@@ -70,8 +66,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToLookupCore(source, keySelector, x => x, comparer, cancellationToken);
         }
@@ -82,8 +76,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToLookupCore(source, keySelector, x => Task.FromResult(x), comparer, CancellationToken.None);
         }
@@ -94,8 +86,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(source));
             if (keySelector == null)
                 throw Error.ArgumentNull(nameof(keySelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToLookupCore(source, keySelector, x => Task.FromResult(x), comparer, cancellationToken);
         }
@@ -109,7 +99,7 @@ namespace System.Linq
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
 
-            return ToLookupCore(source, keySelector, elementSelector, EqualityComparer<TKey>.Default, CancellationToken.None);
+            return ToLookupCore(source, keySelector, elementSelector, comparer: null, CancellationToken.None);
         }
 
         public static Task<ILookup<TKey, TElement>> ToLookup<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, CancellationToken cancellationToken)
@@ -121,7 +111,7 @@ namespace System.Linq
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
 
-            return ToLookupCore(source, keySelector, elementSelector, EqualityComparer<TKey>.Default, cancellationToken);
+            return ToLookupCore(source, keySelector, elementSelector, comparer: null, cancellationToken);
         }
 
         public static Task<ILookup<TKey, TElement>> ToLookup<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<TKey>> keySelector, Func<TSource, Task<TElement>> elementSelector)
@@ -133,7 +123,7 @@ namespace System.Linq
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
 
-            return ToLookupCore(source, keySelector, elementSelector, EqualityComparer<TKey>.Default, CancellationToken.None);
+            return ToLookupCore<TSource, TKey, TElement>(source, keySelector, elementSelector, comparer: null, CancellationToken.None);
         }
 
         public static Task<ILookup<TKey, TElement>> ToLookup<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<TKey>> keySelector, Func<TSource, Task<TElement>> elementSelector, CancellationToken cancellationToken)
@@ -145,7 +135,7 @@ namespace System.Linq
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
 
-            return ToLookupCore(source, keySelector, elementSelector, EqualityComparer<TKey>.Default, cancellationToken);
+            return ToLookupCore<TSource, TKey, TElement>(source, keySelector, elementSelector, comparer: null, cancellationToken);
         }
 
         public static Task<ILookup<TKey, TElement>> ToLookup<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer)
@@ -156,8 +146,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToLookupCore(source, keySelector, elementSelector, comparer, CancellationToken.None);
         }
@@ -170,8 +158,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToLookupCore(source, keySelector, elementSelector, comparer, cancellationToken);
         }
@@ -184,8 +170,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToLookupCore(source, keySelector, elementSelector, comparer, CancellationToken.None);
         }
@@ -198,8 +182,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(keySelector));
             if (elementSelector == null)
                 throw Error.ArgumentNull(nameof(elementSelector));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return ToLookupCore(source, keySelector, elementSelector, comparer, cancellationToken);
         }

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

@@ -18,7 +18,7 @@ namespace System.Linq
             if (second == null)
                 throw Error.ArgumentNull(nameof(second));
 
-            return UnionCore(first, second, EqualityComparer<TSource>.Default);
+            return UnionCore(first, second, comparer: null);
         }
 
         public static IAsyncEnumerable<TSource> Union<TSource>(this IAsyncEnumerable<TSource> first, IAsyncEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
@@ -27,8 +27,6 @@ namespace System.Linq
                 throw Error.ArgumentNull(nameof(first));
             if (second == null)
                 throw Error.ArgumentNull(nameof(second));
-            if (comparer == null)
-                throw Error.ArgumentNull(nameof(comparer));
 
             return UnionCore(first, second, comparer);
         }