44// Created by: Alexey Kulakov
55// Created: 2019.02.14
66
7+ using System ;
78using System . Linq ;
89using NUnit . Framework ;
910using 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