Open AngelicHedgehog opened 9 months ago
Требуется обновить тесты преобразования КА в регулярку на более содержательные, пограничные и верные
@xendalm says:
Сохранение языка повлияет на тестирование. Я заметил, что мы когда-то написали глупый тест, который не будет ничего проверять. Regex reg(rgx_str); ASSERT_TRUE(Regex::equivalent(reg, reg.to_thompson().to_regex())); Здесь to_regex() будет возвращать нам регулярку в языке исходной. А значит метод equivalent, который проверяет на равенство как раз минимальные автоматы, не будет их строить и просто вернет истину. Должно быть что-то типа такого: auto test_equivalence = [](const string& rgx_str) { Regex r1(rgx_str), r2(rgx_str); ASSERT_TRUE(Regex::equivalent(r1, r2.to_thompson().to_regex())); ASSERT_TRUE(Regex::equivalent(r1, r2.to_glushkov().to_regex())); ASSERT_TRUE(Regex::equivalent(r1, r2.to_ilieyu().to_regex())); ASSERT_TRUE(Regex::equivalent(r1, r2.to_antimirov().to_regex())); }; Понимаю, что это совсем не очевидно на первый взгляд. Можно будет потом как-нибудь ввести тестовый режим, при котором, кэширование отключается.
Сохранение языка повлияет на тестирование. Я заметил, что мы когда-то написали глупый тест, который не будет ничего проверять.
Regex reg(rgx_str); ASSERT_TRUE(Regex::equivalent(reg, reg.to_thompson().to_regex()));
Здесь to_regex() будет возвращать нам регулярку в языке исходной. А значит метод equivalent, который проверяет на равенство как раз минимальные автоматы, не будет их строить и просто вернет истину. Должно быть что-то типа такого:
auto test_equivalence = [](const string& rgx_str) { Regex r1(rgx_str), r2(rgx_str); ASSERT_TRUE(Regex::equivalent(r1, r2.to_thompson().to_regex())); ASSERT_TRUE(Regex::equivalent(r1, r2.to_glushkov().to_regex())); ASSERT_TRUE(Regex::equivalent(r1, r2.to_ilieyu().to_regex())); ASSERT_TRUE(Regex::equivalent(r1, r2.to_antimirov().to_regex())); };
Понимаю, что это совсем не очевидно на первый взгляд. Можно будет потом как-нибудь ввести тестовый режим, при котором, кэширование отключается.
Тесты могут быть не обязательно на эквивалентность. Краевые кейсы ардена, наверное, логичнее проверять через to_txt() == "..."
Из юнитов все же ещё надо убрать лишнее и дополнить осмысленными кейсами
Требуется обновить тесты преобразования КА в регулярку на более содержательные, пограничные и верные
@xendalm says: