Skip to content

Commit 113547b

Browse files
TimeSpan in C#: retarget net10.0, MSTest 4.4.0, readable constructor values, four new tests
1 parent e413527 commit 113547b

4 files changed

Lines changed: 68 additions & 21 deletions

File tree

‎dotnet-datetime/TimeSpanInCSharp/TimeSpanInCSharp/TimeSpanInCSharp.csproj‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net10.0</TargetFramework>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
88
</PropertyGroup>
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net7.0</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
77

88
<IsPackable>false</IsPackable>
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
13-
<PackageReference Include="MSTest.TestAdapter" Version="2.2.10" />
14-
<PackageReference Include="MSTest.TestFramework" Version="2.2.10" />
15-
<PackageReference Include="coverlet.collector" Version="3.1.2" />
12+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.10.1" />
13+
<PackageReference Include="MSTest.TestAdapter" Version="4.4.0" />
14+
<PackageReference Include="MSTest.TestFramework" Version="4.4.0" />
15+
<PackageReference Include="coverlet.collector" Version="10.0.1" />
1616
</ItemGroup>
1717

1818
</Project>

‎dotnet-datetime/TimeSpanInCSharp/TimeSpanInCSharpTests/TimeSpanUnitTests.cs‎

Lines changed: 60 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ public void GivenTwoTimeSpanValues_WhenCompareToOperationExecuted_VerifyAccurate
5050
[TestMethod]
5151
public void GivenTwoTimeSpanValues_WhenDivideOperationExecuted_VerifyAccurateResult()
5252
{
53-
var firstTimeSpan = new TimeSpan(2, 60, 3600);
54-
var secondTimeSpan = new TimeSpan(1, 30, 1800);
53+
var firstTimeSpan = new TimeSpan(4, 0, 0);
54+
var secondTimeSpan = new TimeSpan(2, 0, 0);
5555

5656
var expected = firstTimeSpan.Divide(secondTimeSpan);
5757
var actual = firstTimeSpan / secondTimeSpan;
@@ -64,8 +64,8 @@ public void GivenTwoTimeSpanValues_WhenDivideOperationExecuted_VerifyAccurateRes
6464
[TestMethod]
6565
public void GivenATimeSpan_WhenDividedByDivisor_VerifyAccurateResult()
6666
{
67-
var firstTimeSpan = new TimeSpan(2, 60, 3600);
68-
var secondTimeSpan = new TimeSpan(1, 30, 1800);
67+
var firstTimeSpan = new TimeSpan(4, 0, 0);
68+
var secondTimeSpan = new TimeSpan(2, 0, 0);
6969

7070
var divisionByMethod = firstTimeSpan.Divide(2);
7171
var divisionByOperator = firstTimeSpan / 2;
@@ -95,8 +95,8 @@ public void GivenTwoTimeSpanValues_WhenEqualityOperationApplied_VerifyAccurateRe
9595
[TestMethod]
9696
public void GivenATimeSpanAndFactor_WhenMultiplied_VerifyAccurateResult()
9797
{
98-
var expected = new TimeSpan(2, 60, 3600);
99-
var firstTimeSpan = new TimeSpan(1, 30, 1800);
98+
var expected = new TimeSpan(4, 0, 0);
99+
var firstTimeSpan = new TimeSpan(2, 0, 0);
100100
var factor = 2;
101101

102102
var multiplyMethod = firstTimeSpan.Multiply(factor);
@@ -112,9 +112,9 @@ public void GivenATimeSpanAndFactor_WhenMultiplied_VerifyAccurateResult()
112112
[TestMethod]
113113
public void GivenTwoTimeSpans_WhenSubtractOperationApplied_VerifyAccurateResult()
114114
{
115-
var firstTimeSpan = new TimeSpan(2, 60, 3600);
116-
var secondTimeSpan = new TimeSpan(1, 30, 1800);
117-
var expected = new TimeSpan(1, 30, 1800);
115+
var firstTimeSpan = new TimeSpan(4, 0, 0);
116+
var secondTimeSpan = new TimeSpan(2, 0, 0);
117+
var expected = new TimeSpan(2, 0, 0);
118118

119119
var subtractMethod = firstTimeSpan.Subtract(secondTimeSpan);
120120
var subtractOperator = firstTimeSpan - secondTimeSpan;
@@ -141,12 +141,12 @@ public void GivenATimeSpan_WhenConvertedToString_VerifyAccurateResult()
141141
[TestMethod]
142142
public void GivenATimeSpan_WhenConvertedToDuration_VerifyAccurateResult()
143143
{
144-
var firstTimeSpan = new TimeSpan(2, 60, 3600);
144+
var firstTimeSpan = new TimeSpan(4, 0, 0);
145145

146146
var actual = firstTimeSpan.Duration();
147-
var expected = new TimeSpan(04, 00, 00);
147+
var expected = new TimeSpan(4, 0, 0);
148148

149-
Assert.AreEqual(actual, expected);
149+
Assert.AreEqual(expected, actual);
150150
Assert.IsInstanceOfType(actual, typeof(TimeSpan));
151151
}
152152

@@ -159,7 +159,7 @@ public void GivenATimeSpan_WhenNegated_VerifyAccurateResult()
159159
var negateMethod = firstTimeSpan.Negate();
160160
var negateOperator = -(firstTimeSpan);
161161

162-
Assert.AreEqual(negateMethod, expected);
162+
Assert.AreEqual(expected, negateMethod);
163163
Assert.AreEqual(negateMethod, negateOperator);
164164
Assert.IsInstanceOfType(negateMethod, typeof(TimeSpan));
165165
}
@@ -189,5 +189,51 @@ public void GivenNumberOfHours_WhenFromHoursInvoked_VerifyAccurateResult()
189189
Assert.AreEqual(expected, actual);
190190
Assert.AreEqual(hours, totalHours);
191191
}
192+
193+
[TestMethod]
194+
public void GivenATimeSpan_WhenFormattedWithSpecifiers_VerifyAccurateResult()
195+
{
196+
var interval = new TimeSpan(1, 2, 3, 4, 5);
197+
198+
Assert.AreEqual("1.02:03:04.0050000", interval.ToString("c", CultureInfo.InvariantCulture));
199+
Assert.AreEqual("1:2:03:04.005", interval.ToString("g", CultureInfo.InvariantCulture));
200+
Assert.AreEqual("02:03", interval.ToString(@"hh\:mm", CultureInfo.InvariantCulture));
201+
Assert.ThrowsExactly<FormatException>(() => interval.ToString("hh:mm", CultureInfo.InvariantCulture));
202+
}
203+
204+
[TestMethod]
205+
public void GivenStrings_WhenTryParseInvoked_VerifyAccurateResult()
206+
{
207+
Assert.IsFalse(TimeSpan.TryParse("24:00", out var failed));
208+
Assert.AreEqual(TimeSpan.Zero, failed);
209+
210+
Assert.IsTrue(TimeSpan.TryParse("23:00", out var parsed));
211+
Assert.AreEqual(new TimeSpan(23, 0, 0), parsed);
212+
213+
Assert.IsTrue(TimeSpan.TryParse("6", out var days));
214+
Assert.AreEqual(TimeSpan.FromDays(6), days);
215+
}
216+
217+
[TestMethod]
218+
public void GivenTheNamedValues_WhenInspected_VerifyRangeBehavior()
219+
{
220+
Assert.AreEqual("10675199.02:48:05.4775807", TimeSpan.MaxValue.ToString());
221+
Assert.AreEqual(long.MaxValue, TimeSpan.MaxValue.Ticks);
222+
Assert.AreEqual(long.MinValue, TimeSpan.MinValue.Ticks);
223+
224+
Assert.ThrowsExactly<OverflowException>(() => TimeSpan.MinValue.Negate());
225+
Assert.AreEqual(TimeSpan.FromMilliseconds(-1), Timeout.InfiniteTimeSpan);
226+
}
227+
228+
[TestMethod]
229+
public void GivenSecondsAndMilliseconds_WhenIntegerOverloadUsed_VerifyNoPrecisionLoss()
230+
{
231+
var fromDouble = TimeSpan.FromSeconds(101.832);
232+
var fromIntegers = TimeSpan.FromSeconds(seconds: 101, milliseconds: 832);
233+
234+
Assert.AreEqual(1018319999L, fromDouble.Ticks);
235+
Assert.AreEqual(1018320000L, fromIntegers.Ticks);
236+
Assert.AreNotEqual(fromDouble, fromIntegers);
237+
}
192238
}
193-
}
239+
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
global using Microsoft.VisualStudio.TestTools.UnitTesting;
1+
global using System.Globalization;
2+
global using Microsoft.VisualStudio.TestTools.UnitTesting;

0 commit comments

Comments
 (0)