def test_list_contents(self):
        # Create a Python list, populate it, create my own list with the same
        # loop to make sure the content is identical
        pylistup = []
        mylist = OrderedList()
        for i in range(10):
            pylistup.append(i * 3)
            mylist.add(i * 3)
        self.assertEqual(len(pylistup), mylist.size)
        for i in range(mylist.size):
            self.assertEqual(mylist.grab(0), pylistup[i])

        # Add declining numbers to end of list to ensure that the OrderedList is sorting
        # grab from the front each time
        pylistdown = []
        twolist = OrderedList()
        for i in range(10,0,-1):
            pylistdown.insert(0, i * 3)
            twolist.add(i * 3)

        self.assertEqual(len(pylistdown), twolist.size)
        for i in range(mylist.size, -1):
            self.assertEqual(mylist.grab(0), pylistdown[i])

        # Add in declining order, grab from end
        pylistback = []
        threelist = OrderedList()
        for i in range(10,0,-1):
            pylistback.insert(0, i * 3)
            mylist.add(i * 3)

        self.assertEqual(len(pylistback), mylist.size)

        for i in range(len(pylistback), -1):
            self.assertEqual(mylist.grab(mylist.size -1), pylistback[i])
    def test_grab(self):
        # Build a list, check that it is as expected
        l = OrderedList()
        l.add('apple')
        l.add('banana')
        l.add('coconut')
        self.assertEqual(l.size, 3)

        # Case: grab from front of list
        self.assertEqual(l.grab(0), 'apple')
        self.assertEqual(l.size, 2)
        self.assertEqual(l.first.item, 'banana')
        self.assertEqual(l.last.item, 'coconut')

        # Case: grab from end of list
        l.add('durian')
        self.assertEqual(l.size, 3)
        self.assertEqual(l.grab(2), 'durian')
        self.assertEqual(l.first.item, 'banana')
        self.assertEqual(l.last.item, 'coconut')

        # Case: grab from middle of list
        l.add('elderberry')
        self.assertEqual(l.size, 3)
        self.assertEqual(l.grab(1), 'coconut')
        self.assertEqual(l.first.item, 'banana')
        self.assertEqual(l.last.item, 'elderberry')

        # Case: grab from outside the list
        self.assertEqual(l.grab(6), None)
        self.assertEqual(l.grab(-14), None)
        self.assertEqual(l.grab(-1), 'elderberry')