了解如何在 Exercism 上测试你的 Pyret 练习
成功下载一个练习后,你需要安装 Node.js 模块才能运行测试:
cd /path/to/exercise
npm install
然后,把包含 pyret 命令行工具的目录添加到你的 $PATH 中:
# bash
PATH="./node_modules/.bin:$PATH"
# zsh
path=(./node_modules/.bin $path)
# fish
fish_add_path ./node_modules/.bin
练习目录里会有好几个文件,但最重要的是你的解答文件和测试文件。 在下面的例子中,我们下载了 Leap 练习。
leap/
├── leap.arr # Solution file - your code goes here
├── leap-test.arr # Test cases for the exercise
要运行测试,如果你下载了官方的 Exercism CLI,就用 exercism test,否则运行 pyret leap-test.arr。
Pyret 会运行整套测试,它由一系列带标签的 check 代码块组成,用具体的输入和预期结果来检验你的解答文件。
这个过程的关键一点是:显式导出你的部分代码,让测试能看到它们。
本 track 的测试会导入你的文件,因此可以访问你代码中显式导出的任何内容。
要导出变量,你需要在文件开头添加一个 provide 语句。
下面的代码片段是导出 a、b 和 c 的两种有效方式。
# using a list of bindings
provide a, b, c end
# using an object literal
provide {
a: a,
b: b,
c: c
}
end
第三种方式是 provide *,它是导出所有顶层绑定(自定义数据类型除外)的简写形式。
不过,通常不建议这么做,因为 Pyret 对变量遮蔽有严格限制。
有些练习需要导出自定义数据类型,以便进行测试。
这种情况下,你可以使用 provide-types 语句。
由于数据类型附带的一些函数可能不会被导出,因此建议使用 provide-types *,尽管有遮蔽方面的顾虑。
provide-types *
data MyPoint:
| two-dim(x, y)
| three-dim(x, y, z)
end
所有练习的初始代码里都已经为你准备好了 provide 或 provide-types 语句。