58 lines
1.5 KiB
C#
58 lines
1.5 KiB
C#
using Xunit;
|
|
|
|
namespace StellaOps.HybridLogicalClock.Tests;
|
|
|
|
public partial class HlcTimestampTests
|
|
{
|
|
[Fact]
|
|
public void CompareTo_SamePhysicalTimeAndCounter_SortsLexicographicallyByNodeId()
|
|
{
|
|
var nodeA = new HlcTimestamp
|
|
{
|
|
PhysicalTime = BasePhysicalTime,
|
|
NodeId = "node-a",
|
|
LogicalCounter = 0
|
|
};
|
|
var nodeB = new HlcTimestamp
|
|
{
|
|
PhysicalTime = BasePhysicalTime,
|
|
NodeId = "node-b",
|
|
LogicalCounter = 0
|
|
};
|
|
|
|
Assert.True(nodeA.CompareTo(nodeB) < 0);
|
|
Assert.True(nodeB.CompareTo(nodeA) > 0);
|
|
}
|
|
|
|
[Fact]
|
|
public void CompareTo_IdenticalTimestamps_ReturnsZero()
|
|
{
|
|
var ts1 = new HlcTimestamp
|
|
{
|
|
PhysicalTime = BasePhysicalTime,
|
|
NodeId = TestNodeId,
|
|
LogicalCounter = 42
|
|
};
|
|
var ts2 = new HlcTimestamp
|
|
{
|
|
PhysicalTime = BasePhysicalTime,
|
|
NodeId = TestNodeId,
|
|
LogicalCounter = 42
|
|
};
|
|
|
|
Assert.Equal(0, ts1.CompareTo(ts2));
|
|
}
|
|
|
|
[Fact]
|
|
public void CompareTo_TotalOrdering_IsTransitive()
|
|
{
|
|
var a = new HlcTimestamp { PhysicalTime = 100, NodeId = "node", LogicalCounter = 0 };
|
|
var b = new HlcTimestamp { PhysicalTime = 100, NodeId = "node", LogicalCounter = 1 };
|
|
var c = new HlcTimestamp { PhysicalTime = 100, NodeId = "node", LogicalCounter = 2 };
|
|
|
|
Assert.True(a < b);
|
|
Assert.True(b < c);
|
|
Assert.True(a < c);
|
|
}
|
|
}
|