def test_item_inset(self): P = Item('a', ['b', 'c']) Q = Item('a', ('b', 'c')) s = set() s.add(P) s.add(Q) self.assertEqual(len(s), 1)
def test_transition_setofitems(self): self.assertEqual('{A -> •B}-label->{C -> •D}', str(Transition({Item('A', ('B', ))}, 'label', {Item('C', ('D',))})))
def test_transition_tupleofitems(self): self.assertEqual( '(A -> •B)-label->(C -> •D)', str( Transition((Item('A', ('B', )), ), 'label', (Item('C', ('D', )), ))))
def test_item_eqo(self): self.assertFalse(Item('a', ('b', )) == object())
def test_item_totalorder(self): self.assertTrue(Item('a', ('b', 'c'), 2) > Item('a', ('b', 'c'), 1))
def test_item_wrong_pos(self): with self.assertRaises(ValueError): Item('A', ('B', ), 2)
def test_item_nosymbol_after_dot(self): self.assertIsNone(Item('A', ('B', 'C'), 2).symbol_after_dot())
def test_item_wrong_lhs(self): with self.assertRaises(ValueError): Item(1, ['a'])
def test_item_symbol_after_dot(self): self.assertEqual('B', Item('A', ('x', 'B'), 1).symbol_after_dot())
def test_item_notadvance(self): self.assertIsNone(Item('A', ('B', 'C')).advance('x'))
def test_item_advance(self): self.assertEqual(Item('A', ('x', 'B'), 1), Item('A', ('x', 'B')).advance('x'))
def test_item_unpack(self): lhs, rhs, pos = Item('a', ['b', 'c'], 1) self.assertEqual(('a', ('b', 'c'), 1), (lhs, rhs, pos))
def test_item_lto(self): self.assertIs(Item('a', ('b', )).__lt__(object()), NotImplemented)