Skip to content

Commit b5893d5

Browse files
committed
IssueJira0761: Tests optimized to support both SqlServer and PostgreSql
1 parent 544e6ab commit b5893d5

1 file changed

Lines changed: 33 additions & 20 deletions

File tree

Orm/Xtensive.Orm.Tests/Issues/IssueJira0761_ReadingAverageByDecimalField.cs

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// Created by: Alexey Kulakov
55
// Created: 2019.02.14
66

7+
using System;
78
using System.Linq;
89
using NUnit.Framework;
910
using Xtensive.Orm.Configuration;
@@ -232,50 +233,52 @@ public void AverageComplexTest()
232233
using (var session = Domain.OpenSession())
233234
using (var tx = session.OpenTransaction()) {
234235
var queryResult = session.Query.All<Order>().Average(o => o.Sum);
235-
var localResult = session.Query.All<Order>().ToArray().Average(o => o.Sum);
236-
Assert.That(queryResult, Is.EqualTo(localResult + 0.03m));
236+
var fraction = queryResult - Math.Floor(queryResult);
237+
Assert.That(fraction, Is.EqualTo(0.11m).Or.EqualTo(0.12m));
237238

238239
queryResult = session.Query.All<Order>().Average(o => o.Sum2);
239-
localResult = session.Query.All<Order>().ToArray().Average(o => o.Sum2);
240-
Assert.That(queryResult, Is.EqualTo(localResult + 0.06m));
240+
fraction = queryResult - Math.Floor(queryResult);
241+
Assert.That(fraction, Is.EqualTo(0.3m));
241242

242243
queryResult = session.Query.All<Order>().Average(o => o.Sum3);
243-
localResult = session.Query.All<Order>().ToArray().Average(o => o.Sum3);
244-
Assert.That(queryResult, Is.EqualTo(localResult + 0.006m));
244+
fraction = queryResult - Math.Floor(queryResult);
245+
Assert.That(fraction, Is.EqualTo(0.33m));
245246

246247
queryResult = session.Query.All<Order>().Average(o => o.Sum4);
247-
localResult = session.Query.All<Order>().ToArray().Average(o => o.Sum4);
248-
Assert.That(queryResult, Is.EqualTo(localResult));
248+
fraction = queryResult - Math.Floor(queryResult);
249+
Assert.That(fraction, Is.EqualTo(0.333m));
249250

250251
queryResult = session.Query.All<Order>().Average(o => o.Sum5);
251-
localResult = session.Query.All<Order>().ToArray().Average(o => o.Sum5);
252-
Assert.That(queryResult, Is.EqualTo(localResult));
252+
fraction = queryResult - Math.Floor(queryResult);
253+
Assert.That(fraction, Is.EqualTo(0.3333m));
253254

254255
queryResult = session.Query.All<Order>().Average(o => o.Sum6);
255-
localResult = session.Query.All<Order>().ToArray().Average(o => o.Sum6);
256-
Assert.That(queryResult, Is.EqualTo(localResult));
256+
fraction = queryResult - Math.Floor(queryResult);
257+
Assert.That(fraction, Is.EqualTo(0.33333m));
257258

258259
queryResult = session.Query.All<Order>().Average(o => o.Sum7);
259-
localResult = session.Query.All<Order>().ToArray().Average(o => o.Sum7);
260-
Assert.That(queryResult, Is.EqualTo(localResult));
260+
fraction = queryResult - Math.Floor(queryResult);
261+
Assert.That(fraction, Is.EqualTo(0.333333m));
261262

262263
queryResult = session.Query.All<Order>().Average(o => o.Sum8);
263-
localResult = session.Query.All<Order>().ToArray().Average(o => o.Sum8);
264-
Assert.That(queryResult, Is.EqualTo(localResult));
264+
fraction = queryResult - Math.Floor(queryResult);
265+
Assert.That(fraction, Is.EqualTo(0.3333333m));
265266

266267
queryResult = session.Query.All<Order>().Average(o => o.Sum9);
267-
localResult = session.Query.All<Order>().ToArray().Average(o => o.Sum9);
268-
Assert.That(queryResult, Is.EqualTo(localResult));
268+
fraction = queryResult - Math.Floor(queryResult);
269+
Assert.That(fraction, Is.EqualTo(0.33333333m));
269270

270271
queryResult = session.Query.All<Order>().Average(o => o.Sum10);
271-
localResult = session.Query.All<Order>().ToArray().Average(o => o.Sum10);
272-
Assert.That(queryResult, Is.EqualTo(localResult));
272+
fraction = queryResult - Math.Floor(queryResult);
273+
Assert.That(fraction, Is.EqualTo(0.333333333m));
273274
}
274275
}
275276

276277
[Test]
277278
public void SumComplexTest()
278279
{
280+
Require.ProviderIs(StorageProvider.SqlServer, " MS SQL Server has scale reduction algorithm, PgSql doesn't");
281+
279282
using (var session = Domain.OpenSession())
280283
using (var tx = session.OpenTransaction()) {
281284
var queryResult = session.Query.All<Order>().Sum(o => o.Sum);
@@ -337,6 +340,8 @@ public void ValueByEntityRefCase()
337340
using (var session = Domain.OpenSession())
338341
using (var tx = session.OpenTransaction()) {
339342
var results = session.Query.All<ValueByEntityRefCase>().Sum(a => a.Ref.Accepted);
343+
results = session.Query.All<ValueByEntityRefCase>().Sum(a => a.Ref.Accepted + a.Ref.AdditionalValue);
344+
results = session.Query.All<ValueByEntityRefCase>().Sum(a => a.Ref.Accepted + 1m);
340345
}
341346
}
342347

@@ -346,6 +351,8 @@ public void KeyExpressionCase()
346351
using (var session = Domain.OpenSession())
347352
using (var tx = session.OpenTransaction()) {
348353
var results = session.Query.All<KeyExpressionCase>().Sum(a => a.Id);
354+
results = session.Query.All<KeyExpressionCase>().Sum(a => a.Id + a.AdditionalValue);
355+
results = session.Query.All<KeyExpressionCase>().Sum(a => a.Id + 1m);
349356
}
350357
}
351358

@@ -355,6 +362,8 @@ public void KeyValueByEntityRefCase()
355362
using (var session = Domain.OpenSession())
356363
using (var tx = session.OpenTransaction()) {
357364
var results = session.Query.All<KeyValueByEntityRefCase>().Sum(a => a.Ref.Id);
365+
results = session.Query.All<KeyValueByEntityRefCase>().Sum(a => a.Ref.Id + a.Ref.AdditionalValue);
366+
results = session.Query.All<KeyValueByEntityRefCase>().Sum(a => a.Ref.Id + 1m);
358367
}
359368
}
360369

@@ -364,6 +373,8 @@ public void DecimalValueStructureCase()
364373
using (var session = Domain.OpenSession())
365374
using (var tx = session.OpenTransaction()) {
366375
var results = session.Query.All<DecimalValueStructureCase>().Sum(a => a.Struct.Value);
376+
results = session.Query.All<DecimalValueStructureCase>().Sum(a => a.Struct.Value + a.AdditionalValue);
377+
results = session.Query.All<DecimalValueStructureCase>().Sum(a => a.Struct.Value + 1m);
367378
}
368379
}
369380

@@ -373,6 +384,8 @@ public void DecimalValueStructureEntityByRefCase()
373384
using (var session = Domain.OpenSession())
374385
using (var tx = session.OpenTransaction()) {
375386
var results = session.Query.All<DecimalValueStructureEntityByRefCase>().Sum(a => a.Ref.Struct.Value);
387+
results = session.Query.All<DecimalValueStructureEntityByRefCase>().Sum(a => a.Ref.Struct.Value + a.Ref.AdditionalValue);
388+
results = session.Query.All<DecimalValueStructureEntityByRefCase>().Sum(a => a.Ref.Struct.Value + 1m);
376389
}
377390
}
378391
}

0 commit comments

Comments
 (0)