Skip to content

Commit c5191b0

Browse files
Added a few knuth-bendix tests (#25)
* added a few knuth-bendix tests * fixed linting * Fix linting Co-authored-by: James D. Mitchell <jdm3@st-andrews.ac.uk>
1 parent 1acd972 commit c5191b0

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

tests/test_knuth_bendix.py

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,106 @@ def test_attributes(self):
6262
def test_operators(self):
6363
check_operators(self, KnuthBendix)
6464

65+
# Tests from libsemigroups
66+
def test_006(self):
67+
kb = KnuthBendix()
68+
kb.set_alphabet("ab")
69+
kb.add_rule("aa", "")
70+
kb.add_rule("bbb", "")
71+
kb.add_rule("ababab", "")
72+
self.assertFalse(kb.confluent())
73+
kb.run()
74+
self.assertEqual(kb.size(), 12)
75+
self.assertTrue(kb.confluent())
76+
77+
def test_009(self):
78+
kb = KnuthBendix()
79+
kb.set_alphabet("012")
80+
kb.add_rule("000", "2")
81+
kb.add_rule("111", "2")
82+
kb.add_rule("010101", "2")
83+
kb.set_identity("2")
84+
self.assertEqual(kb.alphabet(), "012")
85+
self.assertFalse(kb.confluent())
86+
kb.run()
87+
self.assertTrue(kb.confluent())
88+
self.assertEqual(kb.number_of_active_rules(), 9)
89+
ad = kb.gilman_digraph()
90+
self.assertEqual(ad.number_of_nodes(), 9)
91+
self.assertEqual(ad.number_of_edges(), 13)
92+
93+
def test_022(self):
94+
kb = KnuthBendix()
95+
kb.set_alphabet("aAbBcC")
96+
kb.set_identity("")
97+
kb.set_inverses("AaBbCc")
98+
kb.add_rule("Aba", "bb")
99+
kb.add_rule("Bcb", "cc")
100+
kb.add_rule("Cac", "aa")
101+
self.assertFalse(kb.confluent())
102+
kb.run()
103+
self.assertTrue(kb.confluent())
104+
self.assertTrue(kb.equal_to("Aba", "bb"))
105+
self.assertTrue(kb.equal_to("Bcb", "cc"))
106+
self.assertTrue(kb.equal_to("Cac", "aa"))
107+
self.assertEqual(kb.size(), 1)
108+
109+
def test_024(self):
110+
kb = KnuthBendix()
111+
kb.set_alphabet("abAB")
112+
kb.set_identity("")
113+
kb.set_inverses("ABab")
114+
kb.add_rule("aaa", "")
115+
kb.add_rule("bbb", "")
116+
kb.add_rule("abababab", "")
117+
kb.add_rule("aBaBaBaBaB", "")
118+
self.assertFalse(kb.confluent())
119+
kb.run()
120+
self.assertTrue(kb.confluent())
121+
self.assertEqual(kb.number_of_active_rules(), 183)
122+
self.assertTrue(kb.equal_to("aaa", ""))
123+
self.assertTrue(kb.equal_to("bbb", ""))
124+
self.assertTrue(kb.equal_to("BaBaBaBaB", "aa"))
125+
self.assertTrue(kb.equal_to("bababa", "aabb"))
126+
self.assertTrue(kb.equal_to("ababab", "bbaa"))
127+
self.assertTrue(kb.equal_to("aabbaa", "babab"))
128+
self.assertTrue(kb.equal_to("bbaabb", "ababa"))
129+
self.assertTrue(kb.equal_to("bababbabab", "aabbabbaa"))
130+
self.assertTrue(kb.equal_to("ababaababa", "bbaabaabb"))
131+
self.assertTrue(kb.equal_to("bababbabaababa", "aabbabbaabaabb"))
132+
self.assertTrue(kb.equal_to("bbaabaabbabbaa", "ababaababbabab"))
133+
134+
def test_025(self):
135+
kb = KnuthBendix()
136+
kb.set_alphabet("aAbB")
137+
kb.set_identity("")
138+
kb.set_inverses("AaBb")
139+
self.assertTrue(kb.confluent())
140+
kb.run()
141+
self.assertTrue(kb.confluent())
142+
self.assertTrue(kb.is_obviously_infinite())
143+
144+
def test_027(self):
145+
kb = KnuthBendix()
146+
kb.set_alphabet("abB")
147+
kb.add_rule("bb", "B")
148+
kb.add_rule("BaB", "aba")
149+
self.assertFalse(kb.confluent())
150+
kb.run()
151+
self.assertTrue(kb.confluent())
152+
self.assertEqual(kb.number_of_active_rules(), 6)
153+
self.assertEqual(
154+
kb.active_rules(),
155+
[
156+
("Bb", "bB"),
157+
("bb", "B"),
158+
("BaB", "aba"),
159+
("BabB", "abab"),
160+
("Baaba", "abaaB"),
161+
("Bababa", "ababaB"),
162+
],
163+
)
164+
65165

66166
def test_running_and_state():
67167
check_running_and_state(KnuthBendix)

0 commit comments

Comments
 (0)