5 个稳定版本
1.0.4 | 2023年10月10日 |
---|---|
1.0.2 | 2023年9月21日 |
#656 在 命令行工具
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_io
和 output_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