public void TestCopyTo()
        {
            var          ids     = new uint[] { 20, 19, 15, 12, 11, 10, 9, 6, 5, 3, 2, 1 };
            const string example = "20:19,15,12:9,6:5,3:1";
            var          copy    = new UniqueId[ids.Length];
            UniqueIdSet  uids;

            Assert.IsTrue(UniqueIdSet.TryParse(example, 20160117, out uids), "Failed to parse uids.");
            Assert.AreEqual(SortOrder.Descending, uids.SortOrder);
            Assert.AreEqual(20160117, uids.Validity);
            Assert.AreEqual(example, uids.ToString());
            Assert.AreEqual(ids.Length, uids.Count);

            for (int i = 0; i < uids.Count; i++)
            {
                Assert.AreEqual(20160117, uids[i].Validity);
                Assert.AreEqual(ids[i], uids[i].Id);
            }

            uids.CopyTo(copy, 0);

            for (int i = 0; i < copy.Length; i++)
            {
                Assert.AreEqual(20160117, copy[i].Validity);
                Assert.AreEqual(ids[i], copy[i].Id);
            }
        }
        public void TestEnumerator()
        {
            var          ids     = new uint[] { 20, 19, 15, 12, 11, 10, 9, 6, 5, 3, 2, 1 };
            const string example = "20:19,15,12:9,6:5,3:1";
            UniqueIdSet  uids;

            Assert.IsTrue(UniqueIdSet.TryParse(example, 20160117, out uids), "Failed to parse uids.");
            Assert.AreEqual(SortOrder.Descending, uids.SortOrder);
            Assert.AreEqual(20160117, uids.Validity);
            Assert.AreEqual(example, uids.ToString());
            Assert.AreEqual(ids.Length, uids.Count);

            for (int i = 0; i < uids.Count; i++)
            {
                Assert.AreEqual(ids[i], uids[i].Id);
            }

            var list = new List <UniqueId> ();

            foreach (var uid in uids)
            {
                Assert.AreEqual(20160117, uid.Validity);
                list.Add(uid);
            }

            for (int i = 0; i < list.Count; i++)
            {
                Assert.AreEqual(ids[i], list[i].Id);
            }
        }
        public void TestArgumentExceptions()
        {
            var      uids = new UniqueIdSet(SortOrder.Ascending);
            UniqueId uid;

            Assert.IsFalse(uids.IsReadOnly);

            uids.Add(UniqueId.MinValue);

            Assert.Throws <ArgumentOutOfRangeException> (() => new UniqueIdSet((SortOrder)500));
            Assert.Throws <ArgumentException> (() => uids.Add(UniqueId.Invalid));
            Assert.Throws <ArgumentNullException> (() => uids.AddRange(null));
            Assert.Throws <ArgumentNullException> (() => uids.CopyTo(null, 0));
            Assert.Throws <ArgumentOutOfRangeException> (() => uids.CopyTo(new UniqueId[1], -1));
            Assert.Throws <ArgumentOutOfRangeException> (() => uids.RemoveAt(-1));
            Assert.Throws <ArgumentOutOfRangeException> (() => uid = uids[-1]);
            Assert.Throws <NotSupportedException> (() => uids[0]   = UniqueId.MinValue);
            Assert.Throws <NotSupportedException> (() => uids.Insert(0, UniqueId.MinValue));

            var list = new List <UniqueId> {
                UniqueId.Invalid
            };

            Assert.Throws <ArgumentNullException> (() => UniqueIdSet.ToString(null));
            Assert.Throws <ArgumentException> (() => UniqueIdSet.ToString(list));

            Assert.Throws <ArgumentNullException> (() => UniqueIdSet.TryParse(null, out uids));
        }
        public void TestParsingInvalidInputs()
        {
            UniqueIdSet uids;

            Assert.IsFalse(UniqueIdSet.TryParse("xyz", out uids));
            Assert.IsFalse(UniqueIdSet.TryParse("1:x", out uids));
            Assert.IsFalse(UniqueIdSet.TryParse("1:1x", out uids));
        }
        public void TestParsingSimple()
        {
            const string example = "1:3,5:6,9:12,15,19:20";
            UniqueIdSet  uids;

            Assert.IsTrue(UniqueIdSet.TryParse(example, out uids), "Failed to parse uids.");
            Assert.AreEqual(example, uids.ToString());
        }
        public void TestParsingReversedSet()
        {
            var          ids     = new uint[] { 20, 19, 15, 12, 11, 10, 9, 6, 5, 3, 2, 1 };
            const string example = "20:19,15,12:9,6:5,3:1";
            UniqueIdSet  uids;

            Assert.IsTrue(UniqueIdSet.TryParse(example, out uids), "Failed to parse uids.");
            Assert.AreEqual(example, uids.ToString());
            Assert.AreEqual(ids.Length, uids.Count);

            for (int i = 0; i < uids.Count; i++)
            {
                Assert.AreEqual(ids[i], uids[i].Id);
            }
        }