class Snake: def __init__(self, initPos: Cell): self.head = initPos #head: saves row and col of head self.body = LinkedList(self.head) def grow(self): self.body.insert() def move(self, nextCell: Cell): print('Snake is moving to {row}, {col}'.format(row=nextCell.row, col=nextCell.col)) self.head = nextCell self.body.addFirst(nextCell) tail = self.body.removeLast().value #type is Cell tail.set_status = CellStatus.EMPTY def checkCrush(self, nextCell: Cell): print('checking for crash')
class TestLinkedList(unittest.TestCase): def setUp(self): self.llist = LinkedList() self.llist.add(1) self.llist.add(2) self.llist.add(3) def test_add(self): self.llist.addFirst(10) self.assertEqual(repr(self.llist), '[10, 1, 2, 3]') self.assertEqual(self.llist.last.data, 3) self.assertEqual(self.llist.head.data, 10) def test_remove(self): self.llist.add(4) self.llist.add(5) self.assertEqual(repr(self.llist), '[1, 2, 3, 4, 5]') self.llist.removeFirst() self.assertEqual(repr(self.llist), '[2, 3, 4, 5]') self.assertEqual(self.llist.head.data, 2) self.llist.removeAt(3) self.assertEqual(repr(self.llist), '[2, 3, 4]') self.llist.remove(3) self.assertEqual(repr(self.llist), '[2, 4]') self.assertEqual(self.llist.last.data, 4) self.assertEqual(self.llist.head.data, 2) def test_aux_methods(self): self.llist.add(4) self.llist.add(5) self.assertEqual(repr(self.llist), '[1, 2, 3, 4, 5]') self.assertEqual(self.llist.indexOf(10), -1) self.assertEqual(self.llist.indexOf(1), 0) self.assertTrue(self.llist.contains(4)) self.assertFalse(self.llist.isEmpty()) self.assertEqual(len(self.llist), 5)
class Stack: """ Implementation of stack with linked list """ def __init__(self): self.llist = LinkedList() def push(self, value): self.llist.addFirst(value) def pop(self): return self.llist.removeFirst() def peek(self): return self.llist.peekFirst() def __len__(self): return len(self.llist) def isEmpty(self): return self.llist.isEmpty() def __repr__(self): return self.llist.__repr__()