def test_shouldAddIntoGrammar(self): class Tmp1(_R): rule = ([NFirst], ['a', 0]) g = Grammar(terminals=['a', 0], nonterminals=[NFirst], rules=[Tmp1]) g.add_rule(Tmp1) self.assertEqual(g.get_rule(Tmp1), Tmp1)
def setUp(self): self.g = Grammar( terminals=[ 0, 1, 2, 'a', 'b', 'c', TFirst, TSecond, TThird, TInstFirst, TInstSecond, TInstThird ], nonterminals=[NFirst, NSecond, NThird, NFourth, NFifth])
def test_getTermTuple(self): gr = Grammar() gr.add_term([TempClass, 0, 'asdf']) g = gr.get_term((0, 'asdf')) for i in g: self.assertTrue(i.s in [TempClass, 0, 'asdf']) self.assertEqual(g[0].s, 0) self.assertEqual(g[1].s, 'asdf')
def test_oldStartSymbolShouldStaySame(self): g = Grammar(nonterminals=[A, B], start_symbol=A) self.assertTrue(g.start_isSet()) with self.assertRaises(NotNonterminalException): g.start_set('asdf') self.assertTrue(g.start_isSet()) self.assertTrue(g.start_is(A)) self.assertEqual(g.start_get(), A)
def test_equalGetTermAndTermMethods(self): gr = Grammar() ins = TempClass() gr.add_term(ins) self.assertEqual(gr.terms_count(), 1) self.assertEqual(gr.get_term(ins).s, ins) self.assertEqual(gr.term(ins).s, ins) self.assertEqual(gr.term(ins).s, gr.get_term(ins).s)
def test_shouldProcessInConstructor(self): class Tmp1(Rule): rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]), ([NSecond], [NSecond, 'a'])] self.g = Grammar( terminals=[ 0, 1, 2, 'a', 'b', 'c', TFirst, TSecond, TThird, TInstFirst, TInstSecond, TInstThird ], nonterminals=[NFirst, NSecond, NThird, NFourth, NFifth], rules=[Tmp1]) r = self.g.get_rule(Tmp1) self.assertIsInstance(r, list) self.assertEqual(len(r), 3) for rule in r: self.assertIn(rule.rule, Tmp1.rules)
def test_shouldNotSetStartSymbol(self): g = Grammar(nonterminals=[A]) self.assertFalse(g.start_isSet()) with self.assertRaises(NonterminalDoesNotExistsException): g.start_set(B) self.assertFalse(g.start_isSet()) self.assertFalse(g.start_is(B))
def test_shouldNotSetStartSymbol(self): g = Grammar(nonterminals=[A, B]) self.assertFalse(g.start_isSet()) with self.assertRaises(NotNonterminalException): g.start_set('asdf') self.assertFalse(g.start_isSet()) self.assertFalse(g.start_is('asdf'))
def test_addThreeInString(self): gr = Grammar(terminals='ABC') self.assertTrue(gr.have_term('A')) self.assertTrue(gr.have_term('B')) self.assertTrue(gr.have_term('C')) self.assertTrue(gr.have_term(('A', 'B', 'C'))) self.assertFalse(gr.have_term('D'))
class IterationTest(TestCase): def __init__(self, *args): super().__init__(*args) self.g = Grammar() def setUp(self): g = Grammar() g.add_term([0, 1, 2, 'a', 'b', 'c']) g.add_nonterm([NFirst, NSecond, NThird, NFourth]) self.g = g def test_oneRule(self): class Tmp(_R): rule = ([NFirst], ['a', 0]) self.g.add_rule(Tmp) r = self.g.rules() self.assertEqual(len(r), 1) self.assertEqual(r[0], Tmp) def test_multipleRules(self): class Tmp1(_R): rule = ([NFirst], ['a', 0]) class Tmp2(_R): rule = ([NSecond], ['a', 0, NFourth]) class Tmp3(_R): rule = ([NThird], [0]) self.g.add_rule([Tmp1, Tmp2, Tmp3]) r = self.g.rules() self.assertEqual(len(r), 3) for i in [Tmp1, Tmp2, Tmp3]: self.assertIn(i, r)
def test_addThreeInTuple(self): gr = Grammar(terminals=('A', 'B', 'C')) self.assertTrue(gr.have_term('A')) self.assertTrue(gr.have_term('B')) self.assertTrue(gr.have_term('C')) self.assertTrue(gr.have_term(['A', 'B', 'C'])) self.assertFalse(gr.have_term('D'))
def setUp(self): g = Grammar() g.add_term([0, 1, 2, 'a', 'b', 'c']) g.add_nonterm([NFirst, NSecond, NThird, NFourth]) self.g = g
class RulesTest(TestCase): def setUp(self): self.g = Grammar( terminals=[ 0, 1, 2, 'a', 'b', 'c', TFirst, TSecond, TThird, TInstFirst, TInstSecond, TInstThird ], nonterminals=[NFirst, NSecond, NThird, NFourth, NFifth]) def test_oneInRules(self): class Tmp1(Rule): rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]), ([NSecond], [NSecond, 'a'])] self.assertEqual([x.rule for x in self.g.add_rule(Tmp1)], Tmp1.rules) self.assertEqual(self.g.rules_count(), 3) self.assertTrue(self.g.have_rule(Tmp1)) def test_oneInRulesIteration(self): class Tmp1(Rule): rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]), ([NSecond], [NSecond, 'a'])] self.assertEqual([x.rule for x in self.g.add_rule(Tmp1)], Tmp1.rules) for rule in self.g.rule(): self.assertIn(rule.rule, Tmp1.rules) def test_hashes(self): class Tmp1(Rule): rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]), ([NSecond], [NSecond, 'a'])] class Tmp2(Rule): rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]), ([NSecond], [NSecond, 'a'])] hash1 = hash(Tmp1) hash2 = hash(Tmp2) self.assertEqual(Tmp1, Tmp2) self.assertEqual(hash1, hash2) def test_haveMultiple(self): class Tmp1(Rule): rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]), ([NSecond], [NSecond, 'a'])] class Tmp2(Rule): rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]), ([NSecond], [NSecond, 'a'])] class Tmp3(Rule): rules = [([NFirst], [NSecond, 0])] class Tmp4(Rule): rules = [([NThird], [0, 1])] class Tmp5(Rule): rule = ([NFifth], [EPS]) self.assertEqual([x.rule for x in self.g.add_rule(Tmp1)], Tmp1.rules) self.assertTrue(self.g.have_rule(Tmp2)) self.assertTrue(self.g.have_rule(Tmp3)) self.assertTrue(self.g.have_rule([Tmp3, Tmp4])) self.assertFalse(self.g.have_rule([Tmp3, Tmp5])) def test_shouldReturnArray(self): class Tmp1(Rule): rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]), ([NSecond], [NSecond, 'a'])] self.assertEqual([x.rule for x in self.g.add_rule(Tmp1)], Tmp1.rules) r = self.g.get_rule(Tmp1) self.assertIsInstance(r, list) self.assertEqual(len(r), 3) for rule in r: self.assertIn(rule.rule, Tmp1.rules) def test_shouldProcessInConstructor(self): class Tmp1(Rule): rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]), ([NSecond], [NSecond, 'a'])] self.g = Grammar( terminals=[ 0, 1, 2, 'a', 'b', 'c', TFirst, TSecond, TThird, TInstFirst, TInstSecond, TInstThird ], nonterminals=[NFirst, NSecond, NThird, NFourth, NFifth], rules=[Tmp1]) r = self.g.get_rule(Tmp1) self.assertIsInstance(r, list) self.assertEqual(len(r), 3) for rule in r: self.assertIn(rule.rule, Tmp1.rules) def test_unidefinedRules(self): class Tmp1(Rule): pass class Tmp2(Rule): pass h1 = hash(Tmp1) h2 = hash(Tmp2) self.assertNotEqual(h1, h2) self.assertNotEqual(Tmp1, Tmp2) Tmp1.rule = ([0], [0]) Tmp2.rule = ([0], [0]) h1 = hash(Tmp1) h2 = hash(Tmp2) self.assertEqual(h1, h2) self.assertEqual(Tmp1, Tmp2)
def test_ThreeTerminalGetTerm(self): gr = Grammar() gr.add_term([0, 'a', TempClass]) s = set(term.s for term in gr.get_term()) for i in [0, 'a', TempClass]: self.assertIn(i, s)
def test_ThreeTerminalTerms(self): gr = Grammar() gr.add_term([0, 'a', TempClass]) s = set(term.s for term in gr.terms()) for i in [0, 'a', TempClass]: self.assertTrue(i in s)
def test_oneTerminalGetTerm(self): gr = Grammar() gr.add_term('a') for i in gr.get_term(): self.assertEqual(i.s, 'a')
def test_shouldAddMoreNonterminals(self): g = Grammar(nonterminals=[A, B, C]) self.assertTrue(g.have_nonterm(A)) self.assertTrue(g.have_nonterm([A, B, C])) self.assertFalse(g.have_nonterm(D))
def test_dontHaveNontermTuple(self): gr = Grammar() gr.add_term([TempClass, Second]) self.assertFalse(gr.have_term((TempClass, Third)))
def test_haveNontermArray(self): gr = Grammar() gr.add_term([TempClass, Second, Third]) self.assertTrue(gr.have_term([Second, TempClass]))
def test_haveNontermEmpty(self): gr = Grammar() self.assertFalse(gr.have_nonterm(TempClass)) self.assertFalse(gr.have_nonterm(Second))
def __init__(self, *args): super().__init__(*args) self.g = Grammar()
def test_removeEmptyGrammar(self): gr = Grammar() self.assertEqual(gr.terms_count(), 0) gr.remove_term() self.assertEqual(gr.terms_count(), 0)
def test_haveNontermClass(self): gr = Grammar() gr.add_nonterm(TempClass) self.assertTrue(gr.have_nonterm(TempClass))
def test_add_remove_add_one(self): gr = Grammar() self.assertEqual(gr.terms_count(), 0) self.assertFalse(gr.have_term(0)) self.assertIsNone(gr.get_term(0)) self.assertIsNone(gr.term(0)) self.assertEqual(gr.add_term(0)[0].s, 0) self.assertEqual(gr.terms_count(), 1) self.assertIsNotNone(gr.get_term(0)) self.assertIsNotNone(gr.term(0)) self.assertTrue(isinstance(gr.term(0), Terminal)) self.assertEqual(gr.term(0).symbol(), 0) self.assertEqual(gr.remove_term(0)[0].s, 0) self.assertEqual(gr.terms_count(), 0) self.assertFalse(gr.have_term(0)) self.assertIsNone(gr.get_term(0)) self.assertIsNone(gr.term(0))
def test_haveNontermTuple(self): gr = Grammar() gr.add_term([TempClass, Second, Third]) self.assertTrue(gr.have_term((Third, TempClass)))
def test_addTwoRemoveOneAndAddThird(self): gr = Grammar() self.assertEqual(gr.add_term(0)[0].s, 0) self.assertEqual(gr.add_term('asdf')[0].s, 'asdf') self.assertEqual(gr.terms_count(), 2) self.assertIsNotNone(gr.get_term(0)) self.assertIsNotNone(gr.term(0)) self.assertTrue(isinstance(gr.term(0), Terminal)) self.assertEqual(gr.term(0).s, 0) self.assertIsNotNone(gr.get_term('asdf')) self.assertIsNotNone(gr.term('asdf')) self.assertTrue(isinstance(gr.term('asdf'), Terminal)) self.assertEqual(gr.term('asdf').s, 'asdf') self.assertEqual(gr.remove_term('asdf')[0].s, 'asdf') self.assertEqual(gr.terms_count(), 1) self.assertIsNotNone(gr.get_term(0)) self.assertIsNotNone(gr.term(0)) self.assertTrue(isinstance(gr.term(0), Terminal)) self.assertEqual(gr.term(0).s, 0) self.assertEqual(gr.add_term(TempClass)[0].s, TempClass) self.assertEqual(gr.terms_count(), 2) self.assertTrue(gr.have_term(0)) self.assertFalse(gr.have_term('asdf')) self.assertTrue(gr.have_term(TempClass))
def test_shouldAddOneNonterminal(self): g = Grammar(nonterminals=[A]) self.assertTrue(g.have_nonterm(A)) self.assertFalse(g.have_nonterm(B)) self.assertFalse(g.have_nonterm([A, B]))
def test_addThreeRemoveTwoInArray(self): gr = Grammar() add = gr.add_term([0, 'asdf', TempClass]) self.assertEqual(add[0].s, 0) self.assertEqual(add[1].s, 'asdf') self.assertEqual(add[2].s, TempClass) self.assertEqual(gr.terms_count(), 3) self.assertIsNotNone(gr.get_term(0)) self.assertIsNotNone(gr.term(0)) self.assertTrue(isinstance(gr.term(0), Terminal)) self.assertEqual(gr.term(0).s, 0) self.assertIsNotNone(gr.get_term('asdf')) self.assertIsNotNone(gr.term('asdf')) self.assertTrue(isinstance(gr.term('asdf'), Terminal)) self.assertEqual(gr.term('asdf').s, 'asdf') self.assertIsNotNone(gr.get_term(TempClass)) self.assertIsNotNone(gr.term(TempClass)) self.assertTrue(isinstance(gr.term(TempClass), Terminal)) self.assertEqual(gr.term(TempClass).s, TempClass) rem = gr.remove_term([0, 'asdf']) self.assertEqual(rem[0].s, 0) self.assertEqual(rem[1].s, 'asdf') self.assertEqual(gr.terms_count(), 1) self.assertTrue(gr.have_term(TempClass)) self.assertFalse(gr.have_term(0)) self.assertFalse(gr.have_term('asdf')) self.assertEqual(gr.add_term(0)[0].s, 0) self.assertEqual(gr.terms_count(), 2) self.assertTrue(gr.have_term(TempClass)) self.assertTrue(gr.have_term(0)) self.assertFalse(gr.have_term('asdf'))
def test_shouldNotAddOneInvalidNonterminal(self): with self.assertRaises(NotNonterminalException): Grammar(nonterminals=[A, B, 1])
def test_oneTerminalTerms(self): gr = Grammar() gr.add_term('a') for i in gr.terms(): self.assertEqual(i.s, 'a')