#编程竞赛 #测试用例 #测试 #竞赛 #命令行 #问题 #命令行工具

应用 cp-tester

一款用于快速本地测试编程竞赛问题的命令行工具

5 个稳定版本

1.0.4 2023年10月10日
1.0.2 2023年9月21日

#656命令行工具

MIT 许可证

78KB
1.5K SLoC

编程竞赛测试器

用于轻松测试编程竞赛问题的 CLI 工具
通过终端命令运行测试,而不是每次都必须重新上传到网站
我的第一个 Rust 项目,请通过 [email protected] 提供任何反馈

支持 C、C++、Java 和 Python,但 C、Java 和 Python 使用您电脑上安装的版本(如果人们希望,这在未来可能会改变)

目前它与 USACO 问题兼容,并允许您通过问题链接(不是测试用例下载链接)或问题 ID 下载测试用例
如果您想下载其他类型的题目,它们必须被压缩,并直接提取到同一目录下的测试用例中,文件扩展名不同,名称相匹配以显示测试用例对应关系。您也可以配置测试用例以匹配这些规范,并从文件夹中添加测试

安装

安装(需要 Rust

cargo install cp-tester

无 Cargo 的安装(一旦设置好操作,就会很快推出)
 应包含 Windows、Linux 和 Mac 的可执行文件版本,但您需要将它们放在正确的目录中,以便它们可以作为命令运行

可能会添加安装脚本

未来计划

 能够下载 USACO、Codeforces 和 ATCoder 的样例用例。
 支持 AtCoder 用例。
 支持问题的提交(非比赛期间)。
 能够通过在运行命令中下载它然后删除它来一次性运行测试。

功能(大部分信息可以通过使用 --help 获取)

cp-tester add - 安装测试

添加测试
 所有测试用例应位于同一目录级别,并具有不同扩展名的输入和输出。例如,案例 10 应为 10.in 和 10.out。
--link 接受指向必须直接提取到测试用例的 zip 文件的链接
--folder 接受指向文件夹的路径(如果您在添加文件夹中的测试时遇到关于写入测试数据的错误,只需重新运行它即可,错误显示出来过,但我从未能够再次重现,所以不知道如何修复)
--usaco-link 接受指向 USACO 问题的链接(不是测试数据链接)
--usaco-id 用于获取USACO问题ID(cpid为链接末尾的ID)
扩展名(不要使用点号)
--input-extension 用于指定测试用例的输入扩展名,当测试需要文件I/O时也会使用(默认:in)
--output-extension 用于指定测试用例的输出扩展名,当测试需要文件I/O时也会使用(默认:out)
命名
 默认名称
  对于 --link,它是下载的zip文件的名称
  对于 --folder,它是文件夹的名称
  对于 --usaco-link--usaco-id,名称格式为 <problem_name>_<division>_<competition><year>,例如 find_and_replace_silver_jan23
--name 用于指定一个名称,以覆盖默认名称
I/O
 测试存储2个值,input_iooutput_io,它们可以是STDIN/STDOUT,也可以是文件名
 这些字段的默认值是STDIN和STDOUT,除非您正在使用特定标志下载USACO问题,在这种情况下,它将被推断出来。
 *遗憾的是,这意味着如果测试数据与输入和输出具有不同的扩展名,您必须先修改测试数据,但这并不是我经常看到的情况

cp-tester config - 与配置的交互

这是默认的配置文件(存储在dirs::config_local_dir()/cp-tester中)

{
  "default_cpp_ver": 17,
  "unicode_output": false,
  "default_timeout": 5000,
  "gcc_flags": {
    "-lm": "",
    "-O2": ""
  },
  "gpp_flags": {
    "-lm": "",
    "-O2": ""
  },
  "java_flags": {},
  "javac_flags": {}
}

print 打印配置
print-default 打印默认配置
reset 将配置重置为默认值
unicode-output 决定在文件上运行测试后,测试结果将显示为 "PASSED" 和 "FAILED" 或 "✅" 和 "❌"。

有子命令可以编辑配置中的每个值,包括添加和删除标志。如果您向设置标志的子命令传递两个值,它们将以 "=" 分隔,如果您只传递一个值,则只给出该值。例如,如果您想传递 -Xss4m 以增加堆栈大小,只需使用 cp-tester config set-java-flag -Xss4m

cp-tester list - 列出测试

cp-tester list 按字母顺序列出所有测试名称,--show-io 用于显示测试的I/O数据(默认:false)
cp-tester list test <test> 用于列出特定测试的案例。
--cases 用于列出特定案例(以逗号分隔)(默认:全部)
--show-input--show-output 如您预期的那样工作,并且默认都为false,因为对于某些测试,它们可能非常大。

cp-tester remove - 删除测试

cp-tester remove <test_name> 删除具有该名称的测试
--all 用于删除所有案例(默认:false)

cp-tester rename - 重命名测试

cp-tester rename <old_name> <new_name> 将测试 "old_name" 重命名为 "new_name"

cp-tester run - 在文件上运行测试

cp-tester run <name> --file <file> 有效文件扩展名有 .c, .java, .py, 和 .cpp
--cases 指定要运行的案例(逗号分隔)(默认:所有案例)
--show-input 显示输入(默认:false)
--compare-output 将您的程序输出与期望输出进行比较(默认:false)
--cpp-ver 指定 C++ 版本,默认为配置中的版本(默认:17)
--timeout 超时时间(毫秒),默认为配置中的值(默认:5000ms)

测试存储

测试存储在 dirs::data_local_dir() 中,测试及其 IO 数据的名称在 test.json 中,而与名称对应的文件夹在 tests/ 子目录中。这允许在没有数据的情况下加载测试名称,因此只有在必要时才加载测试。

示例用法

您想处理 http://www.usaco.org/index.php?page=viewproblem2&cpid=991
下载测试案例
cp-tester add--usaco-id991
在文件上运行它们
cp-tester run loan_repayment_silver_jan2020 --file path_to_solution.cpp
结果是

Test Case 1: 1 milliseconds
PASSED
Test Case 2: 47 milliseconds
PASSED
Test Case 3: 39 milliseconds
PASSED
Test Case 4: 1 milliseconds
PASSED
Test Case 5: 1 milliseconds
PASSED
Test Case 6: 4 milliseconds
PASSED
Test Case 7: 2 milliseconds
PASSED
Test Case 8: 2 milliseconds
PASSED
Test Case 9: 2 milliseconds
PASSED
Test Case 10: 4 milliseconds
PASSED
Test Case 11: 13 milliseconds
PASSED

所有案例都通过了,您可以继续了!

依赖关系

~13–27MB
~447K SLoC