public void GenerateByTimestamp_InvalidTimestamp() { var guidGen = new TimeGuidGenerator(PreciseTimestampGenerator.Instance); Assert.Throws <InvalidOperationException>(() => guidGen.NewGuid(Timestamp.MinValue)); Assert.Throws <InvalidOperationException>(() => guidGen.NewGuid(Timestamp.MaxValue)); }
public void GenerateByTimestampAndClockSequence_InvalidClockSequence() { var guidGen = new TimeGuidGenerator(PreciseTimestampGenerator.Instance); Assert.Throws <InvalidOperationException>(() => guidGen.NewGuid(Timestamp.Now, ushort.MaxValue)); Assert.Throws <InvalidOperationException>(() => guidGen.NewGuid(Timestamp.Now, TimeGuidBitsLayout.MaxClockSequence + 1)); }
public void TimeGuidGenerator_Collisions_MultiProc() { const int count = 100 * 1000; const int threadsCount = 50; var lists = new List <List <byte[]> >(); var threads = new List <Thread>(); var startSignal = new ManualResetEvent(false); for (var i = 0; i < threadsCount; i++) { var list = new List <byte[]>(); lists.Add(list); var thread = new Thread(() => { startSignal.WaitOne(); var guidGen = new TimeGuidGenerator(CreateNewTimestampGenerator()); for (var i1 = 0; i1 < count; i1++) { list.Add(guidGen.NewGuid()); } }); thread.Start(); threads.Add(thread); } startSignal.Set(); threads.ForEach(thread => thread.Join()); Assert.That(lists.SelectMany(list => list).ToArray().Distinct(ByteArrayComparer.Instance).Count(), Is.EqualTo(threadsCount * count)); }
public void GenerateByTimestamp() { var guidGen = new TimeGuidGenerator(PreciseTimestampGenerator.Instance); var ts = Timestamp.Now; var guid = guidGen.NewGuid(ts); Assert.That(TimeGuidBitsLayout.GetTimestamp(guid), Is.EqualTo(ts)); }
public void GenerateByTimestampAndClockSequence() { var guidGen = new TimeGuidGenerator(PreciseTimestampGenerator.Instance); var ts = Timestamp.Now; var clockSequence = TimeGuidGenerator.GenerateRandomClockSequence(); var guid = guidGen.NewGuid(ts, clockSequence); Assert.That(TimeGuidBitsLayout.GetTimestamp(guid), Is.EqualTo(ts)); Assert.That(TimeGuidBitsLayout.GetClockSequence(guid), Is.EqualTo(clockSequence)); }
public void TimeGuidGenerator_Collisions() { var guidGen = new TimeGuidGenerator(CreateNewTimestampGenerator()); var results = new Dictionary <byte[], byte>(10 * 1000 * 1000, ByteArrayComparer.Instance); for (var i = 0; i < 10 * 1000 * 1000; i++) { results.Add(guidGen.NewGuid(), 0); } }
public void TimeGuidGenerator_Perf(int threadsCount) { const int totalIterationsCount = 64 * 1000 * 1000; var sut = new TimeGuidGenerator(CreateNewTimestampGenerator()); PerfMeasurement.Do("TimeGuidGenerator.NewGuid()", threadsCount, totalIterationsCount, () => sut.NewGuid()); }