Skip to content

Commit d8d8f29

Browse files
committed
Additional tests of TupleDescriptor
1 parent 7728009 commit d8d8f29

1 file changed

Lines changed: 137 additions & 2 deletions

File tree

Orm/Xtensive.Orm.Tests.Core/Tuples/TupleDescriptorTest.cs

Lines changed: 137 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace Xtensive.Orm.Tests.Core.Tuples
1414
[TestFixture]
1515
public class TupleDescriptorTest
1616
{
17-
public static readonly Type[] FieldTypes = new Type[] {
17+
public readonly Type[] FieldTypes = new Type[] {
1818
typeof (bool),
1919
typeof (bool?),
2020
typeof (byte),
@@ -83,7 +83,142 @@ public void PerformanceTest()
8383
descriptors.Add(TupleDescriptor.Create(types.ToArray()));
8484
}
8585
}
86-
86+
87+
[Test]
88+
[Explicit]
89+
[Category("Performance")]
90+
public void PerformanceOfConcatTest()
91+
{
92+
var rnd = RandomManager.CreateRandom(SeedVariatorType.CallingMethod);
93+
var count = 100000;
94+
var types = new List<Type>();
95+
96+
var size = 1;
97+
var sizeBig = 25;
98+
for (var i = 0; i < size; i++)
99+
types.Add(FieldTypes[rnd.Next(FieldTypes.Length)]);
100+
var firstTiny = TupleDescriptor.Create(types.ToArray());
101+
var secondTiny = TupleDescriptor.Create(types.ToArray());
102+
103+
types = new List<Type>(25);
104+
for (var i = 0; i < sizeBig; i++)
105+
types.Add(FieldTypes[rnd.Next(FieldTypes.Length)]);
106+
var firstBig = TupleDescriptor.Create(types.ToArray());
107+
var secondBig = TupleDescriptor.Create(types.ToArray());
108+
109+
_ = firstTiny.ConcatWith(secondTiny);
110+
_ = firstBig.ConcatWith(secondBig);
111+
112+
for (var runIdx = 0; runIdx < 10; runIdx++) {
113+
TestHelper.CollectGarbage();
114+
115+
using (var mx = new Measurement("Concating descriptors", count)) {
116+
for (var i = 0; i < count; i++) {
117+
_ = firstTiny.ConcatWith(secondTiny);
118+
}
119+
mx.Complete();
120+
Console.WriteLine(mx.ToString());
121+
}
122+
}
123+
124+
Console.WriteLine();
125+
for (var runIdx = 0; runIdx < 10; runIdx++) {
126+
TestHelper.CollectGarbage();
127+
128+
using (var mx = new Measurement("Concating descriptors", count)) {
129+
for (var i = 0; i < count; i++) {
130+
_ = firstBig.ConcatWith(secondBig);
131+
}
132+
mx.Complete();
133+
Console.WriteLine(mx.ToString());
134+
}
135+
}
136+
}
137+
138+
[Test]
139+
public void GetHeadingPartTest()
140+
{
141+
var dAll = TupleDescriptor.Create(FieldTypes);
142+
_ = Assert.Throws<ArgumentOutOfRangeException>(() => dAll.Head(-1));
143+
var head1 = dAll.Head(1);
144+
Assert.That(head1.Count, Is.EqualTo(1));
145+
Assert.That(head1[0], Is.EqualTo(dAll[0]));
146+
var head5 = dAll.Head(5);
147+
Assert.That(head5.Count, Is.EqualTo(5));
148+
Assert.That(head5[0], Is.EqualTo(dAll[0]));
149+
Assert.That(head5[1], Is.EqualTo(dAll[1]));
150+
Assert.That(head5[2], Is.EqualTo(dAll[2]));
151+
Assert.That(head5[3], Is.EqualTo(dAll[3]));
152+
Assert.That(head5[4], Is.EqualTo(dAll[4]));
153+
154+
_ = Assert.Throws<ArgumentOutOfRangeException>(() => dAll.Head(FieldTypes.Length + 1));
155+
}
156+
157+
[Test]
158+
public void GetTailPartTest()
159+
{
160+
var dAll = TupleDescriptor.Create(FieldTypes);
161+
_ = Assert.Throws<ArgumentOutOfRangeException>(() => dAll.Tail(0));
162+
var tail1 = dAll.Tail(1);
163+
Assert.That(tail1.Count, Is.EqualTo(1));
164+
Assert.That(tail1[0], Is.EqualTo(dAll[^1]));
165+
var tail5 = dAll.Tail(5);
166+
Assert.That(tail5.Count, Is.EqualTo(5));
167+
Assert.That(tail5[0], Is.EqualTo(dAll[^5]));
168+
Assert.That(tail5[1], Is.EqualTo(dAll[^4]));
169+
Assert.That(tail5[2], Is.EqualTo(dAll[^3]));
170+
Assert.That(tail5[3], Is.EqualTo(dAll[^2]));
171+
Assert.That(tail5[4], Is.EqualTo(dAll[^1]));
172+
173+
_ = Assert.Throws<ArgumentOutOfRangeException>(() => dAll.Tail(FieldTypes.Length + 1));
174+
}
175+
176+
[Test]
177+
public void GetSegmentTest()
178+
{
179+
var dAll = TupleDescriptor.Create(FieldTypes);
180+
_ = Assert.Throws<ArgumentOutOfRangeException>(() => dAll.Segment(new Xtensive.Core.Segment<int>(-1, 2)));
181+
182+
var head2 = dAll.Segment(new Xtensive.Core.Segment<int>(0, 2));
183+
Assert.That(head2.Count, Is.EqualTo(2));
184+
Assert.That(head2[0], Is.EqualTo(dAll[0]));
185+
Assert.That(head2[1], Is.EqualTo(dAll[1]));
186+
var middle5 = dAll.Segment(new Xtensive.Core.Segment<int>(5, 5));
187+
Assert.That(middle5.Count, Is.EqualTo(5));
188+
Assert.That(middle5[0], Is.EqualTo(dAll[5]));
189+
Assert.That(middle5[1], Is.EqualTo(dAll[6]));
190+
Assert.That(middle5[2], Is.EqualTo(dAll[7]));
191+
Assert.That(middle5[3], Is.EqualTo(dAll[8]));
192+
Assert.That(middle5[4], Is.EqualTo(dAll[9]));
193+
var complete = dAll.Segment(new Xtensive.Core.Segment<int>(0, dAll.Count));
194+
Assert.That(complete, Is.EqualTo(dAll));
195+
196+
_ = Assert.Throws<ArgumentException>(() => dAll.Segment(new Xtensive.Core.Segment<int>(0, FieldTypes.Length + 2)));
197+
_ = Assert.Throws<ArgumentException>(() => dAll.Segment(new Xtensive.Core.Segment<int>(1, FieldTypes.Length + 3)));
198+
_ = Assert.Throws<ArgumentException>(() => dAll.Segment(new Xtensive.Core.Segment<int>(2, FieldTypes.Length + 4)));
199+
}
200+
201+
[Test]
202+
public void ConcatDescriptorsTest()
203+
{
204+
var d1 = TupleDescriptor.Create(new Type[] { typeof(bool), typeof(int?), typeof(string) });
205+
var d2 = TupleDescriptor.Create(new Type[] { typeof(bool?), typeof(int?) });
206+
Assert.That(d1, Is.Not.EqualTo(default(TupleDescriptor)));
207+
Assert.That(d2, Is.Not.EqualTo(default(TupleDescriptor)));
208+
209+
var concated = d1.ConcatWith(d2);
210+
Assert.That(concated, Is.Not.EqualTo(default(TupleDescriptor)));
211+
Assert.That(concated.Count, Is.EqualTo(d1.Count + d2.Count));
212+
213+
for (int firstPart = 0; firstPart < d1.Count; firstPart++) {
214+
Assert.That(concated[firstPart], Is.EqualTo(d1[firstPart]));
215+
}
216+
217+
for (int secondPart = d1.Count, origIndex = 0; secondPart < d2.Count; secondPart++, origIndex++) {
218+
Assert.That(concated[secondPart], Is.EqualTo(d2[origIndex]));
219+
}
220+
}
221+
87222
[Test]
88223
public void CombinedTest()
89224
{

0 commit comments

Comments
 (0)