Почему ожидаемое не соответствует ожидаемому? - PullRequest
0 голосов
/ 25 апреля 2019

expect не соответствует ожидаемому от режима отладки в моем случае, и я не понимаю, почему ...

Часть связанного tcl похожа на это

...
set index 0
set p [lindex $propname $index]
send "prove -property {<embedded>::wrapper.$p}\r"
expect {
  "*proven\r\n\[<embedded>\] % " { 
        incr index
        if {$index == [llength $propname]} {
            send "exit\r"
            expect "*bash-4.2$ "
            send "exit\r"
            close
        }
        set p [lindex $propname $index]
        send "prove -property {<embedded>::wrapper.$p}\r"
        exp_continue
        }

  "*cex\r\n\[<embedded>\] % " { 
        send "visualize -violation -property <embedded>::wrapper.$p\r"
        expect "*\[<embedded>\] % "
        send "visualize -save -vcd cex.vcd -force\r"
        }
}
...

По выводу режима отладки:

expect: does "prove -property {<embedded>::wrapper.x0_nouse}\r\nINFO (IPF031): Settings used for this proof:\r\n    time_limit                    = 86400s\r\n    per_property_time_limit       = 1s * 10 ^ scan\r\n    engine_mode                   = Hp Ht N B \r\n    proofgrid_per_engine_max_jobs = 1\r\n    proofgrid_mode                = local\r\n    proofgrid_restarts            = 10\r\nINFO (IPF036): Starting proof on task: "<embedded>", 1 properties to prove with 0 already proven/unreachable\r\nINFO (IRS029): Starting reset analysis: phase 1 of 4.\r\nINFO (IRS030): Running reset analysis phase 2 of 4.\r\nINFO (IRS031): Running reset analysis phase 3 of 4.\r\nINFO (IRS020): Starting the reset analysis simulation with a limit of 100 iterations (phase 4 of 4).\r\nINFO (IRS024): Reset iterations 0 to 4 analyzed.\r\nINFO (IRS018): Reset analysis simulation executed for 3 iterations. Assigned values for 280 of 4626 design flops, 0 of 32 design latches, 136 of 2696 internal elements.\r\nUsing multistage preprocessing\r\nStarting reduce\r\nFinished reduce in 0.192s\r\n0.PRE: A proof was found: No trace exists. [0.00 s]\r\nINFO (IPF057): 0.PRE: The property "wrapper.x0_nouse" was proven in 0.00 s.\r\nFound proofs for 1 properties in preprocessing\r\nINFO (IPF059): Completed proof on task: <embedded>\r\nproven\r\n[<embedded>] % " (spawn_id exp4) match glob pattern "*proven\r\n[<embedded>] % "? no
 "*cex\r\n[<embedded>] % "? no

Извините, строка немного длинная, но если вы прокрутите вправо больше всего, вы увидите, что конец этой строки соответствует ожидаемому.в первом случае.

1 Ответ

3 голосов
/ 25 апреля 2019

Вы предоставляете шаблон глобуса и по праву должны экранировать [], чтобы он не выполнялся командой tcl. Вам нужно дополнительно экранировать [], чтобы [abc] соответствовало буквенной строке [abc], а не просто символу из набора abc.

Тем не менее, при цитировании с "", обратная косая черта также должна быть экранирована, поэтому вам нужно использовать в качестве шаблона глобуса

"proven\r\n\\\[<embedded>\\\] % " 

В качестве альтернативы вы можете попытаться найти точное совпадение без шара

 -exact "proven\r\n\[<embedded>\] % "

Вы также можете использовать {} вместо "", но тогда ваши \r и т. Д. Не будут преобразованы.

...