コード例 #1
0
        public void FromGuidTest()
        {
            var id = UnifiedId.FromGuid(Guid.NewGuid());

            Assert.NotEqual(UnifiedId.Empty, id);
            Assert.Throws <ArgumentOutOfRangeException>(() => UnifiedId.FromGuid(Guid.Empty));
        }
コード例 #2
0
        public void FromInt64Test()
        {
            var id = UnifiedId.FromInt64(long.MinValue);

            Assert.NotEqual(long.MinValue, id.ToInt64());
            Assert.Throws <ArgumentOutOfRangeException>(() => UnifiedId.FromInt64(0));
        }
コード例 #3
0
        public void ToStringTest()
        {
            var testId = "FVVVVVVVVVVVU";
            var id     = new UnifiedId(testId);

            Assert.Equal(testId, id.ToString());
        }
コード例 #4
0
        public void EqualsTest()
        {
            var id = UnifiedId.Parse("FVVVVVVVVVVVV");

            Assert.True(id.Equals("FVVVVVVVVVVVV"));
            Assert.True(id.Equals(ulong.MaxValue));
            Assert.True(id.Equals(id.ToInt64()));
            Assert.True(id.Equals(id));

            Assert.True(id.Equals((object)"FVVVVVVVVVVVV"));
            Assert.True(id.Equals((object)ulong.MaxValue));
            Assert.True(id.Equals((object)id.ToInt64()));
            Assert.True(id.Equals((object)id));
            Assert.False(id.Equals(new object()));

            Assert.True(id == "FVVVVVVVVVVVV");
            Assert.True(id == ulong.MaxValue);
            Assert.True(id == id.ToInt64());
            Assert.True(id == new UnifiedId(id.ToUInt64()));

            Assert.False(id != "FVVVVVVVVVVVV");
            Assert.False(id != ulong.MaxValue);
            Assert.False(id != id.ToInt64());
            Assert.False(id != new UnifiedId(id.ToUInt64()));

            Assert.True("FVVVVVVVVVVVV" == id);
            Assert.True(ulong.MaxValue == id);
            Assert.True(id.ToInt64() == id);
            Assert.True(new UnifiedId(id.ToUInt64()) == id);

            Assert.False("FVVVVVVVVVVVV" != id);
            Assert.False(ulong.MaxValue != id);
            Assert.False(id.ToInt64() != id);
            Assert.False(new UnifiedId(id.ToUInt64()) != id);
        }
コード例 #5
0
        public void GetHashCodeTest()
        {
            UnifiedId id  = "FVVVVVVVVVVVV";
            UnifiedId id2 = ulong.MaxValue;

            Assert.Equal(id.GetHashCode(), id2.GetHashCode());
        }
コード例 #6
0
        public void FromStringTest()
        {
            var id = UnifiedId.FromString(nameof(UnifiedId));

            Assert.NotEqual(nameof(UnifiedId), id.ToString());
            Assert.Throws <ArgumentNullException>(() => UnifiedId.FromString(string.Empty));
        }
コード例 #7
0
ファイル: PartitioningTests.cs プロジェクト: d0vbysh/Unified
        public void PartitionNumberStringTest()
        {
            var dict = new Dictionary <string, List <UnifiedId> >();
            var all  = 100000;

            var partitions = 16U;

            for (var i = 0; i <= all; i++)
            {
                var x = UnifiedId.NewId();
                var p = x.PartitionNumberAsString(partitions);
                if (!dict.ContainsKey(p))
                {
                    dict.Add(p, new List <UnifiedId>());
                }

                dict[p].Add(x);
            }

            float max = dict.Max(x => x.Value.Count);
            float min = dict.Min(x => x.Value.Count);

            var diff = max - min;

            var maxp  = (max / (all / partitions)) * 100;
            var minp  = (min / (all / partitions)) * 100;
            var diffp = (diff / (all / partitions)) * 100;

            output.WriteLine($"Elements tested: {all} partition size: {all / partitions}");
            output.WriteLine($"MAX: {max:N1}({maxp:N1}%) MIN: {min:N1}({minp:N1}%) DIFF: {diff:N1}({diffp:N1}%)");

            Assert.True(diffp < 10);
        }
コード例 #8
0
        public void PartitionKeyTest()
        {
            var id = new UnifiedId("FVSRVVVVVVVVU");

            Assert.Equal("FVS", id.PartitionKey());
            Assert.Equal("FVSR", id.PartitionKey(4));
            Assert.Throws <ArgumentOutOfRangeException>(() => id.PartitionKey(0));
            Assert.Throws <ArgumentOutOfRangeException>(() => id.PartitionKey(20));
        }
コード例 #9
0
        public void PartitionNumberAsStringTest()
        {
            var id = new UnifiedId("FVSRVVVVVVVVU");

            Assert.Equal("9997", id.PartitionNumberAsString());
            Assert.Equal("099", id.PartitionNumberAsString(100));
            Assert.Equal("98", id.PartitionNumberAsString(99));
            Assert.Equal("2", id.PartitionNumberAsString(3));
            Assert.Throws <ArgumentOutOfRangeException>(() => id.PartitionNumberAsString(0));
            Assert.Throws <ArgumentOutOfRangeException>(() => id.PartitionNumberAsString(uint.MaxValue));
        }
コード例 #10
0
        public void PartitionNumberTest()
        {
            var id = new UnifiedId("FVSRVVVVVVVVU");

            Assert.Equal(32761U, id.PartitionNumber());
            Assert.Equal(99U, id.PartitionNumber(100));
            Assert.Equal(98U, id.PartitionNumber(99));
            Assert.Equal(2U, id.PartitionNumber(3));
            Assert.Throws <ArgumentOutOfRangeException>(() => id.PartitionNumber(0));
            Assert.Throws <ArgumentOutOfRangeException>(() => id.PartitionNumber(uint.MaxValue));
        }
コード例 #11
0
        public void FromBytesTest()
        {
            var id = UnifiedId.FromBytes(new byte[] { 10 });

            Assert.NotEqual(UnifiedId.Empty, id);
            var array = Array.Empty <byte>();

            Assert.Throws <ArgumentOutOfRangeException>(() => UnifiedId.FromBytes(array));
#pragma warning disable CS8604 // Possible null reference argument.
            array = null;
            Assert.Throws <ArgumentNullException>(() => UnifiedId.FromBytes(array));
#pragma warning restore CS8604 // Possible null reference argument.
        }
コード例 #12
0
        public void GetObjectDataTest()
        {
            var id = UnifiedId.NewId();

            using (var ms = new MemoryStream())
            {
                var formatter = new BinaryFormatter();
                formatter.Serialize(ms, id);
                ms.Position = 0;

                var deserialized = formatter.Deserialize(ms);
                Assert.Equal(id, deserialized);
            }
        }
コード例 #13
0
        public void CompareToTest()
        {
            UnifiedId id  = "FVVVVVVVVVVVU";
            UnifiedId id2 = ulong.MaxValue - 1;

            Assert.Equal(0, id.CompareTo(id2));
            Assert.Equal(0, id.CompareTo(id2.ToString()));
            Assert.Equal(1, id.CompareTo(string.Empty));
            Assert.Equal(0, id.CompareTo(id2.ToInt64()));
            Assert.Equal(1, id.CompareTo(new object()));
            Assert.Equal(-1, id.CompareTo(ulong.MaxValue));
            Assert.Equal(-1, id.CompareTo(new UnifiedId(ulong.MaxValue)));
            Assert.Equal(1, id.CompareTo(UnifiedId.Empty));
        }
コード例 #14
0
        public void ParseTest()
        {
            var id       = new UnifiedId("FVVVVVVVVVVVU");
            var parsedId = UnifiedId.Parse(id);

            Assert.Equal(id, parsedId);

            Assert.Equal(UnifiedId.Empty, UnifiedId.Parse(string.Empty));
            Assert.Throws <FormatException>(() => UnifiedId.Parse("VVVVVVVVVVVVV"));
            Assert.Throws <FormatException>(() => UnifiedId.Parse("FVVVVVVVVVVVUN"));
            Assert.Throws <FormatException>(() => UnifiedId.Parse("FVVVVVVVVVVVu"));
            Assert.Throws <FormatException>(() => UnifiedId.Parse("FVVVVVVVVVVVW"));
            Assert.Throws <FormatException>(() => UnifiedId.Parse("GVVVVVVVVVVVU"));
            Assert.Throws <FormatException>(() => UnifiedId.Parse("WVVVVVVVVVVVU"));
        }
コード例 #15
0
        public void ComparatorsTest()
        {
            var id1 = new UnifiedId(1);
            var id2 = new UnifiedId(2);

            Assert.True(id1 < id2);
            Assert.True(id1 <= id2);
            Assert.True(id2 > id1);
            Assert.True(id2 >= id1);

            Assert.False(id1 > id2);
            Assert.False(id1 >= id2);
            Assert.False(id2 < id1);
            Assert.False(id2 <= id1);
        }
コード例 #16
0
        public void UnifiedIdTest()
        {
            var id = new UnifiedId();

            Assert.Equal(UnifiedId.Empty, id);

            id = new UnifiedId(long.MinValue);
            Assert.Equal("8000000000000", id);

            id = new UnifiedId(ulong.MaxValue - 1);
            Assert.Equal("FVVVVVVVVVVVU", id);

            id = new UnifiedId("FVVVVVVVVVVVU");
            Assert.Equal(ulong.MaxValue - 1, id.ToUInt64());

            Assert.Throws <FormatException>(() => new UnifiedId("FVVVVVVVVVVVUN"));
            Assert.Throws <FormatException>(() => new UnifiedId("FVVVVVVVVVVVu"));
            Assert.Throws <FormatException>(() => new UnifiedId("FVVVVVVVVVVVW"));
        }
コード例 #17
0
ファイル: PartitioningTests.cs プロジェクト: d0vbysh/Unified
        public void PartitionKeyTest()
        {
            // Let's emulate the partitioned database.
            var db = new Dictionary <string, List <UnifiedId> >();

            // We will use 100K records, just to execute it fast.
            var all = 100000;

            for (var i = 0; i <= all; i++)
            {
                // Generate random Id.
                var id = UnifiedId.NewId();

                // Get it's partition key. Number of partitions could be customized, default 16K.
                var partition = id.PartitionKey(1);

                // Initialize partitions in your DB.
                if (!db.ContainsKey(partition))
                {
                    db.Add(partition, new List <UnifiedId>());
                }

                // Add values to partitions.
                db[partition].Add(id);
            }

            var partitions = 16U;

            float max = db.Max(x => x.Value.Count);
            float min = db.Min(x => x.Value.Count);

            var diff = max - min;

            var maxp  = (max / (all / partitions)) * 100;
            var minp  = (min / (all / partitions)) * 100;
            var diffp = (diff / (all / partitions)) * 100;

            output.WriteLine($"Elements tested: {all} partition size: {all / partitions}");
            output.WriteLine($"MAX: {max:N1}({maxp:N1}%) MIN: {min:N1}({minp:N1}%) DIFF: {diff:N1}({diffp:N1}%)");

            Assert.True(diffp < 10);
        }
コード例 #18
0
        public void TryParseTest()
        {
            var id      = new UnifiedId("FVVVVVVVVVVVU");
            var success = UnifiedId.TryParse(id, out var parsedId);

            Assert.True(success);
            Assert.Equal(id, parsedId);

            Assert.False(UnifiedId.TryParse(string.Empty, out parsedId));
            Assert.Equal(UnifiedId.Empty, parsedId);
            Assert.False(UnifiedId.TryParse("VVVVVVVVVVVVV", out parsedId));
            Assert.Equal(UnifiedId.Empty, parsedId);
            Assert.False(UnifiedId.TryParse("FVVVVVVVVVVVUN", out parsedId));
            Assert.Equal(UnifiedId.Empty, parsedId);
            Assert.False(UnifiedId.TryParse("FVVVVVVVVVVVu", out parsedId));
            Assert.Equal(UnifiedId.Empty, parsedId);
            Assert.False(UnifiedId.TryParse("FVVVVVVVVVVVW", out parsedId));
            Assert.Equal(UnifiedId.Empty, parsedId);
            Assert.False(UnifiedId.TryParse("GVVVVVVVVVVVU", out parsedId));
            Assert.Equal(UnifiedId.Empty, parsedId);
            Assert.False(UnifiedId.TryParse("WVVVVVVVVVVVU", out parsedId));
            Assert.Equal(UnifiedId.Empty, parsedId);
        }
コード例 #19
0
        public void CastTest()
        {
            UnifiedId id = "FVVVVVVVVVVVV";

            Assert.True(id == (UnifiedId)"FVVVVVVVVVVVV");

            id = ulong.MaxValue;
            Assert.True(id == ulong.MaxValue);

            id = id.ToInt64();
            Assert.True(id == id.ToInt64());

            string str = id;

            Assert.True(str == "FVVVVVVVVVVVV");

            ulong num = id;

            Assert.True(num == ulong.MaxValue);

            long num2 = id;

            Assert.True(num2 == id);
        }
コード例 #20
0
        public void ToInt64Test()
        {
            var id = new UnifiedId(long.MinValue);

            Assert.Equal(long.MinValue, id.ToInt64());
        }
コード例 #21
0
        public void NewIdTest()
        {
            var id = UnifiedId.NewId();

            Assert.NotEqual(UnifiedId.Empty, id);
        }
コード例 #22
0
        public void ToUInt64Test()
        {
            var id = new UnifiedId(ulong.MaxValue);

            Assert.Equal(ulong.MaxValue, id.ToUInt64());
        }
コード例 #23
0
        public void CloneTest()
        {
            var id = UnifiedId.NewId();

            Assert.Equal(id, id.Clone());
        }