Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions src/core/Akka.Cluster.Tests/VectorClockSpec.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,28 @@ public void A_VectorClock_must_not_happen_before_itself()
(clock1 != clock2).Should().BeFalse();
}

[Fact]
public void A_VectorClock_must_handle_null_equality_correctly()
{
VectorClock nullClock = null;
var clock = VectorClock.Create();

// null == null should be true
(nullClock == null).Should().BeTrue();
(null == nullClock).Should().BeTrue();

// null != null should be false
(nullClock != null).Should().BeFalse();

// clock == null and null == clock should be false
(clock == null).Should().BeFalse();
(null == clock).Should().BeFalse();

// clock != null and null != clock should be true
(clock != null).Should().BeTrue();
(null != clock).Should().BeTrue();
}

[Fact]
public void A_VectorClock_must_pass_misc_comparison_test1()
{
Expand Down Expand Up @@ -60,6 +82,7 @@ public void A_VectorClock_must_pass_misc_comparison_test2()
var clock5_2 = clock4_2.Increment(VectorClock.Node.Create("3"));

(clock4_1 < clock5_2).Should().BeTrue();
(clock4_1 != clock5_2).Should().BeTrue("before relationship means not equal");
}

[Fact]
Expand Down Expand Up @@ -106,6 +129,8 @@ public void A_VectorClock_must_pass_misc_comparison_test5()

(clock3_1 < clock5_2).Should().BeTrue();
(clock5_2 > clock3_1).Should().BeTrue();
(clock3_1 != clock5_2).Should().BeTrue("before relationship means not equal");
(clock5_2 != clock3_1).Should().BeTrue("after relationship means not equal");
}

[Fact]
Expand Down
9 changes: 4 additions & 5 deletions src/core/Akka.Cluster/VectorClock.cs
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,9 @@ public bool IsSameAs(VectorClock that)
/// <returns><c>true</c> if both vector clocks are equal; otherwise <c>false</c></returns>
public static bool operator ==(VectorClock left, VectorClock right)
{
if (ReferenceEquals(left, null))
if (ReferenceEquals(left, right))
return true;
if (ReferenceEquals(left, null) || ReferenceEquals(right, null))
return false;

return left.IsSameAs(right);
Expand All @@ -336,10 +338,7 @@ public bool IsSameAs(VectorClock that)
/// <returns><c>true</c> if both vector clocks are not equal; otherwise <c>false</c></returns>
public static bool operator !=(VectorClock left, VectorClock right)
{
if (ReferenceEquals(left, null))
return false;

return left.IsConcurrentWith(right);
return !(left == right);
}

private static readonly (Node, long) CmpEndMarker = (Node.Create("endmarker"), Timestamp.EndMarker);
Expand Down
Loading