porunga是一个简单算法的测试框架

porunga的Python项目详细描述


https://secure.travis-ci.org/lukaszb/porunga.png?branch=master

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是我们的问题name-对于父 目录和编码解决方案(这里有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的公共类创建foobar.java文件。

教程

假设我们要解决以下问题:

问题

在输入端我们得到两个整数:nm,其中1 <= n < m <= 100000。 您的程序应该写入以输出n和^{tt13}之间的所有Fibonacci numbers$ (包括两者)。输出处的数字应以空格分隔。

示例:

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

好吧,我们有两个测试失败了,但我们还没有真正的编码。只是把 以下代码进入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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Rest DSL路由无法启动路由,因为同一端点不允许有多个使用者   jvm有没有像JConsole或VisualVM这样的工具可以告诉我“类、对象、引用变量在java中存储在哪里?”   java为什么我的列表中的所有元素看起来都一样?   java运行时。运行shell脚本的exec无法打开文件   JPopupMenu的JMenuItem的java热键   会话在Java中被覆盖   如何在java中去除字符串中的尖锐重音?   java Mockito监视一个接口,模拟它的默认方法,获取NullPointerException   javascript如何在jquery中禁用同一时间选择   将数组列表附加到现有CSV文件,但它会附加并清除存储在Java文件中的以前的数据   java从我的jar中访问pdf文件   java Sonar issue参数必须为非Null,但标记为可为Null   java Salesforce流式API:在网络故障之后和重新订阅之前获取事件   在Java 1.8.0_65上运行Play2.0应用程序时出现playframework错误   java为什么字母的ASCII由方法自动转换。toCharArray()?   java如何知道JDialog是否关闭?   java向服务器发送POST请求,服务器的响应为null,启动   java如何设置JTable中特定单元格的值?   ImagePlus中的java保存问题