Странные провалы кросс-тестов ДКА

Issue #165 wontfix
Oleg Sychev repo owner created an issue

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)

  1. Oleg Sychev reporter
    9 снимается как ЧСК
    Остальное жду до 17 часов сегодня...
    

    Reported by oasychev on 2012-12-10 10:07:04

  2. Oleg Sychev reporter
    И не забудьте обновится перед правками....
    

    Reported by oasychev on 2012-12-10 10:27:36

  3. Former user Account Deleted
    Исправил отрицательные СК и нулевые квантификаторы, изменения в клоне.
    

    Reported by Xapuyc7 on 2012-12-10 13:06:57

  4. Oleg Sychev reporter
    А устаревший вывод wordchar/stringstart?
    

    Reported by oasychev on 2012-12-10 13:15:02

  5. Former user Account Deleted
    В процессе устранения.
    

    Reported by Xapuyc7 on 2012-12-10 13:26:54

  6. Oleg Sychev reporter
    Кто вас учил называть переменные с подчеркиваниями в Moodle? Когда будете соблюдать
    Coding Style?! 
    
    см. например последний коммит....
    

    Reported by oasychev on 2012-12-10 13:34:57

  7. Former user Account Deleted
    Исправил вордчар и подчеркивание.
    

    Reported by Xapuyc7 on 2012-12-10 13:40:33

  8. Oleg Sychev reporter
    По идее если stringstart в начале строки, то надо выводить следующий символ в next -
    из любого перехода из следующего состояния ДКА. А если не в начале, то надо возвращать
    что продолжить вообще нельзя (хотя бы пока).
    Остальные - не вызывают трудностей, для $ надо просто обрезать строку (такой вариант
    вполне корректен и обработается вопросом), а для \b новый лист умеет генерировать все
    необходимые символы (пусть пока по-прежнему не учитывая наложение на след. символ,
    но пусть там будет хотя бы символ, похожий на правду, а не надпись wordchar
    

    Reported by oasychev on 2012-12-10 13:41:18

  9. Oleg Sychev reporter
    А два коммита на разные исправления сделать было конечно лень...
    

    Reported by oasychev on 2012-12-10 13:42:38

  10. Former user Account Deleted
    Похожий на правду символ? Сдающий тест примет его как подсказку, введет и обнаружит,
    что он не подходит, разве это хорошо? 
    

    Reported by Xapuyc7 on 2012-12-10 13:45:53

  11. Former user Account Deleted
    А разве в начале строки может выскочить стрингстарт? В начале строки крышечка совпадет
    и требовать символ не будет.
    

    Reported by Xapuyc7 on 2012-12-10 13:47:40

  12. Oleg Sychev reporter
    Ну баг будет, он и есть. Пока еще никому не выскочил :) Совершенно левая надпись хуже...
    
    С $ работает как указано?
    

    Reported by oasychev on 2012-12-10 13:51:21

  13. Oleg Sychev reporter
    Так что там с $, итоговая строка обрезается так, чтобы $ работал? Ответьте быстро.
    По хорошему конечно надо проверить, нет ли символов за $ - тогда возвращать невозможность,
    но это необязательно...
    

    Reported by oasychev on 2012-12-10 14:01:09

  14. Former user Account Deleted
    В случае с долларом строка обрезается на месте окончания совпадения. Проверить символы
    за ним отдельная история.
    

    Reported by Xapuyc7 on 2012-12-10 14:39:33

  15. Oleg Sychev reporter
    Пока с долларом нормально.
    

    Reported by oasychev on 2012-12-10 14:41:25

  16. Former user Account Deleted
    Так сейчас выскакивает не левая надпись, а ничего, разве так не лучше? Хотя бы место
    обрыва покажем, а не угадайку верный\неверный символ. Без проверки связи с основным
    регексом там лотерея будет, разве нет?
    

    Reported by Xapuyc7 on 2012-12-10 14:45:22

  17. Oleg Sychev reporter
    Для доллара нормально, вы вопрос в деле смотрели? Он достаточно умен чтобы показать
    студенту лишнее - зачеркнутым, мол удали его...
    
    А ошибки типа доллара за которым что-то еще следует (с чем в принципе ничего совпасть
    не может в однострочном варианте) в реальности все-же редко случаются...
    

    Reported by oasychev on 2012-12-10 14:48:36

  18. Former user Account Deleted
    Т.е. на вордчар выдавать любой символ слова, на не вордчар любой не символ слова, так?
    Просто любой, хоть всегда букву "а" вываливать, так?
    

    Reported by Xapuyc7 on 2012-12-10 14:51:51

  19. Oleg Sychev reporter
    На вордчар генерировать через лист \w , не вордчар - \W.
    
    Они позже могут начать учитывать предпочитаемый юзером алфавит и т.д.
    

    Reported by oasychev on 2012-12-10 14:55:03

  20. Former user Account Deleted
    ОК. 5 минут, примерно.
    

    Reported by Xapuyc7 on 2012-12-10 14:55:59

  21. Oleg Sychev 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

  22. Oleg Sychev reporter
    Похоже ДКА матчер далее поддерживаться не будет...
    

    Reported by oasychev on 2013-09-07 14:44:25 - Status changed: WontFix

  23. Log in to comment