public void Clear_BeforeLooping()
        {
            CircularList<SimpleElement> list = new CircularList<SimpleElement>(3);

            SimpleElement one = new SimpleElement() { String = "One" };
            SimpleElement two = new SimpleElement() { String = "Two" };

            list.Add(one);
            list.Add(two);

            list.Clear();

            Assert.IsEmpty(list, "List should be empty as it has just been cleared");
            Assert.AreEqual(-1, list.CurrentIndex, "The index should have been reset by the clear");
        }
        public void Contains_AboutToLoop()
        {
            CircularList<SimpleElement> list = new CircularList<SimpleElement>(2);

            SimpleElement one = new SimpleElement() { String = "One" };
            SimpleElement two = new SimpleElement() { String = "Two" };
            SimpleElement three = new SimpleElement() { String = "Three" };

            list.Add(one);
            list.Add(two);

            Assert.IsTrue(list.Contains(two), "The element should be in the list");
            Assert.IsTrue(list.Contains(one), "The element should be in the list");
            Assert.IsFalse(list.Contains(three), "The element should not be in the list");
        }
        public void IndexOf_BeforeLooping()
        {
            CircularList<SimpleElement> list = new CircularList<SimpleElement>(3);

            SimpleElement one = new SimpleElement() { String = "One" };
            SimpleElement two = new SimpleElement() { String = "Two" };
            SimpleElement three = new SimpleElement() { String = "Three" };

            list.Add(one);
            list.Add(two);

            Assert.AreEqual(1, list.IndexOf(two), "Index should be 1 as this is the second element");
            Assert.AreEqual(0, list.IndexOf(one), "Index should be 0 as this is the first element");
            Assert.AreEqual(-1, list.IndexOf(three), "Index should be -1 as the item is not in the list");
        }
        public void Enumerator_BeforeLooping()
        {
            CircularList<SimpleElement> list = new CircularList<SimpleElement>(3);

            SimpleElement one = new SimpleElement() { String = "One" };
            SimpleElement two = new SimpleElement() { String = "Two" };

            list.Add(one);
            list.Add(two);

            List<SimpleElement> actual = new List<SimpleElement>();
            foreach (SimpleElement cur in list)
            {
                actual.Add(cur);
            }

            Assert.AreEqual(2, actual.Count, "The foreach should have yielded 2 items");
            Assert.AreEqual(one, actual[0], "First yielded item is wrong");
            Assert.AreEqual(two, actual[1], "Second yielded item is wrong");
        }
        public void IndexOf_AfterLooping()
        {
            CircularList<SimpleElement> list = new CircularList<SimpleElement>(2);

            SimpleElement one = new SimpleElement() { String = "One" };
            SimpleElement two = new SimpleElement() { String = "Two" };
            SimpleElement three = new SimpleElement() { String = "Three" };

            list.Add(one);
            list.Add(two);
            list.Add(three);

            Assert.AreEqual(1, list.IndexOf(two), "Index should be 1 as this is the second element");
            Assert.AreEqual(-1, list.IndexOf(one), "Index should be -1 as this item has been replaced by new content");
            Assert.AreEqual(0, list.IndexOf(three), "Index should be 0 as the item is the first to be added after looping");
        }
        public void Enumerator_AfterLooping_LongerList()
        {
            CircularList<SimpleElement> list = new CircularList<SimpleElement>(3);

            SimpleElement one = new SimpleElement() { String = "One" };
            SimpleElement two = new SimpleElement() { String = "Two" };
            SimpleElement three = new SimpleElement() { String = "Three" };
            SimpleElement four = new SimpleElement() { String = "Four" };
            SimpleElement five = new SimpleElement() { String = "Five" };

            list.Add(one); // ==> 0
            list.Add(two); // ==> 1
            list.Add(three); // ==> 2
            list.Add(four); // ==> 0
            list.Add(five); // ==> 1

            List<SimpleElement> actual = new List<SimpleElement>();
            foreach (SimpleElement cur in list)
            {
                actual.Add(cur);
            }

            Assert.AreEqual(3, actual.Count, "The foreach should have yielded 3 items");
            Assert.AreEqual(three, actual[0], "First yielded item is wrong");
            Assert.AreEqual(four, actual[1], "Second yielded item is wrong");
            Assert.AreEqual(five, actual[2], "Third yielded item is wrong");
        }
        public void Enumerator_AboutToLoop_LongerList()
        {
            CircularList<SimpleElement> list = new CircularList<SimpleElement>(5);

            SimpleElement one = new SimpleElement() { String = "One" };
            SimpleElement two = new SimpleElement() { String = "Two" };
            SimpleElement three = new SimpleElement() { String = "Three" };
            SimpleElement four = new SimpleElement() { String = "Four" };
            SimpleElement five = new SimpleElement() { String = "FIve" };

            list.Add(one);
            list.Add(two);
            list.Add(three);
            list.Add(four);
            list.Add(five);

            List<SimpleElement> actual = new List<SimpleElement>();
            foreach (SimpleElement cur in list)
            {
                actual.Add(cur);
            }

            Assert.AreEqual(5, actual.Count, "The foreach should have yielded 5 items");
            Assert.AreEqual(one, actual[0], "First yielded item is wrong");
            Assert.AreEqual(two, actual[1], "Second yielded item is wrong");
            Assert.AreEqual(three, actual[2], "Third yielded item is wrong");
            Assert.AreEqual(four, actual[3], "Fourth yielded item is wrong");
            Assert.AreEqual(five, actual[4], "Fifth yielded item is wrong");
        }
        public void Count_BeforeLooping()
        {
            CircularList<SimpleElement> list = new CircularList<SimpleElement>(3);

            SimpleElement one = new SimpleElement() { String = "One" };
            SimpleElement two = new SimpleElement() { String = "Two" };

            list.Add(one);
            list.Add(two);

            Assert.AreEqual(2, list.Count);
        }
        public void CopyTo_BeforeLooping_IndexGreaterThanZero()
        {
            CircularList<SimpleElement> list = new CircularList<SimpleElement>(3);

            SimpleElement one = new SimpleElement() { String = "One" };
            SimpleElement two = new SimpleElement() { String = "Two" };

            list.Add(one);
            list.Add(two);

            SimpleElement[] array = new SimpleElement[3];

            list.CopyTo(array, 1);

            Assert.AreEqual(default(SimpleElement), array[0]);
            Assert.AreEqual(one, array[1]);
        }
        public void CopyTo_AfterLooping_FromIndexZero()
        {
            CircularList<SimpleElement> list = new CircularList<SimpleElement>(2);

            SimpleElement one = new SimpleElement() { String = "One" };
            SimpleElement two = new SimpleElement() { String = "Two" };
            SimpleElement three = new SimpleElement() { String = "Three" };

            list.Add(one);
            list.Add(two);
            list.Add(three);

            SimpleElement[] array = new SimpleElement[2];

            list.CopyTo(array, 0);

            Assert.AreEqual(two, array[0]);
            Assert.AreEqual(three, array[1]);
        }