static void Main(string[] args)
        {
            //Usage sample
            Collections.LinkedList<int> list = new Collections.LinkedList<int>();

            //ADDING OPERATIONS
            list.add(1);
            list.add(2);
            list.add(3);
            list.add(3);
            list.add(4);
            list.add(5);
            list.add(6);
            list.add(6);
            list.add(6);
            list.add(6);

            list.add(1, 1); // adding by index
            Console.WriteLine(list.ToString());

            //REMOVE
            list.remove(1);
            list.remove(2);
            list.removeByIndex(4); //removing by index
            list.removeAllValues(6); //removing all '6' in the linkedlist
            Console.WriteLine(list.ToString());

            //INDEXOF
            Console.WriteLine("El 3 se encuentra en la posición {0}", list.indexOf(3));
            int[] indexes = list.allIndexesOf(3);
            String positions = "[ ";
            for (int i = 0; i < indexes.Length; i++)
            {
                if (i != indexes.Length - 1)
                    positions += indexes[i] + ", ";
                else
                    positions += indexes[i] + " ]";
            }
            Console.WriteLine("Estas son todas las posiciones en las que hay un 3: {0}", positions);

            //SIZE
            Console.WriteLine("El tamaño de la lista actualmente es: {0}", list.size());

            //GET/SET
            Console.WriteLine("El primer elemento de la lista es el: {0}", list.get(0));
            list.set(0, 10);
            Console.WriteLine("Ahora el primer elemento a cambiado (tras usar el setter)");
            Console.WriteLine("El primer elemento de la lista es el: {0}", list.get(0));

            /// ...
        }
        public void testRemoveByIndex()
        {
            list = new Collections.LinkedList<int>();
            Collections.LinkedList<int> list2 = new Collections.LinkedList<int>();
            Collections.LinkedList<int> list3 = new Collections.LinkedList<int>();

            for (int i = 0; i < 50; i++)
            {
                list.add(i);
                list2.add(i);
                list3.add(i);
            }

            //remove first element
            list.removeByIndex(0);
            Assert.AreEqual(1, list.get(0));
            Assert.AreEqual(49, list.size());

            //remove last element
            list.removeByIndex(list.size() - 1);
            Assert.AreEqual(48, list.get(list.size() - 1));
            Assert.AreEqual(48, list.size());

            //remove [firstElement, lastElement]
            Assert.AreEqual(0, list2.removeByIndex(0));
            Assert.AreEqual(25 + 1, list2.removeByIndex(25));
            Assert.AreEqual(32 + 2, list2.removeByIndex(32));
            //Assert.AreEqual(49, list2.removeByIndex(list2.size()-1));

            //remove all
            for (int i = 0; i < 50; i++)
            {
                list3.removeByIndex(0);
            }
            Assert.AreEqual(0, list3.size());

            //Negative tests
            //Index >= size

            //Index < 0
        }
        public void genericListTest()
        {
            Collections.LinkedList<int> intsList = new Collections.LinkedList<int>();// -> INT TYPE WAS TESTED
            Collections.LinkedList<double> doublesList = new Collections.LinkedList<double>();
            Collections.LinkedList<String> strsList = new Collections.LinkedList<String>();
            Collections.LinkedList<Persona> personsList = new Collections.LinkedList<Persona>();

            //GENERAL TEST FOR DOUBLES
            for (int i = 0; i < 50; i++)
            {
                doublesList.add((double)i); //add double
                strsList.add(i.ToString()); //add string
                Persona auxP = new Persona(i.ToString());
                personsList.add(auxP); // add persons

                Assert.AreEqual((double)i, doublesList.get(i));//get double
                Assert.AreEqual(i.ToString(), strsList.get(i));//get string
                Assert.AreEqual(auxP, personsList.get(i)); //get person

                Assert.AreEqual(i, doublesList.indexOf((double)i));//index of a double
                Assert.AreEqual(i, strsList.indexOf(i.ToString()));//index of a string
                Assert.AreEqual(i, personsList.indexOf(auxP));// index of a person

                Assert.AreEqual(true, doublesList.contains((double)i));//contains double?
                Assert.AreEqual(true, strsList.contains(i.ToString()));//contains string?
                Assert.AreEqual(true, personsList.contains(auxP));//contains person?
            }
            Assert.AreEqual(50, doublesList.size());
            Assert.AreEqual(50, strsList.size());
            Assert.AreEqual(50, personsList.size());

            //removing doubles
            for (int i = 0; i < 50; i++)
            {
                Persona auxP = new Persona(i.ToString());
                Assert.AreEqual((double)i, doublesList.remove((double)i));
                Assert.AreEqual(i.ToString(), strsList.remove(i.ToString()));
                Assert.AreEqual(auxP, personsList.remove(auxP));
            }
            Assert.AreEqual(0, doublesList.size());
            Assert.AreEqual(0, strsList.size());
            Assert.AreEqual(0, personsList.size());

            //removing by position
            Persona p1 = new Persona("dni1");
            Persona p2 = new Persona("dni2");

            doublesList.add(1.0);
            doublesList.add(2.0);
            strsList.add("texto1");
            strsList.add("texto2");
            personsList.add(p1);
            personsList.add(p2);

            Assert.AreEqual(1.0, doublesList.removeByIndex(0));
            Assert.AreEqual(2.0, doublesList.removeByIndex(0));
            Assert.AreEqual("texto1", strsList.removeByIndex(0));
            Assert.AreEqual("texto2", strsList.removeByIndex(0));
            Assert.AreEqual(p1, personsList.removeByIndex(0));
            Assert.AreEqual(p2, personsList.removeByIndex(0));
        }