porunga是一个简单的算法测试框架
项目描述
porunga是用于算法测试的工具。
安装
为了安装porunga,只需运行
pip install porunga
用法
基本上,我们需要特定的文件结构来测试我们的算法
./foobar/ ./foobar/foobar.py ./foobar/testdata/ ./foobar/testdata/test01.in ./foobar/testdata/test01.out ./foobar/testdata/test02.in ./foobar/testdata/test02.out ./foobar/testdata/test03.in ./foobar/testdata/test03.out
在这里,foobar是我们的问题名称 - 它应该与父目录和编码解决方案相同(这里我们有foobar.py,但也可以是其他语言 - 下面将列出支持的语言;例如,对于Java,我们会创建名为foobar.java的文件)
在./foobar/目录中,我们会运行
$ porunga test --lang python
请参阅帮助以获取更多信息(您也可以在那里查看支持的语言)
$ porunga test -h
如果我们想为测试设置时间限制,我们可以使用--timeout开关。例如,如果我们需要测试在2.5秒以下运行,我们可以运行
$ porunga test --timeout 2.5
请注意,不支持非常低的超时值。此外,
支持的语言
目前porunga支持以下语言
Java
Java源文件应与父目录同名,并应包含同名的公共类。因此,如果我们的问题是foobar,我们将会创建名为foobar.java的文件,其中包含名为foobar的公共类。
教程
假设我们要解决以下问题
问题
在输入中我们得到两个整数: n,m,其中 1 <= n < m <= 100000。你的程序应该输出所有在 n 和 m 之间的(包括两者)斐波那契数。输出中的数字应该用空格分隔。
示例
INPUT 1: 3 5 OUTPUT 1: 2 3 5 INPUT 2: 6 10 OUTPUT 2: 8 13 21 34 55
首先,让我们为我们的解决方案创建一个目录
$ mkdir fibs $ cd fibs
还要创建一个 testdata 目录(确切名称应该使用)并放置一些测试用例
$ mkdir testdata $ echo '3 5' > testdata/test01.in $ echo '2 3 5' > testdata/test01.out $ echo '6 10' > testdata/test02.in $ echo '8 13 21 34 55' > testdata/test02.out
请注意,测试输入和输出应该分别具有 .in 和 .out 扩展名。
现在让我们创建我们的解决方案 - 我们可以选择任何支持的语言,但为了本教程的目的,让它成为一个 Python 模块。创建一个(目前为空)
$ touch fibs.py
现在我们应该创建了以下文件
./fibs/ ./fibs/fibs.py ./fibs/testdata/ ./fibs/testdata/test01.in ./fibs/testdata/test01.out ./fibs/testdata/test02.in ./fibs/testdata/test02.out
就是这样。我们现在可以在 fibs 目录中运行 porunga,并看到我们的解决方案正在与创建的测试用例进行测试
$ porunga test Testing ./fibs ============== => Binary: python /Users/lukasz/temp/fibs/fibs.py => Testing ./fibs/testdata/test01.in ... Fail => Testing ./fibs/testdata/test02.in ... Fail => Total time: 0.058s => 2 out of 2 tests failed
嗯,我们得到了 2 个测试失败,但我们还没有实际编写任何代码。只需将以下代码放入 fibs.py
import fileinput import re import sys def fib(n): if n in (1, 2): return 1 a = b = 1 for x in range(3, n + 1): a, b = b, a + b return b def main(): fin = fileinput.input() n, m = map(int, re.findall(r'\d+', fin.readline())) fibs = [str(fib(num)) for num in range(n, m + 1)] result = ' '.join(fibs) sys.stdout.write(result) if __name__ == '__main__': main()
(这不是最优的代码,因为我们每次都计算斐波那契数,但它可以很容易地升级)
再次运行测试
$ porunga test Testing ./fibs ============== => Binary: python ./fibs/fibs.py => Testing ./fibs/testdata/test01.in ... OK [0.030]s => Testing ./fibs/testdata/test02.in ... OK [0.033]s => Total time: 0.063s => All 2 tests passed
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪一个,请了解有关 安装软件包 的更多信息。