From 86b7285f51a0b8cf335c7e517ca9766a78656b5b Mon Sep 17 00:00:00 2001 From: Alexey Kulakov Date: Mon, 9 Nov 2020 19:05:16 +0500 Subject: [PATCH 1/2] Improves Operations test for DateTimeOffsets --- .../DateTimeOffset/OperationsTest.cs | 188 ++++++++++-------- 1 file changed, 108 insertions(+), 80 deletions(-) diff --git a/Orm/Xtensive.Orm.Tests/Linq/DateTimeAndDateTimeOffset/DateTimeOffset/OperationsTest.cs b/Orm/Xtensive.Orm.Tests/Linq/DateTimeAndDateTimeOffset/DateTimeOffset/OperationsTest.cs index a784fe6026..f1b30f73b7 100644 --- a/Orm/Xtensive.Orm.Tests/Linq/DateTimeAndDateTimeOffset/DateTimeOffset/OperationsTest.cs +++ b/Orm/Xtensive.Orm.Tests/Linq/DateTimeAndDateTimeOffset/DateTimeOffset/OperationsTest.cs @@ -1,6 +1,6 @@ -// Copyright (C) 2016 Xtensive LLC. -// All rights reserved. -// For conditions of distribution and use, see license. +// Copyright (C) 2016-2020 Xtensive LLC. +// This code is distributed under MIT license terms. +// See the License.txt file in the project root for more information. // Created by: Alex Groznov // Created: 2016.08.01 @@ -15,13 +15,13 @@ public class OperationsTest : DateTimeOffsetBaseTest public void AddYearsTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset.AddYears(1)==FirstDateTimeOffset.AddYears(1)); - RunTest(c => c.MillisecondDateTimeOffset.AddYears(-2)==FirstMillisecondDateTimeOffset.AddYears(-2)); - RunTest(c => c.NullableDateTimeOffset.Value.AddYears(33)==NullableDateTimeOffset.AddYears(33)); + RunTest(c => c.DateTimeOffset.AddYears(1) == FirstDateTimeOffset.AddYears(1)); + RunTest(c => c.MillisecondDateTimeOffset.AddYears(-2) == FirstMillisecondDateTimeOffset.AddYears(-2)); + RunTest(c => c.NullableDateTimeOffset.Value.AddYears(33) == NullableDateTimeOffset.AddYears(33)); - RunWrongTest(c => c.DateTimeOffset.AddYears(1)==FirstDateTimeOffset.AddYears(2)); - RunWrongTest(c => c.MillisecondDateTimeOffset.AddYears(-1)==FirstMillisecondDateTimeOffset.AddYears(-2)); - RunWrongTest(c => c.NullableDateTimeOffset.Value.AddYears(33)==NullableDateTimeOffset.AddYears(44)); + RunWrongTest(c => c.DateTimeOffset.AddYears(1) == FirstDateTimeOffset.AddYears(2)); + RunWrongTest(c => c.MillisecondDateTimeOffset.AddYears(-1) == FirstMillisecondDateTimeOffset.AddYears(-2)); + RunWrongTest(c => c.NullableDateTimeOffset.Value.AddYears(33) == NullableDateTimeOffset.AddYears(44)); }); } @@ -29,13 +29,13 @@ public void AddYearsTest() public void AddMonthsTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset.AddMonths(1)==FirstDateTimeOffset.AddMonths(1)); - RunTest(c => c.MillisecondDateTimeOffset.AddMonths(-2)==FirstMillisecondDateTimeOffset.AddMonths(-2)); - RunTest(c => c.NullableDateTimeOffset.Value.AddMonths(33)==NullableDateTimeOffset.AddMonths(33)); + RunTest(c => c.DateTimeOffset.AddMonths(1) == FirstDateTimeOffset.AddMonths(1)); + RunTest(c => c.MillisecondDateTimeOffset.AddMonths(-2) == FirstMillisecondDateTimeOffset.AddMonths(-2)); + RunTest(c => c.NullableDateTimeOffset.Value.AddMonths(33) == NullableDateTimeOffset.AddMonths(33)); - RunWrongTest(c => c.DateTimeOffset.AddMonths(1)==FirstDateTimeOffset.AddMonths(2)); - RunWrongTest(c => c.MillisecondDateTimeOffset.AddMonths(-1)==FirstMillisecondDateTimeOffset.AddMonths(-2)); - RunWrongTest(c => c.NullableDateTimeOffset.Value.AddMonths(33)==NullableDateTimeOffset.AddMonths(44)); + RunWrongTest(c => c.DateTimeOffset.AddMonths(1) == FirstDateTimeOffset.AddMonths(2)); + RunWrongTest(c => c.MillisecondDateTimeOffset.AddMonths(-1) == FirstMillisecondDateTimeOffset.AddMonths(-2)); + RunWrongTest(c => c.NullableDateTimeOffset.Value.AddMonths(33) == NullableDateTimeOffset.AddMonths(44)); }); } @@ -43,13 +43,13 @@ public void AddMonthsTest() public void AddDaysTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset.AddDays(1)==FirstDateTimeOffset.AddDays(1)); - RunTest(c => c.MillisecondDateTimeOffset.AddDays(-2)==FirstMillisecondDateTimeOffset.AddDays(-2)); - RunTest(c => c.NullableDateTimeOffset.Value.AddDays(33)==NullableDateTimeOffset.AddDays(33)); + RunTest(c => c.DateTimeOffset.AddDays(1) == FirstDateTimeOffset.AddDays(1)); + RunTest(c => c.MillisecondDateTimeOffset.AddDays(-2) == FirstMillisecondDateTimeOffset.AddDays(-2)); + RunTest(c => c.NullableDateTimeOffset.Value.AddDays(33) == NullableDateTimeOffset.AddDays(33)); - RunWrongTest(c => c.DateTimeOffset.AddDays(1)==FirstDateTimeOffset.AddDays(2)); - RunWrongTest(c => c.MillisecondDateTimeOffset.AddDays(-1)==FirstMillisecondDateTimeOffset.AddDays(-2)); - RunWrongTest(c => c.NullableDateTimeOffset.Value.AddDays(33)==NullableDateTimeOffset.AddDays(44)); + RunWrongTest(c => c.DateTimeOffset.AddDays(1) == FirstDateTimeOffset.AddDays(2)); + RunWrongTest(c => c.MillisecondDateTimeOffset.AddDays(-1) == FirstMillisecondDateTimeOffset.AddDays(-2)); + RunWrongTest(c => c.NullableDateTimeOffset.Value.AddDays(33) == NullableDateTimeOffset.AddDays(44)); }); } @@ -57,13 +57,13 @@ public void AddDaysTest() public void AddHoursTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset.AddHours(1)==FirstDateTimeOffset.AddHours(1)); - RunTest(c => c.MillisecondDateTimeOffset.AddHours(-2)==FirstMillisecondDateTimeOffset.AddHours(-2)); - RunTest(c => c.NullableDateTimeOffset.Value.AddHours(33)==NullableDateTimeOffset.AddHours(33)); + RunTest(c => c.DateTimeOffset.AddHours(1) == FirstDateTimeOffset.AddHours(1)); + RunTest(c => c.MillisecondDateTimeOffset.AddHours(-2) == FirstMillisecondDateTimeOffset.AddHours(-2)); + RunTest(c => c.NullableDateTimeOffset.Value.AddHours(33) == NullableDateTimeOffset.AddHours(33)); - RunWrongTest(c => c.DateTimeOffset.AddHours(1)==FirstDateTimeOffset.AddHours(2)); - RunWrongTest(c => c.MillisecondDateTimeOffset.AddHours(-1)==FirstMillisecondDateTimeOffset.AddHours(-2)); - RunWrongTest(c => c.NullableDateTimeOffset.Value.AddHours(33)==NullableDateTimeOffset.AddHours(44)); + RunWrongTest(c => c.DateTimeOffset.AddHours(1) == FirstDateTimeOffset.AddHours(2)); + RunWrongTest(c => c.MillisecondDateTimeOffset.AddHours(-1) == FirstMillisecondDateTimeOffset.AddHours(-2)); + RunWrongTest(c => c.NullableDateTimeOffset.Value.AddHours(33) == NullableDateTimeOffset.AddHours(44)); }); } @@ -71,13 +71,13 @@ public void AddHoursTest() public void AddMinutesTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset.AddMinutes(1)==FirstDateTimeOffset.AddMinutes(1)); - RunTest(c => c.MillisecondDateTimeOffset.AddMinutes(-2)==FirstMillisecondDateTimeOffset.AddMinutes(-2)); - RunTest(c => c.NullableDateTimeOffset.Value.AddMinutes(33)==NullableDateTimeOffset.AddMinutes(33)); + RunTest(c => c.DateTimeOffset.AddMinutes(1) == FirstDateTimeOffset.AddMinutes(1)); + RunTest(c => c.MillisecondDateTimeOffset.AddMinutes(-2) == FirstMillisecondDateTimeOffset.AddMinutes(-2)); + RunTest(c => c.NullableDateTimeOffset.Value.AddMinutes(33) == NullableDateTimeOffset.AddMinutes(33)); - RunWrongTest(c => c.DateTimeOffset.AddMinutes(1)==FirstDateTimeOffset.AddMinutes(2)); - RunWrongTest(c => c.MillisecondDateTimeOffset.AddMinutes(-1)==FirstMillisecondDateTimeOffset.AddMinutes(-2)); - RunWrongTest(c => c.NullableDateTimeOffset.Value.AddMinutes(33)==NullableDateTimeOffset.AddMinutes(44)); + RunWrongTest(c => c.DateTimeOffset.AddMinutes(1) == FirstDateTimeOffset.AddMinutes(2)); + RunWrongTest(c => c.MillisecondDateTimeOffset.AddMinutes(-1) == FirstMillisecondDateTimeOffset.AddMinutes(-2)); + RunWrongTest(c => c.NullableDateTimeOffset.Value.AddMinutes(33) == NullableDateTimeOffset.AddMinutes(44)); }); } @@ -85,13 +85,13 @@ public void AddMinutesTest() public void AddSecondsTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset.AddSeconds(1)==FirstDateTimeOffset.AddSeconds(1)); - RunTest(c => c.MillisecondDateTimeOffset.AddSeconds(-2)==FirstMillisecondDateTimeOffset.AddSeconds(-2)); - RunTest(c => c.NullableDateTimeOffset.Value.AddSeconds(33)==NullableDateTimeOffset.AddSeconds(33)); + RunTest(c => c.DateTimeOffset.AddSeconds(1) == FirstDateTimeOffset.AddSeconds(1)); + RunTest(c => c.MillisecondDateTimeOffset.AddSeconds(-2) == FirstMillisecondDateTimeOffset.AddSeconds(-2)); + RunTest(c => c.NullableDateTimeOffset.Value.AddSeconds(33) == NullableDateTimeOffset.AddSeconds(33)); - RunWrongTest(c => c.DateTimeOffset.AddSeconds(1)==FirstDateTimeOffset.AddSeconds(2)); - RunWrongTest(c => c.MillisecondDateTimeOffset.AddSeconds(-1)==FirstMillisecondDateTimeOffset.AddSeconds(-2)); - RunWrongTest(c => c.NullableDateTimeOffset.Value.AddSeconds(33)==NullableDateTimeOffset.AddSeconds(44)); + RunWrongTest(c => c.DateTimeOffset.AddSeconds(1) == FirstDateTimeOffset.AddSeconds(2)); + RunWrongTest(c => c.MillisecondDateTimeOffset.AddSeconds(-1) == FirstMillisecondDateTimeOffset.AddSeconds(-2)); + RunWrongTest(c => c.NullableDateTimeOffset.Value.AddSeconds(33) == NullableDateTimeOffset.AddSeconds(44)); }); } @@ -99,8 +99,8 @@ public void AddSecondsTest() public void AddMillisecondsTest() { ExecuteInsideSession(() => { - RunTest(c => c.MillisecondDateTimeOffset.AddMilliseconds(-2)==FirstMillisecondDateTimeOffset.AddMilliseconds(-2)); - RunWrongTest(c => c.MillisecondDateTimeOffset.AddMilliseconds(-1)==FirstMillisecondDateTimeOffset.AddMilliseconds(-2)); + RunTest(c => c.MillisecondDateTimeOffset.AddMilliseconds(-2) == FirstMillisecondDateTimeOffset.AddMilliseconds(-2)); + RunWrongTest(c => c.MillisecondDateTimeOffset.AddMilliseconds(-1) == FirstMillisecondDateTimeOffset.AddMilliseconds(-2)); }); } @@ -108,13 +108,13 @@ public void AddMillisecondsTest() public void AddTimeSpanTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset.Add(FirstOffset)==FirstDateTimeOffset.Add(FirstOffset)); - RunTest(c => c.MillisecondDateTimeOffset.Add(SecondOffset)==FirstMillisecondDateTimeOffset.Add(SecondOffset)); - RunTest(c => c.NullableDateTimeOffset.Value.Add(FirstOffset)==NullableDateTimeOffset.Add(FirstOffset)); + RunTest(c => c.DateTimeOffset.Add(FirstOffset) == FirstDateTimeOffset.Add(FirstOffset)); + RunTest(c => c.MillisecondDateTimeOffset.Add(SecondOffset) == FirstMillisecondDateTimeOffset.Add(SecondOffset)); + RunTest(c => c.NullableDateTimeOffset.Value.Add(FirstOffset) == NullableDateTimeOffset.Add(FirstOffset)); - RunWrongTest(c => c.DateTimeOffset.Add(FirstOffset)==FirstDateTimeOffset.Add(WrongOffset)); - RunWrongTest(c => c.MillisecondDateTimeOffset.Add(SecondOffset)==FirstMillisecondDateTimeOffset.Add(WrongOffset)); - RunWrongTest(c => c.NullableDateTimeOffset.Value.Add(FirstOffset)==NullableDateTimeOffset.Add(WrongOffset)); + RunWrongTest(c => c.DateTimeOffset.Add(FirstOffset) == FirstDateTimeOffset.Add(WrongOffset)); + RunWrongTest(c => c.MillisecondDateTimeOffset.Add(SecondOffset) == FirstMillisecondDateTimeOffset.Add(WrongOffset)); + RunWrongTest(c => c.NullableDateTimeOffset.Value.Add(FirstOffset) == NullableDateTimeOffset.Add(WrongOffset)); }); } @@ -122,13 +122,13 @@ public void AddTimeSpanTest() public void SubtractTimeSpanTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset.Subtract(FirstOffset)==FirstDateTimeOffset.Subtract(FirstOffset)); - RunTest(c => c.MillisecondDateTimeOffset.Subtract(SecondOffset)==FirstMillisecondDateTimeOffset.Subtract(SecondOffset)); - RunTest(c => c.NullableDateTimeOffset.Value.Subtract(FirstOffset)==NullableDateTimeOffset.Subtract(FirstOffset)); + RunTest(c => c.DateTimeOffset.Subtract(FirstOffset) == FirstDateTimeOffset.Subtract(FirstOffset)); + RunTest(c => c.MillisecondDateTimeOffset.Subtract(SecondOffset) == FirstMillisecondDateTimeOffset.Subtract(SecondOffset)); + RunTest(c => c.NullableDateTimeOffset.Value.Subtract(FirstOffset) == NullableDateTimeOffset.Subtract(FirstOffset)); - RunWrongTest(c => c.DateTimeOffset.Subtract(FirstOffset)==FirstDateTimeOffset.Subtract(WrongOffset)); - RunWrongTest(c => c.MillisecondDateTimeOffset.Subtract(SecondOffset)==FirstMillisecondDateTimeOffset.Subtract(WrongOffset)); - RunWrongTest(c => c.NullableDateTimeOffset.Value.Subtract(FirstOffset)==NullableDateTimeOffset.Subtract(WrongOffset)); + RunWrongTest(c => c.DateTimeOffset.Subtract(FirstOffset) == FirstDateTimeOffset.Subtract(WrongOffset)); + RunWrongTest(c => c.MillisecondDateTimeOffset.Subtract(SecondOffset) == FirstMillisecondDateTimeOffset.Subtract(WrongOffset)); + RunWrongTest(c => c.NullableDateTimeOffset.Value.Subtract(FirstOffset) == NullableDateTimeOffset.Subtract(WrongOffset)); }); } @@ -136,13 +136,27 @@ public void SubtractTimeSpanTest() public void SubtractDateTimeTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset.Subtract(SecondDateTime)==FirstDateTimeOffset.Subtract(SecondDateTime)); - RunTest(c => c.MillisecondDateTimeOffset.Subtract(SecondDateTime)==FirstMillisecondDateTimeOffset.Subtract(SecondDateTime)); - RunTest(c => c.NullableDateTimeOffset.Value.Subtract(SecondDateTime)==NullableDateTimeOffset.Subtract(SecondDateTime)); + RunTest(c => c.DateTimeOffset.Subtract(SecondDateTime) == FirstDateTimeOffset.Subtract(SecondDateTime)); + RunTest(c => c.MillisecondDateTimeOffset.Subtract(SecondDateTime) == FirstMillisecondDateTimeOffset.Subtract(SecondDateTime)); + RunTest(c => c.NullableDateTimeOffset.Value.Subtract(SecondDateTime) == NullableDateTimeOffset.Subtract(SecondDateTime)); - RunWrongTest(c => c.DateTimeOffset.Subtract(SecondDateTime)==FirstDateTimeOffset.Subtract(WrongDateTime)); - RunWrongTest(c => c.MillisecondDateTimeOffset.Subtract(SecondDateTime)==FirstMillisecondDateTimeOffset.Subtract(WrongDateTime)); - RunWrongTest(c => c.NullableDateTimeOffset.Value.Subtract(SecondDateTime)==NullableDateTimeOffset.Subtract(WrongDateTime)); + RunWrongTest(c => c.DateTimeOffset.Subtract(SecondDateTime) == FirstDateTimeOffset.Subtract(WrongDateTime)); + RunWrongTest(c => c.MillisecondDateTimeOffset.Subtract(SecondDateTime) == FirstMillisecondDateTimeOffset.Subtract(WrongDateTime)); + RunWrongTest(c => c.NullableDateTimeOffset.Value.Subtract(SecondDateTime) == NullableDateTimeOffset.Subtract(WrongDateTime)); + }); + } + + [Test] + public void SubstractDateTimeOffsetAndIntervalUsageTest() + { + ExecuteInsideSession(() => { + RunTest(c => c.DateTimeOffset.Subtract(SecondDateTimeOffset).TotalMilliseconds == FirstDateTimeOffset.Subtract(SecondDateTimeOffset).TotalMilliseconds); + RunTest(c => c.MillisecondDateTimeOffset.Subtract(FirstDateTimeOffset).TotalMilliseconds == FirstMillisecondDateTimeOffset.Subtract(FirstDateTimeOffset).TotalMilliseconds); + RunTest(c => c.NullableDateTimeOffset.Value.Subtract(SecondDateTimeOffset).TotalMilliseconds == NullableDateTimeOffset.Subtract(SecondDateTimeOffset).TotalMilliseconds); + + RunWrongTest(c => c.DateTimeOffset.Subtract(SecondDateTimeOffset).TotalMilliseconds == FirstDateTimeOffset.Subtract(WrongDateTimeOffset).TotalMilliseconds); + RunWrongTest(c => c.MillisecondDateTimeOffset.Subtract(SecondDateTimeOffset).TotalMilliseconds == FirstMillisecondDateTimeOffset.Subtract(WrongDateTimeOffset).TotalMilliseconds); + RunWrongTest(c => c.NullableDateTimeOffset.Value.Subtract(SecondDateTimeOffset).TotalMilliseconds == NullableDateTimeOffset.Subtract(WrongDateTimeOffset).TotalMilliseconds); }); } @@ -150,13 +164,13 @@ public void SubtractDateTimeTest() public void PlusTimeSpanTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset + FirstOffset==FirstDateTimeOffset + FirstOffset); - RunTest(c => c.MillisecondDateTimeOffset + SecondOffset==FirstMillisecondDateTimeOffset + SecondOffset); - RunTest(c => c.NullableDateTimeOffset + FirstOffset==NullableDateTimeOffset + FirstOffset); + RunTest(c => c.DateTimeOffset + FirstOffset == FirstDateTimeOffset + FirstOffset); + RunTest(c => c.MillisecondDateTimeOffset + SecondOffset == FirstMillisecondDateTimeOffset + SecondOffset); + RunTest(c => c.NullableDateTimeOffset + FirstOffset == NullableDateTimeOffset + FirstOffset); - RunWrongTest(c => c.DateTimeOffset + FirstOffset==FirstDateTimeOffset + WrongOffset); - RunWrongTest(c => c.MillisecondDateTimeOffset + SecondOffset==FirstMillisecondDateTimeOffset + WrongOffset); - RunWrongTest(c => c.NullableDateTimeOffset + FirstOffset==NullableDateTimeOffset + WrongOffset); + RunWrongTest(c => c.DateTimeOffset + FirstOffset == FirstDateTimeOffset + WrongOffset); + RunWrongTest(c => c.MillisecondDateTimeOffset + SecondOffset == FirstMillisecondDateTimeOffset + WrongOffset); + RunWrongTest(c => c.NullableDateTimeOffset + FirstOffset == NullableDateTimeOffset + WrongOffset); }); } @@ -164,13 +178,13 @@ public void PlusTimeSpanTest() public void MinusTimeSpanTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset - FirstOffset==FirstDateTimeOffset - FirstOffset); - RunTest(c => c.MillisecondDateTimeOffset - SecondOffset==FirstMillisecondDateTimeOffset - SecondOffset); - RunTest(c => c.NullableDateTimeOffset - FirstOffset==NullableDateTimeOffset - FirstOffset); + RunTest(c => c.DateTimeOffset - FirstOffset == FirstDateTimeOffset - FirstOffset); + RunTest(c => c.MillisecondDateTimeOffset - SecondOffset == FirstMillisecondDateTimeOffset - SecondOffset); + RunTest(c => c.NullableDateTimeOffset - FirstOffset == NullableDateTimeOffset - FirstOffset); - RunWrongTest(c => c.DateTimeOffset - FirstOffset==FirstDateTimeOffset - WrongOffset); - RunWrongTest(c => c.MillisecondDateTimeOffset - SecondOffset==FirstMillisecondDateTimeOffset - WrongOffset); - RunWrongTest(c => c.NullableDateTimeOffset - FirstOffset==NullableDateTimeOffset - WrongOffset); + RunWrongTest(c => c.DateTimeOffset - FirstOffset == FirstDateTimeOffset - WrongOffset); + RunWrongTest(c => c.MillisecondDateTimeOffset - SecondOffset == FirstMillisecondDateTimeOffset - WrongOffset); + RunWrongTest(c => c.NullableDateTimeOffset - FirstOffset == NullableDateTimeOffset - WrongOffset); }); } @@ -178,13 +192,27 @@ public void MinusTimeSpanTest() public void MinusDateTimeTest() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset - SecondDateTime==FirstDateTimeOffset - SecondDateTime); - RunTest(c => c.MillisecondDateTimeOffset - SecondDateTime==FirstMillisecondDateTimeOffset - SecondDateTime); - RunTest(c => c.NullableDateTimeOffset - SecondDateTime==NullableDateTimeOffset - SecondDateTime); + RunTest(c => c.DateTimeOffset - SecondDateTime == FirstDateTimeOffset - SecondDateTime); + RunTest(c => c.MillisecondDateTimeOffset - SecondDateTime == FirstMillisecondDateTimeOffset - SecondDateTime); + RunTest(c => c.NullableDateTimeOffset - SecondDateTime == NullableDateTimeOffset - SecondDateTime); + + RunWrongTest(c => c.DateTimeOffset - SecondDateTime == FirstDateTimeOffset - WrongDateTime); + RunWrongTest(c => c.MillisecondDateTimeOffset - SecondDateTime == FirstMillisecondDateTimeOffset - WrongDateTime); + RunWrongTest(c => c.NullableDateTimeOffset - SecondDateTime == NullableDateTimeOffset - WrongDateTime); + }); + } + + [Test] + public void MinusDateTimeOffsetAndIntervalUsageTest() + { + ExecuteInsideSession(() => { + RunTest(c => (c.DateTimeOffset - SecondDateTimeOffset).TotalMilliseconds == (FirstDateTimeOffset - SecondDateTimeOffset).TotalMilliseconds); + RunTest(c => (c.MillisecondDateTimeOffset - FirstDateTimeOffset).TotalMilliseconds == (FirstMillisecondDateTimeOffset - FirstDateTimeOffset).TotalMilliseconds); + RunTest(c => (c.NullableDateTimeOffset.Value - SecondDateTimeOffset).TotalMilliseconds == (NullableDateTimeOffset - SecondDateTimeOffset).TotalMilliseconds); - RunWrongTest(c => c.DateTimeOffset - SecondDateTime==FirstDateTimeOffset - WrongDateTime); - RunWrongTest(c => c.MillisecondDateTimeOffset - SecondDateTime==FirstMillisecondDateTimeOffset - WrongDateTime); - RunWrongTest(c => c.NullableDateTimeOffset - SecondDateTime==NullableDateTimeOffset - WrongDateTime); + RunWrongTest(c => (c.DateTimeOffset - SecondDateTimeOffset).TotalMilliseconds == (FirstDateTimeOffset - WrongDateTimeOffset).TotalMilliseconds); + RunWrongTest(c => (c.MillisecondDateTimeOffset - SecondDateTimeOffset).TotalMilliseconds == (FirstMillisecondDateTimeOffset - WrongDateTimeOffset).TotalMilliseconds); + RunWrongTest(c => (c.NullableDateTimeOffset.Value - SecondDateTimeOffset).TotalMilliseconds == (NullableDateTimeOffset - WrongDateTimeOffset).TotalMilliseconds); }); } @@ -192,9 +220,9 @@ public void MinusDateTimeTest() public void ToUniversalTime() { ExecuteInsideSession(() => { - RunTest(c => c.DateTimeOffset.ToUniversalTime()==FirstDateTimeOffset.ToUniversalTime()); - RunTest(c => c.MillisecondDateTimeOffset.ToUniversalTime()==FirstMillisecondDateTimeOffset.ToUniversalTime()); - RunTest(c => c.NullableDateTimeOffset.Value.ToUniversalTime()==NullableDateTimeOffset.ToUniversalTime()); + RunTest(c => c.DateTimeOffset.ToUniversalTime() == FirstDateTimeOffset.ToUniversalTime()); + RunTest(c => c.MillisecondDateTimeOffset.ToUniversalTime() == FirstMillisecondDateTimeOffset.ToUniversalTime()); + RunTest(c => c.NullableDateTimeOffset.Value.ToUniversalTime() == NullableDateTimeOffset.ToUniversalTime()); }); } } From f8e7629d73cced33dd260089107922d22b8cfcdc Mon Sep 17 00:00:00 2001 From: Alexey Kulakov Date: Mon, 9 Nov 2020 19:09:51 +0500 Subject: [PATCH 2/2] Declares DateTimeOffset operations as arithmetic expressions --- Orm/Xtensive.Orm/Sql/Internals/SqlValidator.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Orm/Xtensive.Orm/Sql/Internals/SqlValidator.cs b/Orm/Xtensive.Orm/Sql/Internals/SqlValidator.cs index c42811e37d..4f4085cef3 100644 --- a/Orm/Xtensive.Orm/Sql/Internals/SqlValidator.cs +++ b/Orm/Xtensive.Orm/Sql/Internals/SqlValidator.cs @@ -1,6 +1,6 @@ -// Copyright (C) 2003-2010 Xtensive LLC. -// All rights reserved. -// For conditions of distribution and use, see license. +// Copyright (C) 2009-2010 Xtensive LLC. +// This code is distributed under MIT license terms. +// See the License.txt file in the project root for more information. using System; using System.Collections.Generic; @@ -112,8 +112,10 @@ public static bool IsBooleanExpression(SqlExpression node) public static bool IsArithmeticExpression(SqlExpression node) { - if (node==null) + if (node==null) { return true; + } + switch (node.NodeType) { case SqlNodeType.Add: case SqlNodeType.Avg: @@ -148,6 +150,9 @@ public static bool IsArithmeticExpression(SqlExpression node) case SqlNodeType.DateTimeMinusInterval: case SqlNodeType.DateTimePlusInterval: case SqlNodeType.DateTimeMinusDateTime: + case SqlNodeType.DateTimeOffsetMinusInterval: + case SqlNodeType.DateTimeOffsetPlusInterval: + case SqlNodeType.DateTimeOffsetMinusDateTimeOffset: return true; case SqlNodeType.Variant: var variant = (SqlVariant) node;