annotate UnitTests/Linq/CompileTest.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Threading;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 using BLToolkit.Data.Linq;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 namespace Data.Linq
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 using Model;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public class CompileTest : TestBase
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public void CompiledTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 var query = CompiledQuery.Compile((ITestDataContext db, string n1, int n2) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 n1 + n2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 Assert.AreEqual("11", query(db, "1", 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 Assert.AreEqual("22", query(db, "2", 2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public void CompiledTest2([DataContexts] string context)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 var query = CompiledQuery.Compile((ITestDataContext db, int n) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 db.Child.Where(c => c.ParentID == n).Take(n));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 using (var db = GetDataContext(context))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 Assert.AreEqual(1, query(db, 1).ToList().Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 Assert.AreEqual(2, query(db, 2).ToList().Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 public void CompiledTest3()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 var query = CompiledQuery.Compile((ITestDataContext db, int n) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 db.GetTable<Child>().Where(c => c.ParentID == n).Take(n));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 Assert.AreEqual(1, query(db, 1).ToList().Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 Assert.AreEqual(2, query(db, 2).ToList().Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 public void CompiledTest4()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 var query = CompiledQuery.Compile((ITestDataContext db, int[] n) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 db.GetTable<Child>().Where(c => n.Contains(c.ParentID)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 Assert.AreEqual(3, query(db, new[] { 1, 2 }).ToList().Count()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 public void CompiledTest5()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 var query = CompiledQuery.Compile((ITestDataContext db, object[] ps) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 db.Parent.Where(p => p.ParentID == (int)ps[0] && p.Value1 == (int?)ps[1]));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 Assert.AreEqual(1, query(db, new object[] { 1, 1 }).ToList().Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 Assert.AreEqual(1, query(db, new object[] { 2, null }).ToList().Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 public void CompiledTable1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 var query = CompiledQuery.Compile((ITestDataContext db) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 db.Child);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 ForEachProvider(db => query(db).ToList().Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 public void CompiledTable2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 var query = CompiledQuery.Compile((ITestDataContext db) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 db.GetTable<Child>());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 ForEachProvider(db => query(db).ToList().Count());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 public void ConcurentTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 var query = CompiledQuery.Compile((ITestDataContext db, int n) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 db.GetTable<Parent>().Where(p => p.ParentID == n).First().ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 const int count = 100;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 var threads = new Thread[count];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 var results = new int [count, 2];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 for (var i = 0; i < count; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 var n = i;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 threads[i] = new Thread(() =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 var id = (n % 6) + 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 results[n,0] = id;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 results[n,1] = query(db, id);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 for (var i = 0; i < count; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 threads[i].Start();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 for (var i = 0; i < count; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 threads[i].Join();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 for (var i = 0; i < count; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 Assert.AreEqual(results[i,0], results[i,1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 public void ConcurentTest2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 var threads = new Thread[100];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 var results = new int [100,2];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 for (var i = 0; i < 100; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 var n = i;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 threads[i] = new Thread(() =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 using (var db = new TestDbManager())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 var id = (n % 6) + 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 results[n,0] = id;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 results[n,1] = db.Parent.Where(p => p.ParentID == id).First().ParentID;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 for (var i = 0; i < 100; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 threads[i].Start();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 for (var i = 0; i < 100; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 threads[i].Join();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 for (var i = 0; i < 100; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 Assert.AreEqual(results[i,0], results[i,1]);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 public void ParamTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 var query = CompiledQuery.Compile<ITestDataContext,int,IEnumerable<Child>>((db, id) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 from c in db.Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 where c.ParentID == id
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 select new Child
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 ParentID = id,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 ChildID = c.ChildID
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 ForEachProvider(db => Assert.AreEqual(2, query(db, 2).ToList().Count()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 public void ElementTest1()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 var query = CompiledQuery.Compile((ITestDataContext db, int n) =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 db.Child.Where(c => c.ParentID == n).First());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 ForEachProvider(db =>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 Assert.AreEqual(1, query(db, 1).ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 Assert.AreEqual(2, query(db, 2).ParentID);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 }