Browse Source

Add failing test for #291

Oren Novotny 9 years ago
parent
commit
888fa27b98
1 changed files with 86 additions and 0 deletions
  1. 86 0
      Ix.NET/Source/Tests/AsyncTests.Multiple.cs

+ 86 - 0
Ix.NET/Source/Tests/AsyncTests.Multiple.cs

@@ -891,6 +891,40 @@ namespace Tests
         }
 
 
+        [Fact]
+        public void Join11()
+        {
+            var customers = new List<Customer>
+            {
+                new Customer {CustomerId = "ALFKI"},
+                new Customer {CustomerId = "ANANT"},
+                new Customer {CustomerId = "FISSA"}
+            };
+            var orders = new List<Order>
+            {
+                new Order { OrderId = 1, CustomerId = "ALFKI"},
+                new Order { OrderId = 2, CustomerId = "ALFKI"},
+                new Order { OrderId = 3, CustomerId = "ALFKI"},
+                new Order { OrderId = 4, CustomerId = "FISSA"},
+                new Order { OrderId = 5, CustomerId = "FISSA"},
+                new Order { OrderId = 6, CustomerId = "FISSA"},
+            };
+
+            var asyncResult = customers.ToAsyncEnumerable()
+                                       .Join(orders.ToAsyncEnumerable(), c => c.CustomerId, o => o.CustomerId,
+                                            (c, o) => new CustomerOrder { CustomerId = c.CustomerId, OrderId = o.OrderId });
+
+            var e = asyncResult.GetEnumerator();
+            HasNext(e, new CustomerOrder { CustomerId = "ALFKI", OrderId = 1 });
+            HasNext(e, new CustomerOrder { CustomerId = "ALFKI", OrderId = 2 });
+            HasNext(e, new CustomerOrder { CustomerId = "ALFKI", OrderId = 3 });
+            HasNext(e, new CustomerOrder { CustomerId = "FISSA", OrderId = 4 });
+            HasNext(e, new CustomerOrder { CustomerId = "FISSA", OrderId = 5 });
+            HasNext(e, new CustomerOrder { CustomerId = "FISSA", OrderId = 6 });
+            NoNext(e);
+        }
+
+
         [Fact]
         public void SelectManyMultiple_Null()
         {
@@ -915,5 +949,57 @@ namespace Tests
             HasNext(e, 4);
             NoNext(e);
         }
+
+
+        public class Customer
+        {
+            public string CustomerId { get; set; }
+        }
+
+        public class Order
+        {
+            public int OrderId { get; set; }
+            public string CustomerId { get; set; }
+        }
+
+        public class CustomerOrder : IEquatable<CustomerOrder>
+        {
+            public bool Equals(CustomerOrder other)
+            {
+                if (ReferenceEquals(null, other)) return false;
+                if (ReferenceEquals(this, other)) return true;
+                return OrderId == other.OrderId && string.Equals(CustomerId, other.CustomerId);
+            }
+
+            public override bool Equals(object obj)
+            {
+                if (ReferenceEquals(null, obj)) return false;
+                if (ReferenceEquals(this, obj)) return true;
+                if (obj.GetType() != this.GetType()) return false;
+                return Equals((CustomerOrder)obj);
+            }
+
+            public override int GetHashCode()
+            {
+                unchecked
+                {
+                    return (OrderId * 397) ^ (CustomerId != null ? CustomerId.GetHashCode() : 0);
+                }
+            }
+
+            public static bool operator ==(CustomerOrder left, CustomerOrder right)
+            {
+                return Equals(left, right);
+            }
+
+            public static bool operator !=(CustomerOrder left, CustomerOrder right)
+            {
+                return !Equals(left, right);
+            }
+
+            public int OrderId { get; set; }
+            public string CustomerId { get; set; }
+        }
+
     }
 }