跳转到主要内容

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

项目描述

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是我们的问题名称 - 它应该与父目录和编码解决方案相同(这里我们有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的公共类。

教程

假设我们要解决以下问题

问题

在输入中我们得到两个整数: nm,其中 1 <= n < m <= 100000。你的程序应该输出所有在 nm 之间的(包括两者)斐波那契数。输出中的数字应该用空格分隔。

示例

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

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪一个,请了解有关 安装软件包 的更多信息。

源分布

porunga-0.9.3.tar.gz (13.6 kB 查看散列

上传时间

构建分布

porunga-0.9.3-py27-none-any.whl (20.1 kB 查看散列

上传时间 Python 2.7

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面