public void MaxGuid()
 {
     Assert.That(TimeGuidBitsLayout.MaxTimeGuid, Is.EqualTo(new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xbf, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f }));
     Assert.That(TimeGuidBitsLayout.GetTimestamp(TimeGuidBitsLayout.MaxTimeGuid), Is.EqualTo(new Timestamp(new DateTime(1652084544606846975L, DateTimeKind.Utc).Ticks)));
     Assert.That(TimeGuidBitsLayout.GetClockSequence(TimeGuidBitsLayout.MaxTimeGuid), Is.EqualTo(16383));
     Assert.That(TimeGuidBitsLayout.GetNode(TimeGuidBitsLayout.MaxTimeGuid), Is.EqualTo(new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }));
 }
        public void GetTimestamp()
        {
            var timestamp = new Timestamp(tsGenerator.NowTicks());
            var timeGuid  = TimeGuidBitsLayout.Format(timestamp, RandomClockSequence(), RandomNode());

            Assert.That(TimeGuidBitsLayout.GetTimestamp(timeGuid), Is.EqualTo(timestamp));
        }
 public void MinGuid()
 {
     Assert.That(TimeGuidBitsLayout.MinTimeGuid, Is.EqualTo(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }));
     Assert.That(TimeGuidBitsLayout.GetTimestamp(TimeGuidBitsLayout.MinTimeGuid), Is.EqualTo(new Timestamp(new DateTime(1582, 10, 15, 0, 0, 0, DateTimeKind.Utc).Ticks)));
     Assert.That(TimeGuidBitsLayout.GetClockSequence(TimeGuidBitsLayout.MinTimeGuid), Is.EqualTo(0));
     Assert.That(TimeGuidBitsLayout.GetNode(TimeGuidBitsLayout.MinTimeGuid), Is.EqualTo(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }));
 }
        public void GetTimestamp_GregorianCalendarEnd()
        {
            var timestamp = TimeGuidBitsLayout.GregorianCalendarEnd;
            var timeGuid  = TimeGuidBitsLayout.Format(timestamp, 0, new byte[6]);

            Assert.That(TimeGuidBitsLayout.GetTimestamp(timeGuid), Is.EqualTo(timestamp));
            Assert.That(new Guid(timeGuid), Is.EqualTo(new Guid("ffffffff-ffff-ff1f-8080-808080808080")));
        }
 public void Format_InvalidArgs()
 {
     Assert.Throws <InvalidOperationException>(() => TimeGuidBitsLayout.Format(new Timestamp(TimeGuidBitsLayout.GregorianCalendarStart.Ticks - 1), 0, new byte[6]));
     Assert.Throws <InvalidOperationException>(() => TimeGuidBitsLayout.Format(new Timestamp(TimeGuidBitsLayout.GregorianCalendarEnd.Ticks + 1), 0, new byte[6]));
     Assert.Throws <InvalidOperationException>(() => TimeGuidBitsLayout.Format(Timestamp.Now, TimeGuidBitsLayout.MaxClockSequence + 1, new byte[6]));
     Assert.Throws <InvalidOperationException>(() => TimeGuidBitsLayout.Format(Timestamp.Now, TimeGuidBitsLayout.MaxClockSequence, new byte[4]));
     Assert.Throws <InvalidOperationException>(() => TimeGuidBitsLayout.Format(Timestamp.Now, TimeGuidBitsLayout.MaxClockSequence, new byte[5]));
 }
Beispiel #6
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));
        }
Beispiel #7
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));
        }
Beispiel #8
0
        private static TimeBasedColumn[] RandomColumnsByNode(int count)
        {
            var now = Timestamp.Now;

            return(Enumerable.Range(0, int.MaxValue).Select(x => new TimeBasedColumn
            {
                Timestamp = now.Ticks,
                Name = new TimeGuid(TimeGuidBitsLayout.Format(now, 0, ThreadLocalRandom.Instance.NextBytes(6))),
                Value = new byte[0],
            }).DistinctBy(x => x.Name).Take(count).ToArray());
        }
        public void GetTimestamp_AllDistinctTimestamps()
        {
            var node          = RandomNode();
            var clockSequence = RandomClockSequence();

            foreach (var timestamp in AllDistinctTimestamps(TimeSpan.FromHours(10)))
            {
                var timeGuid = TimeGuidBitsLayout.Format(timestamp, clockSequence, node);
                Assert.That(TimeGuidBitsLayout.GetTimestamp(timeGuid), Is.EqualTo(timestamp));
            }
        }
        private static TimeBasedColumn[] RandomColumnsByClockSequence(int count)
        {
            var now = Timestamp.Now;

            return(MoreEnumerable.DistinctBy(Enumerable.Range(0, int.MaxValue).Select(x => new TimeBasedColumn
            {
                Timestamp = now.Ticks,
                Name = new TimeGuid(TimeGuidBitsLayout.Format(now, ThreadLocalRandom.Instance.NextUshort(TimeGuidBitsLayout.MinClockSequence, TimeGuidBitsLayout.MaxClockSequence + 1), new byte[6])),
                Value = new byte[0],
            }), x => x.Name).Take(count).ToArray());
        }
        private static TimeBasedColumn[] RandomColumnsByTimestamp(int count)
        {
            var now = Timestamp.Now;

            return(MoreEnumerable.DistinctBy(Enumerable.Range(0, int.MaxValue).Select(x => new TimeBasedColumn
            {
                Timestamp = now.Ticks,
                Name = new TimeGuid(TimeGuidBitsLayout.Format(now + ThreadLocalRandom.Instance.NextTimeSpan(TimeSpan.FromDays(1)), 0, new byte[6])),
                Value = new byte[0],
            }), x => x.Name).Take(count).ToArray());
        }
        public void TimeGuidBitsLayout_Perf()
        {
            var       timestamp     = new Timestamp(tsGenerator.NowTicks());
            var       clockSequence = RandomClockSequence();
            var       node          = RandomNode();
            var       sw            = Stopwatch.StartNew();
            const int count         = 10 * 1000 * 1000;

            for (var i = 0; i < count; i++)
            {
                TimeGuidBitsLayout.Format(timestamp, clockSequence, node);
            }
            sw.Stop();
            Console.Out.WriteLine($"TimeGuidBitsLayout.Format took {sw.ElapsedMilliseconds} ms for {count} calls");
        }
 public void DecrementNode()
 {
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }), Is.EqualTo(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }));
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0xff }), Is.EqualTo(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe }));
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 }), Is.EqualTo(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0xff }));
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0x12, 0x34, 0x56, 0x78, 0xff, 0x00 }), Is.EqualTo(new byte[] { 0x12, 0x34, 0x56, 0x78, 0xfe, 0xff }));
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0x12, 0x34, 0x56, 0x79, 0x00, 0x00 }), Is.EqualTo(new byte[] { 0x12, 0x34, 0x56, 0x78, 0xff, 0xff }));
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0x12, 0xff, 0x00, 0x00, 0x00, 0x00 }), Is.EqualTo(new byte[] { 0x12, 0xfe, 0xff, 0xff, 0xff, 0xff }));
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0x13, 0x00, 0x00, 0x00, 0x00, 0x00 }), Is.EqualTo(new byte[] { 0x12, 0xff, 0xff, 0xff, 0xff, 0xff }));
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0xff, 0x00, 0x00, 0x00, 0x00, 0x00 }), Is.EqualTo(new byte[] { 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff }));
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }), Is.EqualTo(new byte[] { 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff }));
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff, 0x00 }), Is.EqualTo(new byte[] { 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff }));
     Assert.That(TimeGuidBitsLayout.DecrementNode(new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }), Is.EqualTo(new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe }));
     Assert.Throws <InvalidOperationException>(() => TimeGuidBitsLayout.DecrementNode(new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }));
 }
        public void GetClockSequence_AllDistinctClockSequences()
        {
            var node                 = new byte[6];
            var timestamp            = Timestamp.Now;
            var uniqueClockSequences = new HashSet <ushort>();

            for (var clockSequence = TimeGuidBitsLayout.MinClockSequence; clockSequence <= TimeGuidBitsLayout.MaxClockSequence; clockSequence++)
            {
                var timeGuid            = TimeGuidBitsLayout.Format(timestamp, clockSequence, node);
                var actualClockSequence = TimeGuidBitsLayout.GetClockSequence(timeGuid);
                uniqueClockSequences.Add(actualClockSequence);
                Assert.That(actualClockSequence, Is.EqualTo(clockSequence));
            }
            Assert.That(uniqueClockSequences.Count, Is.EqualTo(TimeGuidBitsLayout.MaxClockSequence + 1));
        }
 public void GetVersion()
 {
     Assert.That(TimeGuidBitsLayout.GetVersion(TimeGuidBitsLayout.Format(new Timestamp(tsGenerator.NowTicks()), RandomClockSequence(), RandomNode())), Is.EqualTo(GuidVersion.TimeBased));
 }
        public void Before()
        {
            var timestamp = Timestamp.Now;

            Assert.That(TimeGuid.MaxForTimestamp(timestamp).Before(), Is.LessThan(TimeGuid.MaxForTimestamp(timestamp)));
            Assert.That(TimeGuid.MinForTimestamp(timestamp).Before(), Is.EqualTo(TimeGuid.MaxForTimestamp(timestamp - TimeSpan.FromTicks(1))));
            Assert.That(new TimeGuid(timestamp, 1, TimeGuidBitsLayout.MinNode).Before(), Is.EqualTo(new TimeGuid(timestamp, 0, TimeGuidBitsLayout.MaxNode)));
            Assert.That(new TimeGuid(timestamp, 1, TimeGuidBitsLayout.MaxNode).Before(), Is.EqualTo(new TimeGuid(timestamp, 1, TimeGuidBitsLayout.DecrementNode(TimeGuidBitsLayout.MaxNode))));
            Assert.Throws <InvalidOperationException>(() => TimeGuid.MinForTimestamp(new Timestamp(DateTime.MinValue)));
        }