public void NewInstanceUsesCurrentTimeAsCustomEpoch() { var epoch = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); var generator = new DistributedUIDGenerator(); // Allow for a 1 millisecond diff in case we ticked over during the test. var diff = generator.CustomEpoch - epoch; Assert.LessOrEqual(diff, 1, "Expected the custom epoch to be equal to the current Unix time now but it was not."); }
public void DefaultMachineIdIsTheSame() { var machineId = new DistributedUIDGenerator().MachineId; Assert.AreNotEqual(0, machineId, "Expected a valid machine id"); for (int i = 0; i < 10; ++i) { Assert.AreEqual(machineId, new DistributedUIDGenerator().MachineId, "Expected machine id to match but it did not"); } }
public void MachineIdValuesAreClampedTo10bitRange() { const int kMachineIdBits = 10; int MaxNodeId = (int)(Mathf.Pow(2, kMachineIdBits) - 1); var generator = new DistributedUIDGenerator(); // Too large generator.MachineId = MaxNodeId + 1; Assert.AreEqual(MaxNodeId, generator.MachineId, $"Expected value to be clamped when it is greater than MaxNodeId({MaxNodeId})"); // Too small generator.MachineId = -123; Assert.AreEqual(1, generator.MachineId, "Expected value to be clamped when it is less than 1."); // Just right const int CorrectId = 321; generator.MachineId = CorrectId; Assert.AreEqual(CorrectId, generator.MachineId); }
public void IdsAreUniqueForEachMachine() { HashSet <long> generatedIds = new HashSet <long>(); // Same time for all. var epoch = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - 1; var machine1 = new DistributedUIDGenerator(epoch) { MachineId = 11 }; var machine2 = new DistributedUIDGenerator(epoch) { MachineId = 2312 }; var machine3 = new DistributedUIDGenerator(epoch) { MachineId = 33 }; for (int i = 0; i < kGeneratedIdCount; ++i) { var id1 = machine1.GetNextKey(); var id2 = machine2.GetNextKey(); var id3 = machine3.GetNextKey(); Assert.False(generatedIds.Contains(id1), $"Duplicate id. The id {id1} has already been generated."); generatedIds.Add(id1); Assert.False(generatedIds.Contains(id2), $"Duplicate id. The id {id2} has already been generated."); generatedIds.Add(id2); Assert.False(generatedIds.Contains(id3), $"Duplicate id. The id {id3} has already been generated."); generatedIds.Add(id3); } }