Skip to content

Commit

Permalink
Added equality/comparison overloads for Duration and TimeSpan (#171)
Browse files Browse the repository at this point in the history
* Added equality overloads for Duration and TimeSpan
  • Loading branch information
eriove authored and angularsen committed Jun 28, 2016
1 parent 8370a1b commit d9b388c
Show file tree
Hide file tree
Showing 2 changed files with 157 additions and 1 deletion.
98 changes: 97 additions & 1 deletion UnitsNet.Tests/CustomCode/DurationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public static void ToTimeSpanShouldNotThrowExceptionOnValuesSlightlyLargerThanTi
{
Duration duration = Duration.FromSeconds(TimeSpan.MinValue.TotalSeconds + 1);
TimeSpan timeSpan = duration.ToTimeSpan();
Assert.AreEqual(duration.Seconds, timeSpan.TotalSeconds,1e-3);
Assert.AreEqual(duration.Seconds, timeSpan.TotalSeconds, 1e-3);
}

[Test]
Expand Down Expand Up @@ -111,5 +111,101 @@ public static void DateTimeMinusDurationReturnsDateTime()
DateTime expected = new DateTime(2016, 1, 1);
Assert.AreEqual(expected, result);
}

[Test]
public static void TimeSpanLessThanDurationShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(10);
Duration duration = Duration.FromHours(11);
Assert.IsTrue(timeSpan < duration, "timeSpan should be less than duration");
}

[Test]
public static void TimeSpanGreaterThanDurationShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(12);
Duration duration = Duration.FromHours(11);
Assert.IsTrue(timeSpan > duration, "timeSpan should be greater than duration");
}

[Test]
public static void DurationLessThanTimeSpanShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(11);
Duration duration = Duration.FromHours(10);
Assert.IsTrue(duration < timeSpan, "duration should be less than timeSpan");
}

[Test]
public static void DurationGreaterThanTimeSpanShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(11);
Duration duration = Duration.FromHours(12);
Assert.IsTrue(duration > timeSpan, "duration should be greater than timeSpan");
}

[Test]
public static void TimeSpanLessOrEqualThanDurationShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(10);
Duration duration = Duration.FromHours(11);
Assert.IsTrue(timeSpan <= duration, "timeSpan should be less than duration");
}

[Test]
public static void TimeSpanGreaterThanOrEqualDurationShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(12);
Duration duration = Duration.FromHours(11);
Assert.IsTrue(timeSpan >= duration, "timeSpan should be greater than duration");
}

[Test]
public static void DurationLessThanOrEqualTimeSpanShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(11);
Duration duration = Duration.FromHours(10);
Assert.IsTrue(duration <= timeSpan, "duration should be less than timeSpan");
}

[Test]
public static void DurationGreaterThanOrEqualTimeSpanShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(11);
Duration duration = Duration.FromHours(12);
Assert.IsTrue(duration >= timeSpan, "duration should be greater than timeSpan");
}

[Test]
public static void DurationEqualToTimeSpanShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(11);
Duration duration = Duration.FromHours(11);
Assert.IsTrue(duration == timeSpan, "duration should be equal to timeSpan");
}

[Test]
public static void TimeSpanEqualToDurationShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(11);
Duration duration = Duration.FromHours(11);
Assert.IsTrue(timeSpan == duration, "timeSpan should be equal to duration");
}

[Test]
public static void DurationNotEqualToTimeSpanShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(12);
Duration duration = Duration.FromHours(11);
Assert.IsTrue(duration != timeSpan, "duration should not be equal to timeSpan");
}

[Test]
public static void TimeSpanNotEqualToDurationShouldReturnCorrectly()
{
TimeSpan timeSpan = TimeSpan.FromHours(12);
Duration duration = Duration.FromHours(11);
Assert.IsTrue(timeSpan != duration, "timeSpan should not be equal to duration");
}
}
}
60 changes: 60 additions & 0 deletions UnitsNet/CustomCode/UnitClasses/Duration.extra.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,66 @@ public static explicit operator Duration(TimeSpan duration)
{
return FromSeconds(duration.TotalSeconds);
}

public static bool operator <(Duration duration, TimeSpan timeSpan)
{
return duration.Seconds < timeSpan.TotalSeconds;
}

public static bool operator >(Duration duration, TimeSpan timeSpan)
{
return duration.Seconds > timeSpan.TotalSeconds;
}

public static bool operator <=(Duration duration, TimeSpan timeSpan)
{
return duration.Seconds <= timeSpan.TotalSeconds;
}

public static bool operator >=(Duration duration, TimeSpan timeSpan)
{
return duration.Seconds >= timeSpan.TotalSeconds;
}

public static bool operator ==(Duration duration, TimeSpan timeSpan)
{
return duration.Seconds == timeSpan.TotalSeconds;
}

public static bool operator !=(Duration duration, TimeSpan timeSpan)
{
return duration.Seconds != timeSpan.TotalSeconds;
}

public static bool operator <(TimeSpan timeSpan, Duration duration)
{
return timeSpan.TotalSeconds < duration.Seconds;
}

public static bool operator >(TimeSpan timeSpan, Duration duration)
{
return timeSpan.TotalSeconds > duration.Seconds;
}

public static bool operator <=(TimeSpan timeSpan, Duration duration)
{
return timeSpan.TotalSeconds <= duration.Seconds;
}

public static bool operator >=(TimeSpan timeSpan, Duration duration)
{
return timeSpan.TotalSeconds >= duration.Seconds;
}

public static bool operator ==(TimeSpan timeSpan, Duration duration)
{
return timeSpan.TotalSeconds == duration.Seconds;
}

public static bool operator !=(TimeSpan timeSpan, Duration duration)
{
return timeSpan.TotalSeconds != duration.Seconds;
}
#endif

/// <summary>
Expand Down

2 comments on commit d9b388c

@angularsen
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TeamCity Units.NET :: Master Build 48 is now running

@angularsen
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TeamCity Units.NET :: Master Build 48 outcome was SUCCESS
Summary: Tests passed: 815 Build time: 0:0:36

Please sign in to comment.