From bb3738658260cb563fffe37edfa89e19716bb555 Mon Sep 17 00:00:00 2001 From: Alexander Delman Date: Wed, 17 Apr 2024 15:04:32 +0300 Subject: [PATCH] (#330) stupid (me) test --- .../MetamorphicTestsApp/src/MetamorphicTests.cpp | 16 +++++++++++++++- libs/Objects/src/MemoryFiniteAutomaton.cpp | 8 ++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/apps/MetamorphicTestsApp/src/MetamorphicTests.cpp b/apps/MetamorphicTestsApp/src/MetamorphicTests.cpp index e67f2e7e..68251b1c 100644 --- a/apps/MetamorphicTestsApp/src/MetamorphicTests.cpp +++ b/apps/MetamorphicTestsApp/src/MetamorphicTests.cpp @@ -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 &= @@ -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()); + } } \ No newline at end of file diff --git a/libs/Objects/src/MemoryFiniteAutomaton.cpp b/libs/Objects/src/MemoryFiniteAutomaton.cpp index 7fc543b3..9c911fd8 100644 --- a/libs/Objects/src/MemoryFiniteAutomaton.cpp +++ b/libs/Objects/src/MemoryFiniteAutomaton.cpp @@ -1374,7 +1374,8 @@ vector 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; } @@ -1492,10 +1493,13 @@ optional 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)