Skip to content

Commit

Permalink
Merge pull request #334 from OnionGrief/bisim
Browse files Browse the repository at this point in the history
(#330) stupid (me) test
  • Loading branch information
xendalm authored Apr 17, 2024
2 parents cb6bf63 + bb37386 commit d07cf3e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
16 changes: 15 additions & 1 deletion apps/MetamorphicTestsApp/src/MetamorphicTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ std::string MetamorphicTests::generate_bregex(RegexGenerator& rg, int cells_num)
bool condition;
do {
condition = true;
rgx_str = patch(BackRefRegex(rg.generate_brefregex(2, 70, 60)).to_txt());
rgx_str = patch(BackRefRegex(rg.generate_brefregex(cells_num, 70, 60)).to_txt());
r = BackRefRegex(rgx_str);

condition &=
Expand Down Expand Up @@ -164,4 +164,18 @@ TEST(TestMFA, ToTxt) {

MetamorphicTests::cmp_automatons(mfa1, mfa2);
}
}

TEST(TestBisimilar, MFA_Bisimilar) {
RegexGenerator rg(5, 3, 3, 2);
for (int i = 0; i < RegexNumber; i++) {
string rgx_str = MetamorphicTests::generate_bregex(rg, 1);
SCOPED_TRACE("Regex: " + rgx_str);
BackRefRegex r = BackRefRegex(rgx_str);
MemoryFiniteAutomaton mfa = r.to_mfa_additional();

ASSERT_TRUE(MemoryFiniteAutomaton::action_bisimilar(mfa, mfa));
ASSERT_TRUE(MemoryFiniteAutomaton::literally_bisimilar(mfa, mfa));
ASSERT_TRUE(MemoryFiniteAutomaton::bisimilar(mfa, mfa).value());
}
}
8 changes: 6 additions & 2 deletions libs/Objects/src/MemoryFiniteAutomaton.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1374,7 +1374,8 @@ vector<CaptureGroup> MemoryFiniteAutomaton::find_capture_groups_backward(
++it;
}
}
res.emplace_back(cell, traces, fa_classes);
if (!traces.empty())
res.emplace_back(cell, traces, fa_classes);
}
return res;
}
Expand Down Expand Up @@ -1492,10 +1493,13 @@ optional<bool> MemoryFiniteAutomaton::bisimilarity_checker(const MemoryFiniteAut
pairs_to_calc; // {номер ячейки, состояние первого автомата, состояние второго}
for (const auto& [fa1_st, fa1_st_incoming_refs] : incoming_refs[0]) {
int fa1_st_class = fa_classes[0][fa1_st];
for (auto fa2_st : class_to_states[1].at(fa1_st_class))
for (auto fa2_st : class_to_states[1].at(fa1_st_class)) {
if (!incoming_refs[1].count(fa2_st))
continue;
for (auto fa2_st_incoming_ref : incoming_refs[1].at(fa2_st))
if (fa1_st_incoming_refs.count(fa2_st_incoming_ref))
pairs_to_calc.insert({fa2_st_incoming_ref, fa1_st, fa2_st});
}
}

// for (const auto& i : pairs_to_calc)
Expand Down

0 comments on commit d07cf3e

Please sign in to comment.