如何验证控制ghci(Haskell)的bash脚本的输出



我正在尝试创建一个用于评估的测试脚本。脚本需要打开Haskell GHCI,并向GHCI发送各种命令,并检查输出是否正确。它需要继续到所有命令的末尾,并给出最终分数,也就是说,如果输出不正确,不要停止运行。目前,我有这个。

#!/bin/env expect

spawn ghci
expect ".*> "
send ":l main.hsn"
expect "*Main>"
send "transform [(5,1),(6,1),(8,15),(9,1)]n"
expect "*Main>"

它打开ghci并加载正确的haskell文件(main.hs(,然后使用该list参数运行transform函数。我如何才能得到这个来验证输出是否等于我想要的,并相应地给出分数。EX:伪

#!/bin/env expect

spawn ghci
expect ".*> "
send ":l main.hsn"
expect "*Main>"
send "transform [(5,1),(6,1),(8,15),(9,1)]n"
if OUTPUT = [(5,5),(6,5),(8,5),(9,5)]
then POINTS+= 5
send "translate [(5,1),(6,1),(8,15),(9,1)]n"
if OUTPUT = [(5,10),(6,10),(8,10),(9,10)]
then POINTS+= 5
expect "*Main>"
send ":quit"
OUTPUT SCORE

所有命令都是在Haskell中完成的,但都是从shell脚本中运行的。有人能帮忙吗?

这里有一种(未经测试的(方法:

#!/bin/env expect
spawn ghci
expect "*> "
send ":l main.hsn"
expect "*Main>"
set POINTS 0
send "transform [(5,1),(6,1),(8,15),(9,1)]n"
expect {
-ex {[(5,5),(6,5),(8,5),(9,5)]} {
incr POINTS 5
exp_continue
}
*Main>
}
send "translate [(5,1),(6,1),(8,15),(9,1)]n"
expect {
-ex {[(5,10),(6,10),(8,10),(9,10)]} {
incr POINTS 5
exp_continue
}
*Main>
}
send ":quit"
puts $POINTS

有关详细文档,请参阅https://www.tcl.tk/man/expect5.31/expect.1.html和https://www.tcl-lang.org/man/tcl/TclCmd/contents.htm。

最新更新