Странные провалы кросс-тестов ДКА
Originally reported on Google Code with ID 165
Прошу обратить внимание и исследовать - не похоже, чтобы эти были связаны с ассертами
и ЧСК.
1) Не учли возможность нулевого квантификатора? Должно быть несложно исправитьdfa_matcher
failed on regex 'a{0}b' and string 'ab' (qtype_preg_cross_tests_from_att_basic, data_for_test_att_basic_25
INDEX_FIRST: 0=>0,
expected:
INDEX_FIRST: 0=>1,
dfa_matcher failed on regex 'a{0}b' and string 'ab' (qtype_preg_cross_tests_from_att_basic,
data_for_test_att_basic_25
LENGTH: 0=>2,
expected:
LENGTH: 0=>1,
и еще
dfa_matcher failed on regex '^(a){0,0}' and string 'abc' (qtype_preg_cross_tests_from_pcre,
data_for_test_subpattern_in_null_quantifier
LENGTH: 0=>1,
expected:
LENGTH: 0=>0,
dfa_matcher failed on regex '^(a){0,0}' and string 'aab' (qtype_preg_cross_tests_from_pcre,
data_for_test_subpattern_in_null_quantifier
LENGTH: 0=>2,
expected:
LENGTH: 0=>0,
2) Как мог минус совпасть с классом "не минус"? НКА этот тест проходит, так что проблема
не в листе дерева, а где-то еще. Не передаете отрицательность?
dfa_matcher failed on regex '[^-]' and string '--a' (qtype_preg_cross_tests_from_att_basic,
data_for_test_att_basic_48
INDEX_FIRST: 0=>0,
expected:
INDEX_FIRST: 0=>2,
3) Опять проблема с отрицательными СК
dfa_matcher failed on regex '[^ab]*' and string 'cde' (qtype_preg_cross_tests_from_att_basic,
data_for_test_att_basic_124
LENGTH: 0=>0,
expected:
LENGTH: 0=>3,
4) При одинаковой длине левое совпадение должно выигрывать, значит оно не находится?
dfa_matcher failed on regex '(^)*' and string '-' (qtype_preg_cross_tests_from_att_basic,
data_for_test_att_basic_125
INDEX_FIRST: 0=>1,
expected:
INDEX_FIRST: 0=>0, 1=>0,
5)Вот это сложно назвать ЧСК, т.к. классы не пересекаются
dfa_matcher failed on regex '^([^!]+!)?([^!]+)$' and string 'bar!bas' (qtype_preg_cross_tests_from_att_basic,
data_for_test_att_basic_179
IS_MATCH: FALSE
expected:
IS_MATCH: TRUE
dfa_matcher failed on regex '^([^!]+!)?([^!]+)$' and string 'bar!bas' (qtype_preg_cross_tests_from_att_basic,
data_for_test_att_basic_179
FULL: FALSE
expected:
FULL: TRUE
dfa_matcher failed on regex '^([^!]+!)?([^!]+)$' and string 'bar!bas' (qtype_preg_cross_tests_from_att_basic,
data_for_test_att_basic_179
INDEX_FIRST: 0=>-1, 1=>-1, 2=>-1,
expected:
INDEX_FIRST: 0=>0, 1=>0, 2=>4,
dfa_matcher failed on regex '^([^!]+!)?([^!]+)$' and string 'bar!bas' (qtype_preg_cross_tests_from_att_basic,
data_for_test_att_basic_179
LENGTH: 0=>-1, 1=>-1, 2=>-1,
expected:
LENGTH: 0=>7, 1=>4, 2=>3,
6) Эти и следующие тесты сложно списать на ЧСК, т.к. класс то один. И ассерт впереди
особо мешать не должен, т.к. банально конкатенирован. Опять проблемы с отрицательными
классами?
dfa_matcher failed on regex '^[^ab\]cde]' and string 'fthing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
IS_MATCH: FALSE
expected:
IS_MATCH: TRUE
dfa_matcher failed on regex '^[^ab\]cde]' and string 'fthing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
FULL: FALSE
expected:
FULL: TRUE
dfa_matcher failed on regex '^[^ab\]cde]' and string 'fthing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
INDEX_FIRST: 0=>-1,
expected:
INDEX_FIRST: 0=>0,
dfa_matcher failed on regex '^[^ab\]cde]' and string 'fthing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
LENGTH: 0=>-1,
expected:
LENGTH: 0=>1,
dfa_matcher failed on regex '^[^ab\]cde]' and string '[thing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
IS_MATCH: FALSE
expected:
IS_MATCH: TRUE
dfa_matcher failed on regex '^[^ab\]cde]' and string '[thing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
FULL: FALSE
expected:
FULL: TRUE
dfa_matcher failed on regex '^[^ab\]cde]' and string '[thing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
INDEX_FIRST: 0=>-1,
expected:
INDEX_FIRST: 0=>0,
dfa_matcher failed on regex '^[^ab\]cde]' and string '[thing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
LENGTH: 0=>-1,
expected:
LENGTH: 0=>1,
dfa_matcher failed on regex '^[^ab\]cde]' and string '\thing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
IS_MATCH: FALSE
expected:
IS_MATCH: TRUE
dfa_matcher failed on regex '^[^ab\]cde]' and string '\thing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
FULL: FALSE
expected:
FULL: TRUE
dfa_matcher failed on regex '^[^ab\]cde]' and string '\thing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
INDEX_FIRST: 0=>-1,
expected:
INDEX_FIRST: 0=>0,
dfa_matcher failed on regex '^[^ab\]cde]' and string '\thing' (qtype_preg_cross_tests_from_pcre,
data_for_test_square_closing_bracket_in_negative_character_class
LENGTH: 0=>-1,
expected:
LENGTH: 0=>1,
И еще есть подобные тесты, какая-то специфическая проблема с отрицательными СК, возникающая
только в ДК. Разберитесь...
Их много. Вот еще один случай
dfa_matcher failed on regex '[^k]{2,3}$' and string 'abc' (qtype_preg_cross_tests_from_pcre,
data_for_test_negative_character_class_in_quantifier_before_end_of_line
IS_MATCH: FALSE
expected:
IS_MATCH: TRUE
dfa_matcher failed on regex '[^k]{2,3}$' and string 'abc' (qtype_preg_cross_tests_from_pcre,
data_for_test_negative_character_class_in_quantifier_before_end_of_line
FULL: FALSE
expected:
FULL: TRUE
dfa_matcher failed on regex '[^k]{2,3}$' and string 'abc' (qtype_preg_cross_tests_from_pcre,
data_for_test_negative_character_class_in_quantifier_before_end_of_line
INDEX_FIRST: 0=>-1,
expected:
INDEX_FIRST: 0=>0,
dfa_matcher failed on regex '[^k]{2,3}$' and string 'abc' (qtype_preg_cross_tests_from_pcre,
data_for_test_negative_character_class_in_quantifier_before_end_of_line
LENGTH: 0=>-1,
expected:
LENGTH: 0=>3,
dfa_matcher failed on regex '[^k]{2,3}$' and string 'kbc' (qtype_preg_cross_tests_from_pcre,
data_for_test_negative_character_class_in_quantifier_before_end_of_line
FULL: FALSE
expected:
FULL: TRUE
dfa_matcher failed on regex '[^k]{2,3}$' and string 'kbc' (qtype_preg_cross_tests_from_pcre,
data_for_test_negative_character_class_in_quantifier_before_end_of_line
INDEX_FIRST: 0=>0,
expected:
INDEX_FIRST: 0=>1,
dfa_matcher failed on regex '[^k]{2,3}$' and string 'kbc' (qtype_preg_cross_tests_from_pcre,
data_for_test_negative_character_class_in_quantifier_before_end_of_line
LENGTH: 0=>1,
expected:
LENGTH: 0=>2,
7) Пора избавляться от таких надписей в продолжении, т.к. оно теперь интерпретируется
как совпадение. Новая реализация символьных классов вполне способна сгенерировать символ
слова (или не символ слова), так используйте ее!
dfa_matcher failed on regex '\by\b' and string 'yz' (qtype_preg_cross_tests_from_pcre,
data_for_test_word_2
NEXT: wordchar
expected:
NEXT:
8)Очень странный провал, как могла пустота совпасть с буквой d? ЧСК тут ну явно не
причем. Какая-то проблема с пустотой, есть и еще провалы с пустой подмаской, проверьте
преобразование подмаски...
dfa_matcher failed on regex '()ef' and string 'def' (qtype_preg_cross_tests_from_pcre,
data_for_test_empty_subpattern
INDEX_FIRST: 0=>0,
expected:
INDEX_FIRST: 0=>1, 1=>1,
dfa_matcher failed on regex '()ef' and string 'def' (qtype_preg_cross_tests_from_pcre,
data_for_test_empty_subpattern
LENGTH: 0=>3,
expected:
LENGTH: 0=>2, 1=>0,
9) Как здесь может быть совпадение длиной 2? 1 понимаю, 3 понимаю - 2 не понимаю...
dfa_matcher failed on regex '(?:..)*a' and string 'aba' (qtype_preg_cross_tests_from_pcre,
data_for_test_any_characters_in_unnumbered_subpattern_in_greedy_quantifier
FULL: FALSE
expected:
FULL: TRUE
dfa_matcher failed on regex '(?:..)*a' and string 'aba' (qtype_preg_cross_tests_from_pcre,
data_for_test_any_characters_in_unnumbered_subpattern_in_greedy_quantifier
INDEX_FIRST: 0=>1,
expected:
INDEX_FIRST: 0=>0,
dfa_matcher failed on regex '(?:..)*a' and string 'aba' (qtype_preg_cross_tests_from_pcre,
data_for_test_any_characters_in_unnumbered_subpattern_in_greedy_quantifier
LENGTH: 0=>2,
expected:
LENGTH: 0=>3,
10) Точно также, по новому формату никаких надписей о начале строки в next быть не
должно, т.к. оно возвращается как еще один результат матчинга. Не можете сгенерировать
следующий символ (хотя с крышкой это как раз легко, возьмите любой следующий переход
автомата...) - хотя бы выведите пустую строку...
dfa_matcher failed on regex '()^b' and string '*** Failers' (qtype_preg_cross_tests_from_pcre,
data_for_test_begin_of_line_after_empty_subpattern
NEXT: stringstart
expected:
NEXT: b
Жду от вас анализа проблем по этим пунктам и исправлений (максимум - к понедельнику,
но лучше - раньше, т.к. мне надоело откладывать релиз), либо объяснений, почему они
не могут быть сделаны...
Reported by oasychev
on 2012-12-04 21:14:16
Comments (24)
-
reporter -
reporter И не забудьте обновится перед правками....
Reported by
oasychev
on 2012-12-10 10:27:36 -
Account Deleted Исправил отрицательные СК и нулевые квантификаторы, изменения в клоне.
Reported by
Xapuyc7
on 2012-12-10 13:06:57 -
reporter А устаревший вывод wordchar/stringstart?
Reported by
oasychev
on 2012-12-10 13:15:02 -
Account Deleted В процессе устранения.
Reported by
Xapuyc7
on 2012-12-10 13:26:54 -
reporter Кто вас учил называть переменные с подчеркиваниями в Moodle? Когда будете соблюдать Coding Style?! см. например последний коммит....
Reported by
oasychev
on 2012-12-10 13:34:57 -
Account Deleted Исправил вордчар и подчеркивание.
Reported by
Xapuyc7
on 2012-12-10 13:40:33 -
reporter По идее если stringstart в начале строки, то надо выводить следующий символ в next - из любого перехода из следующего состояния ДКА. А если не в начале, то надо возвращать что продолжить вообще нельзя (хотя бы пока). Остальные - не вызывают трудностей, для $ надо просто обрезать строку (такой вариант вполне корректен и обработается вопросом), а для \b новый лист умеет генерировать все необходимые символы (пусть пока по-прежнему не учитывая наложение на след. символ, но пусть там будет хотя бы символ, похожий на правду, а не надпись wordchar
Reported by
oasychev
on 2012-12-10 13:41:18 -
reporter А два коммита на разные исправления сделать было конечно лень...
Reported by
oasychev
on 2012-12-10 13:42:38 -
Account Deleted Похожий на правду символ? Сдающий тест примет его как подсказку, введет и обнаружит, что он не подходит, разве это хорошо?
Reported by
Xapuyc7
on 2012-12-10 13:45:53 -
Account Deleted А разве в начале строки может выскочить стрингстарт? В начале строки крышечка совпадет и требовать символ не будет.
Reported by
Xapuyc7
on 2012-12-10 13:47:40 -
reporter Ну баг будет, он и есть. Пока еще никому не выскочил :) Совершенно левая надпись хуже... С $ работает как указано?
Reported by
oasychev
on 2012-12-10 13:51:21 -
reporter Так что там с $, итоговая строка обрезается так, чтобы $ работал? Ответьте быстро. По хорошему конечно надо проверить, нет ли символов за $ - тогда возвращать невозможность, но это необязательно...
Reported by
oasychev
on 2012-12-10 14:01:09 -
Account Deleted В случае с долларом строка обрезается на месте окончания совпадения. Проверить символы за ним отдельная история.
Reported by
Xapuyc7
on 2012-12-10 14:39:33 -
reporter Пока с долларом нормально.
Reported by
oasychev
on 2012-12-10 14:41:25 -
Account Deleted Так сейчас выскакивает не левая надпись, а ничего, разве так не лучше? Хотя бы место обрыва покажем, а не угадайку верный\неверный символ. Без проверки связи с основным регексом там лотерея будет, разве нет?
Reported by
Xapuyc7
on 2012-12-10 14:45:22 -
reporter Для доллара нормально, вы вопрос в деле смотрели? Он достаточно умен чтобы показать студенту лишнее - зачеркнутым, мол удали его... А ошибки типа доллара за которым что-то еще следует (с чем в принципе ничего совпасть не может в однострочном варианте) в реальности все-же редко случаются...
Reported by
oasychev
on 2012-12-10 14:48:36 -
Account Deleted Т.е. на вордчар выдавать любой символ слова, на не вордчар любой не символ слова, так? Просто любой, хоть всегда букву "а" вываливать, так?
Reported by
Xapuyc7
on 2012-12-10 14:51:51 -
reporter На вордчар генерировать через лист \w , не вордчар - \W. Они позже могут начать учитывать предпочитаемый юзером алфавит и т.д.
Reported by
oasychev
on 2012-12-10 14:55:03 -
Account Deleted ОК. 5 минут, примерно.
Reported by
Xapuyc7
on 2012-12-10 14:55:59 -
Account Deleted Готово.
Reported by
Xapuyc7
on 2012-12-10 15:11:21 -
reporter 11) Вот в этом тесте при всем желании не смог найти ЧСК - ну все последовательные классы не пересекаются: dfa_matcher failed on regex '^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$' and string '1 IN SOA non-sp1 non-sp2(' (qtype_preg_cross_tests_from_pcre, data_for_test_space_and_not_space_characters_in_quantifiers_and_subpatterns FULL: FALSE expected: FULL: TRUE dfa_matcher failed on regex '^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$' and string '1 IN SOA non-sp1 non-sp2 (' (qtype_preg_cross_tests_from_pcre, data_for_test_space_and_not_space_characters_in_quantifiers_and_subpatterns FULL: FALSE expected: FULL: TRUE 12)Пустота по прежнему глючит? dfa_matcher failed on regex '()ef' and string 'def' (qtype_preg_cross_tests_from_pcre, data_for_test_empty_subpattern INDEX_FIRST: 0=>0, expected: INDEX_FIRST: 0=>1, 1=>1, dfa_matcher failed on regex '()ef' and string 'def' (qtype_preg_cross_tests_from_pcre, data_for_test_empty_subpattern LENGTH: 0=>3, expected: LENGTH: 0=>2, 1=>0, dfa_matcher failed on regex '^(){3,5}' and string 'abc' (qtype_preg_cross_tests_from_pcre, data_for_test_empty_subpattern_in_quantifier LENGTH: 0=>3, expected: LENGTH: 0=>0, 1=>0, 13)Как показывает проверка, некоторые случаи нулевых квантификаторов не исправлены: dfa_matcher failed on regex 'ab[cd]{0,0}e' and string 'abcde ' (qtype_preg_cross_tests_from_pcre, data_for_test_character_class_in_null_quantifier FULL: TRUE expected: FULL: FALSE dfa_matcher failed on regex 'ab[cd]{0,0}e' and string 'abcde ' (qtype_preg_cross_tests_from_pcre, data_for_test_character_class_in_null_quantifier LENGTH: 0=>5, expected: LENGTH: 0=>2, dfa_matcher failed on regex 'ab[cd]{0,0}e' and string 'abcde ' (qtype_preg_cross_tests_from_pcre, data_for_test_character_class_in_null_quantifier NEXT: expected: NEXT: e dfa_matcher failed on regex 'ab[cd]{0,0}e' and string 'abcde ' (qtype_preg_cross_tests_from_pcre, data_for_test_character_class_in_null_quantifier LEFT: 0 expected: LEFT: 1 dfa_matcher failed on regex 'ab(c){0,0}d' and string 'abcd' (qtype_preg_cross_tests_from_pcre, data_for_test_subpattern_in_null_quantifier_2 FULL: TRUE expected: FULL: FALSE dfa_matcher failed on regex 'ab(c){0,0}d' and string 'abcd' (qtype_preg_cross_tests_from_pcre, data_for_test_subpattern_in_null_quantifier_2 LENGTH: 0=>4, expected: LENGTH: 0=>2, dfa_matcher failed on regex 'ab(c){0,0}d' and string 'abcd' (qtype_preg_cross_tests_from_pcre, data_for_test_subpattern_in_null_quantifier_2 NEXT: expected: NEXT: d dfa_matcher failed on regex 'ab(c){0,0}d' and string 'abcd' (qtype_preg_cross_tests_from_pcre, data_for_test_subpattern_in_null_quantifier_2 LEFT: 0 expected: LEFT: 1 dfa_matcher failed on regex 'ab\d{0}e' and string 'ab1e' (qtype_preg_cross_tests_from_pcre, data_for_test_digit_in_null_quantifier FULL: TRUE expected: FULL: FALSE dfa_matcher failed on regex 'ab\d{0}e' and string 'ab1e' (qtype_preg_cross_tests_from_pcre, data_for_test_digit_in_null_quantifier LENGTH: 0=>4, expected: LENGTH: 0=>2, dfa_matcher failed on regex 'ab\d{0}e' and string 'ab1e' (qtype_preg_cross_tests_from_pcre, data_for_test_digit_in_null_quantifier NEXT: expected: NEXT: e dfa_matcher failed on regex 'ab\d{0}e' and string 'ab1e' (qtype_preg_cross_tests_from_pcre, data_for_test_digit_in_null_quantifier LEFT: 0 expected: LEFT: 1 14) проблемы с юникодом при генерации продолжения dfa_matcher failed on regex 'абвé' and string 'абв' (qtype_preg_cross_tests_from_preg, data_for_test_unicode NEXT: у expected: NEXT: é
Reported by
oasychev
on 2012-12-12 10:51:24 -
reporter Issue 39 has been merged into this issue.
Reported by
oasychev
on 2013-01-27 15:57:02 -
reporter Похоже ДКА матчер далее поддерживаться не будет...
Reported by
oasychev
on 2013-09-07 14:44:25 - Status changed:WontFix
- Log in to comment
Reported by
oasychev
on 2012-12-10 10:07:04