Skip to content

Commit ff7c10c

Browse files
committed
Add tests for TimeOnly(ticks) ctor
1 parent da68a4f commit ff7c10c

2 files changed

Lines changed: 158 additions & 8 deletions

File tree

Orm/Xtensive.Orm.Tests/Linq/DateTimeAndDateTimeOffset/Model.cs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
// Created: 2016.08.01
66

77
using System;
8-
using System.Net.Sockets;
9-
using Org.BouncyCastle.Crypto.Digests;
108

119
namespace Xtensive.Orm.Tests.Linq.DateTimeAndDateTimeOffset.Model
1210
{
@@ -194,7 +192,12 @@ public class AllPossiblePartsEntity : Entity
194192
public int Microsecond { get; set; }
195193

196194
[Field]
197-
public long Ticks { get; set; }
195+
public long DateTimeTicks { get; set; }
196+
#if NET6_0_OR_GREATER
197+
198+
[Field]
199+
public long TimeOnlyTicks { get; set; }
200+
#endif
198201

199202
[Field]
200203
[Validation.RangeConstraint(Min = -23, Max = 23)]
@@ -204,6 +207,9 @@ public class AllPossiblePartsEntity : Entity
204207
[Validation.RangeConstraint(Min = 0, Max = 59)]
205208
public int OffsetMinute { get; set; }
206209

210+
[Field]
211+
public TimeSpan TimeSpan { get; set; }
212+
207213
public static AllPossiblePartsEntity FromDateTime(Session session, DateTime dateTime, int microsecond)
208214
{
209215
return new AllPossiblePartsEntity(session) {
@@ -217,7 +223,11 @@ public static AllPossiblePartsEntity FromDateTime(Session session, DateTime date
217223
Microsecond = microsecond,
218224
OffsetHour = 0,
219225
OffsetMinute = 0,
220-
Ticks = dateTime.Ticks
226+
DateTimeTicks = dateTime.Ticks,
227+
#if NET6_0_OR_GREATER
228+
TimeOnlyTicks = TimeOnly.FromDateTime(dateTime).Ticks,
229+
TimeSpan = TimeOnly.FromDateTime(dateTime).ToTimeSpan(),
230+
#endif
221231
};
222232
}
223233

@@ -234,7 +244,11 @@ public static AllPossiblePartsEntity FromDateTimeOffset(Session session, DateTim
234244
Microsecond = microsecond,
235245
OffsetHour = dateTimeOffset.Offset.Hours,
236246
OffsetMinute = dateTimeOffset.Offset.Minutes,
237-
Ticks = dateTimeOffset.Ticks
247+
DateTimeTicks = dateTimeOffset.Ticks,
248+
#if NET6_0_OR_GREATER
249+
TimeOnlyTicks = TimeOnly.FromDateTime(dateTimeOffset.DateTime).Ticks,
250+
TimeSpan = TimeOnly.FromDateTime(dateTimeOffset.DateTime).ToTimeSpan(),
251+
#endif
238252
};
239253
}
240254

@@ -288,7 +302,7 @@ public class TimeOnlyEntity : Entity
288302
public TimeOnly? NullableTimeOnly { get; set; }
289303

290304
public TimeOnlyEntity(Session session)
291-
:base(session)
305+
: base(session)
292306
{
293307
}
294308
}

Orm/Xtensive.Orm.Tests/Linq/DateTimeAndDateTimeOffset/TimeOnly/ConstructorTest.cs

Lines changed: 138 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public void CtorHMSM()
2222
.Select(e => new {
2323
Entity = e,
2424
ConstructedTime = new TimeOnly(e.Hour, e.Minute, e.Second, e.Millisecond) })
25-
.Where(a => a.ConstructedTime == FirstMillisecondTimeOnly).OrderBy(a => a.Entity.Id).ToList(3);
25+
.Where(a => a.ConstructedTime == FirstMillisecondTimeOnly)
26+
.OrderBy(a => a.Entity.Id).ToList(3);
2627
Assert.That(result.Count, Is.EqualTo(1));
2728
});
2829
}
@@ -36,7 +37,8 @@ public void CtorHMS()
3637
Entity = e,
3738
ConstructedTime = new TimeOnly(e.Hour, e.Minute, e.Second)
3839
})
39-
.Where(a => a.ConstructedTime == FirstTimeOnly).OrderBy(a => a.Entity.Id).ToList(3);
40+
.Where(a => a.ConstructedTime == FirstTimeOnly)
41+
.OrderBy(a => a.Entity.Id).ToList(3);
4042
Assert.That(result.Count, Is.EqualTo(1));
4143
});
4244
}
@@ -52,6 +54,140 @@ public void CtorHM()
5254
Assert.That(result.Count, Is.EqualTo(1));
5355
});
5456
}
57+
58+
[Test]
59+
public void CtorTicksLiteralValue()
60+
{
61+
var ticksPerHour = new TimeOnly(1, 0).Ticks;
62+
var ticksPerMinute = new TimeOnly(0, 1).Ticks;
63+
var ticksPerSecond = new TimeOnly(0, 0, 1).Ticks;
64+
var testTicks = ticksPerHour * FirstTimeOnly.Hour +
65+
ticksPerMinute * FirstTimeOnly.Minute +
66+
ticksPerSecond * FirstTimeOnly.Second;
67+
68+
ExecuteInsideSession((s) => {
69+
var result = s.Query.All<AllPossiblePartsEntity>()
70+
.Select(e => new { Entity = e, ConstructedTime = new TimeOnly(testTicks) })
71+
.Where(a => a.ConstructedTime == FirstTimeOnly)
72+
.OrderBy(a => a.Entity.Id).ToList(3);
73+
Assert.That(result.Count, Is.EqualTo(1));
74+
});
75+
}
76+
77+
[Test]
78+
public void CtorTicksLiteralExpressions()
79+
{
80+
var ticksPerHour = new TimeOnly(1, 0).Ticks;
81+
var ticksPerMinute = new TimeOnly(0, 1).Ticks;
82+
var ticksPerSecond = new TimeOnly(0, 0, 1).Ticks;
83+
var testTicks = ticksPerHour * FirstTimeOnly.Hour +
84+
ticksPerMinute * FirstTimeOnly.Minute +
85+
ticksPerSecond * FirstTimeOnly.Second;
86+
87+
ExecuteInsideSession((s) => {
88+
var result = s.Query.All<AllPossiblePartsEntity>()
89+
.Select(e => new { Entity = e, ConstructedTime = new TimeOnly(testTicks + 1000 - 1000) })
90+
.Where(a => a.ConstructedTime == FirstTimeOnly)
91+
.OrderBy(a => a.Entity.Id).ToList(3);
92+
Assert.That(result.Count, Is.EqualTo(1));
93+
});
94+
}
95+
96+
[Test]
97+
public void CtorTicksFromIntervalTicks()
98+
{
99+
Require.ProviderIsNot(StorageProvider.MySql);
100+
101+
ExecuteInsideSession((s) => {
102+
var result = s.Query.All<AllPossiblePartsEntity>()
103+
.Select(e => new { Entity = e, ConstructedTime = new TimeOnly(e.TimeSpan.Ticks) })
104+
.Where(a => a.ConstructedTime == FirstMillisecondTimeOnly)
105+
.OrderBy(a => a.Entity.Id).ToList(3);
106+
Assert.That(result.Count, Is.EqualTo(1));
107+
});
108+
}
109+
110+
[Test]
111+
public void MysqlCtorTicksFromIntervalTicks()
112+
{
113+
Require.ProviderIs(StorageProvider.MySql);
114+
115+
if (StorageProviderInfo.Instance.Info.StorageVersion <= StorageProviderVersion.MySql55) {
116+
ExecuteInsideSession((s) => {
117+
var result = s.Query.All<AllPossiblePartsEntity>()
118+
.Select(e => new { Entity = e, ConstructedTime = new TimeOnly(e.TimeSpan.Ticks) })
119+
.Where(a => a.ConstructedTime == FirstTimeOnly)
120+
.OrderBy(a => a.Entity.Id).ToList(3);
121+
Assert.That(result.Count, Is.EqualTo(1));
122+
});
123+
}
124+
else {
125+
ExecuteInsideSession((s) => {
126+
var result = s.Query.All<AllPossiblePartsEntity>()
127+
.Select(e => new { Entity = e, ConstructedTime = new TimeOnly(e.TimeSpan.Ticks) })
128+
.Where(a => a.ConstructedTime == FirstMillisecondTimeOnly)
129+
.OrderBy(a => a.Entity.Id).ToList(3);
130+
Assert.That(result.Count, Is.EqualTo(1));
131+
});
132+
}
133+
}
134+
135+
[Test]
136+
public void TicksFromColumnsBasedExpression()
137+
{
138+
var ticksPerHour = new TimeOnly(1, 0).Ticks;
139+
var ticksPerMinute = new TimeOnly(0, 1).Ticks;
140+
var ticksPerSecond = new TimeOnly(0, 0, 1).Ticks;
141+
var testTicks = ticksPerHour * FirstTimeOnly.Hour +
142+
ticksPerMinute * FirstTimeOnly.Minute +
143+
ticksPerSecond * FirstTimeOnly.Second;
144+
145+
Assert.That(new TimeOnly(testTicks).Ticks, Is.EqualTo(testTicks));
146+
Assert.That(new TimeOnly(testTicks), Is.EqualTo(FirstTimeOnly));
147+
148+
ExecuteInsideSession((s) => {
149+
var result = s.Query.All<AllPossiblePartsEntity>()
150+
.Select(e => new {
151+
Entity = e,
152+
ConstructedTime = new TimeOnly(e.Hour * ticksPerHour + e.Minute * ticksPerMinute + e.Second * ticksPerSecond)
153+
})
154+
.Where(a => a.ConstructedTime == FirstTimeOnly)
155+
.OrderBy(a => a.Entity.Id).ToList(3);
156+
Assert.That(result.Count, Is.EqualTo(1));
157+
});
158+
}
159+
160+
[Test]
161+
public void TicksFromColumnsBasedExpressionMilliseconds()
162+
{
163+
if (StorageProviderInfo.Instance.CheckProviderIs(StorageProvider.MySql)) {
164+
Require.ProviderVersionAtLeast(StorageProviderVersion.MySql56);
165+
}
166+
167+
var ticksPerHour = new TimeOnly(1, 0).Ticks;
168+
var ticksPerMinute = new TimeOnly(0, 1).Ticks;
169+
var ticksPerSecond = new TimeOnly(0, 0, 1).Ticks;
170+
var ticksPerMillisecond = new TimeOnly(0,0,0,1).Ticks;
171+
var testTicks = ticksPerHour * FirstMillisecondTimeOnly.Hour +
172+
ticksPerMinute * FirstMillisecondTimeOnly.Minute +
173+
ticksPerSecond * FirstMillisecondTimeOnly.Second +
174+
ticksPerMillisecond * FirstMillisecondTimeOnly.Millisecond;
175+
176+
Assert.That(new TimeOnly(testTicks).Ticks, Is.EqualTo(testTicks));
177+
Assert.That(new TimeOnly(testTicks), Is.EqualTo(FirstMillisecondTimeOnly));
178+
179+
ExecuteInsideSession((s) => {
180+
var result = s.Query.All<AllPossiblePartsEntity>()
181+
.Select(e => new {
182+
Entity = e,
183+
ConstructedTime = new TimeOnly(
184+
e.Hour * ticksPerHour + e.Minute * ticksPerMinute + e.Second * ticksPerSecond + e.Millisecond * ticksPerMillisecond)
185+
})
186+
.Where(a => a.ConstructedTime == FirstMillisecondTimeOnly)
187+
.OrderBy(a => a.Entity.Id).ToList(3);
188+
Assert.That(result.Count, Is.EqualTo(1));
189+
});
190+
}
55191
}
56192
}
57193
#endif

0 commit comments

Comments
 (0)