示例#1
0
        public void GenerateByTimestamp_InvalidTimestamp()
        {
            var guidGen = new TimeGuidGenerator(PreciseTimestampGenerator.Instance);

            Assert.Throws <InvalidOperationException>(() => guidGen.NewGuid(Timestamp.MinValue));
            Assert.Throws <InvalidOperationException>(() => guidGen.NewGuid(Timestamp.MaxValue));
        }
示例#2
0
        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));
        }
示例#3
0
        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));
        }
示例#4
0
        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));
        }
示例#5
0
        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));
        }
示例#6
0
        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);
            }
        }
示例#7
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());
        }