public void LookupTest()
        {
            const string data = "How now, brown cow?";
            var          list = data.Split().Aggregate(SkewBinaryRandomAccessList <string> .Empty, (current, word) => SkewBinaryRandomAccessList <string> .Cons(word, current));

            Assert.AreEqual("now,", SkewBinaryRandomAccessList <string> .Lookup(2, list));
        }
        public void RoseTest()
        {
            const string data = "What's in a name? That which we call a rose by any other name would smell as sweet.";
            var          list = data.Split().Aggregate(SkewBinaryRandomAccessList <string> .Empty, (current, word) => SkewBinaryRandomAccessList <string> .Cons(word, current));

            Assert.AreEqual("sweet.", SkewBinaryRandomAccessList <string> .Lookup(0, list));
            Assert.AreEqual("What's", SkewBinaryRandomAccessList <string> .Lookup(17, list));
        }
        public void IsEmptyTest()
        {
            var list = SkewBinaryRandomAccessList <string> .Empty;

            Assert.IsTrue(SkewBinaryRandomAccessList <string> .IsEmpty(list));
            list = SkewBinaryRandomAccessList <string> .Cons("A", list);

            Assert.IsFalse(SkewBinaryRandomAccessList <string> .IsEmpty(list));
        }
        public void HeadTest()
        {
            const string data = "How now, brown cow?";
            var          list = data.Split().Aggregate(SkewBinaryRandomAccessList <string> .Empty, (current, word) => SkewBinaryRandomAccessList <string> .Cons(word, current));

            Assert.AreEqual("cow?", SkewBinaryRandomAccessList <string> .Head(list));

            list = SkewBinaryRandomAccessList <string> .Update(0, "dog?", list);

            Assert.AreEqual("dog?", SkewBinaryRandomAccessList <string> .Head(list));
        }
        public void EmptyTailTest()
        {
            var list = SkewBinaryRandomAccessList <string> .Empty;

            AssertThrows <ArgumentNullException>(() => SkewBinaryRandomAccessList <string> .Tail(list));
        }