public void It_should_sleep_if_we_rollover_twice_in_the_same_millisecond() { var worker = new WakingIdWorker(1, 1); var iter = new List <long>() { 2, 2, 3 }; int idx = 0; Func <long> timeFunc = () => { var res = iter[idx++]; if (idx > iter.Count - 1) { idx = 0; } return(res); }; using (TimeExtensions.StubCurrentTime(timeFunc)) { worker.Sequence = 4095; worker.NextId(); worker.Sequence = 4095; worker.NextId(); } Assert.That(worker.Slept, Is.EqualTo(1)); }
public void It_should_properly_mask_timestamp() { var worker = new IdWorker(31, 31); for (var i = 0; i < 100; i++) { var t = TimeExtensions.CurrentTimeMillis(); using (TimeExtensions.StubCurrentTime(t)) { var id = worker.NextId(); var actual = (((ulong)id & TimestampMask) >> 22); var expected = (t - IdWorker.Twepoch); Assert.That(expected, Is.EqualTo(actual)); } } }