예제 #1
0
 def test_clear(self):
     llist = LinkedList()
     llist.append(1)
     llist.append(2)
     llist.append(3)
     llist.append(4)
     llist.append(5)
     llist.clear()
     self.assertIsNone(llist.head)
class TestLinkedList(unittest.TestCase):
    def setUp(self) -> None:
        self.ll = LinkedList()

    def test_add_first(self) -> None:
        self.ll.add_first(1)
        self.assertEqual(self.ll.__str__(), "[1]")
        self.ll.add_first(2)
        self.assertEqual(self.ll.__str__(), "[2, 1]")
        self.ll.add_first(3)
        self.assertEqual(self.ll.__str__(), "[3, 2, 1]")

    def test_append(self) -> None:
        self.ll.append(1)
        self.assertEqual(self.ll.__str__(), "[1]")
        self.ll.append(2)
        self.assertEqual(self.ll.__str__(), "[1, 2]")
        self.ll.append(3)
        self.assertEqual(self.ll.__str__(), "[1, 2, 3]")

    def test_get(self) -> None:
        with self.assertRaises(IndexError) as context:
            self.ll.get(0)
            self.assertTrue("Index is out of range" in context.exception)
        self.ll.append(1)
        self.assertEqual(self.ll.get(0), 1)
        with self.assertRaises(IndexError) as context:
            self.ll.get(-1)
            self.assertTrue("Index is out of range" in context.exception)
        with self.assertRaises(IndexError) as context:
            self.ll.get(1)
            self.assertTrue("Index is out of range" in context.exception)
        self.ll.append(2)
        self.assertEqual(self.ll.get(0), 1)
        self.assertEqual(self.ll.get(1), 2)
        with self.assertRaises(IndexError) as context:
            self.ll.get(2)
            self.assertTrue("Index is out of range" in context.exception)
        self.ll.add_first(3)
        self.assertEqual(self.ll.get(0), 3)
        self.assertEqual(self.ll.get(1), 1)
        self.assertEqual(self.ll.get(2), 2)
        with self.assertRaises(IndexError) as context:
            self.ll.get(3)
            self.assertTrue("Index is out of range" in context.exception)

    def test_pop(self) -> None:
        with self.assertRaises(IndexError) as context:
            self.ll.pop(0)
            self.assertTrue("Index is out of range" in context.exception)
        self.ll.append(1)
        self.assertEqual(self.ll.pop(0), 1)
        with self.assertRaises(IndexError) as context:
            self.ll.pop(1)
            self.assertTrue("Index is out of range" in context.exception)
        self.ll.append(1)
        self.ll.append(2)
        self.assertEqual(self.ll.pop(0), 1)
        self.assertEqual(self.ll.pop(0), 2)
        self.ll.add_first(3)
        self.ll.add_first(2)
        self.ll.add_first(1)
        self.assertEqual(self.ll.pop(0), 1)
        self.assertEqual(self.ll.pop(1), 3)
        with self.assertRaises(IndexError) as context:
            self.ll.pop(2)
            self.assertTrue("Index is out of range" in context.exception)

    def test_clear(self) -> None:
        self.assertEqual(len(self.ll), 0)
        self.ll.append(1)
        self.assertEqual(len(self.ll), 1)
        self.ll.clear()
        self.assertEqual(len(self.ll), 0)
        self.ll.append(2)
        self.assertEqual(len(self.ll), 1)
        self.ll.clear()
        self.assertEqual(len(self.ll), 0)

    def test_big_test(self) -> None:
        test_case = 100_000
        for i in range(test_case):
            self.ll.add_first(i)
        for i in reversed(range(test_case)):
            self.assertEqual(self.ll.pop(0), i)

    def test_iterable(self) -> None:
        for i in range(10):
            self.ll.append(i)
        for i in self.ll:
            self.assertEqual(self.ll[i], i)
        self.ll[5] = 6
        self.assertEqual(self.ll[5], 6)

    def test_repr(self) -> None:
        for i in range(6):
            self.ll.append(i)
        self.assertEqual(self.ll.__repr__(), "LinkedList [0, 1, 2, 3, 4, 5]")
        self.ll.append(3)
        self.assertEqual(self.ll.__repr__(),
                         "LinkedList [0, 1, 2, 3, 4, 5, ...]")