diff UnitTests/Linq/Distinct.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UnitTests/Linq/Distinct.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,118 @@
+using System;
+using System.Linq;
+
+using NUnit.Framework;
+
+using BLToolkit.Data.DataProvider;
+
+namespace Data.Linq
+{
+	using Model;
+
+	[TestFixture]
+	public class DistinctTest : TestBase
+	{
+		[Test]
+		public void Distinct1()
+		{
+			ForEachProvider(db => AreEqual(
+				(from ch in    Child select ch.ParentID).Distinct(),
+				(from ch in db.Child select ch.ParentID).Distinct()));
+		}
+
+		[Test]
+		public void Distinct2()
+		{
+			ForEachProvider(db => AreEqual(
+				(from p in    Parent select p.Value1 ?? p.ParentID % 2).Distinct(),
+				(from p in db.Parent select p.Value1 ?? p.ParentID % 2).Distinct()));
+		}
+
+		[Test]
+		public void Distinct3()
+		{
+			ForEachProvider(db => AreEqual(
+				(from p in    Parent select new { Value = p.Value1 ?? p.ParentID % 2, p.Value1 }).Distinct(),
+				(from p in db.Parent select new { Value = p.Value1 ?? p.ParentID % 2, p.Value1 }).Distinct()));
+		}
+
+		[Test]
+		public void Distinct4()
+		{
+			ForEachProvider(db => AreEqual(
+				(from p in    Parent select new Parent { ParentID = p.Value1 ?? p.ParentID % 2, Value1 = p.Value1 }).Distinct(),
+				(from p in db.Parent select new Parent { ParentID = p.Value1 ?? p.ParentID % 2, Value1 = p.Value1 }).Distinct()));
+		}
+
+		[Test]
+		public void Distinct5()
+		{
+			var id = 2;
+
+			ForEachProvider(db => AreEqual(
+				(from p in    Parent select new Parent { ParentID = p.Value1 ?? p.ParentID % 2, Value1 = id + 1 }).Distinct(),
+				(from p in db.Parent select new Parent { ParentID = p.Value1 ?? p.ParentID % 2, Value1 = id + 1 }).Distinct()));
+		}
+
+		[Test]
+		public void Distinct6()
+		{
+			var id = 2;
+
+			ForEachProvider(new[] { ProviderName.Informix }, db => AreEqual(
+				(from p in    Parent select new Parent { ParentID = p.Value1 ?? p.ParentID + id % 2, Value1 = id + 1 }).Distinct(),
+				(from p in db.Parent select new Parent { ParentID = p.Value1 ?? p.ParentID + id % 2, Value1 = id + 1 }).Distinct()));
+		}
+
+		[Test]
+		public void DistinctCount()
+		{
+			var expected =
+				from p in Parent
+					join c in Child on p.ParentID equals c.ParentID
+				where c.ChildID > 20
+				select p;
+
+			ForEachProvider(db =>
+			{
+				var result =
+					from p in db.Parent
+						join c in db.Child on p.ParentID equals c.ParentID
+					where c.ChildID > 20
+					select p;
+
+				Assert.AreEqual(expected.Distinct().Count(), result.Distinct().Count());
+			});
+		}
+
+		[Test]
+		public void DistinctMax()
+		{
+			var expected =
+				from p in Parent
+					join c in Child on p.ParentID equals c.ParentID
+				where c.ChildID > 20
+				select p;
+
+			ForEachProvider(db =>
+			{
+				var result =
+					from p in db.Parent
+						join c in db.Child on p.ParentID equals c.ParentID
+					where c.ChildID > 20
+					select p;
+
+				Assert.AreEqual(expected.Distinct().Max(p => p.ParentID), result.Distinct().Max(p => p.ParentID));
+			});
+		}
+
+		[Test]
+		public void TakeDistinct()
+		{
+			ForEachProvider(new[] { ProviderName.Sybase, ProviderName.SQLite },
+				db => AreEqual(
+					(from ch in    Child orderby ch.ParentID select ch.ParentID).Take(4).Distinct(),
+					(from ch in db.Child orderby ch.ParentID select ch.ParentID).Take(4).Distinct()));
+		}
+	}
+}