5 个版本 (稳定版)
1.1.2 | 2023年12月30日 |
---|---|
1.1.1 | 2023年11月5日 |
1.1.0 | 2023年10月18日 |
1.0.0 | 2023年10月1日 |
0.2.0 | 2023年10月1日 |
#256 in 异步
每月下载 47 次
70KB
740 行
stressed — 竞技编程中压力测试解决方案的 CLI 工具
在解决竞技编程问题时,它们经常失败,而在一个不允许你看到测试案例的平台上是问题。然而,通常在小型测试案例上测试解决方案很容易,其中另一个(可能是更天真和简单的)解决方案是可行的。然后通过结合 采样器 或 生成器,它随机生成小型测试案例,并参考 求解器,广泛称为 检查器,我们可以评估我们的解决方案并修复它。本项目旨在提供一个灵活且 快速 的工具来执行此类测试。
特性
- 不会中断常规工作流程:你只需要提供采样器,它将样本输出到 stdout,以及参考求解器,其格式与解决方案相同。无需以任何方式修改你的解决方案。
- 快速:它使用异步进程创建,比原始实现快 2-5 倍
- 可以使用随机种子为采样器以方便可重复测试
- 可以自动将失败的测试案例保存到文件中
- 你可以控制是否在输出中删除尾随空白或保留
- 可定制
- 使用默认检查器,它将输出与参考求解器进行比较,或使用 自定义检查器,它可以以任何方式检查输出
- 显示与正确解决方案的差异(按字符/按行)或根本不显示
- 控制迭代次数
- 显示进度条
有关使用方法的详细信息,请参阅 使用说明 部分。
安装
您可以使用 cargo 从源代码编译,或下载 GitHub 发布版 中的预编译发布文件。要使用 cargo 运行安装
cargo install stressed
您需要安装 Rust 工具链,包括 cargo,才能执行此操作。一个更简单的替代方案是使用在 Github 的发布标签页下预编译的静态链接二进制文件。这些是通过 Github Actions 构建的,您可以自己检查构建脚本,因此是安全的。
使用方法
stressed --sampler ./generator.py --checker ./C.py ./c -n 1000 --diff-mode char
# Or shorter
stressed -s ./generator.py -c ./C.py ./c -n 1000 --diff-mode char
此命令将迭代次数设置为 1000 并按字符输出 diff。注意 ./generator.py
和其他文件中的点:如果使用相对路径,这些是必需的。
有关其他参数,请参阅 CLI 文档。
解决方案
这是要测试的可执行文件。它应该通过 stdin 接受测试用例并将答案打印到 stdout。
采样器
采样器(或生成器)应该是一个可执行文件,它生成随机测试用例并将它们打印到标准输出。它可以(可选)将随机种子作为命令行参数,以实现可重复的运行;种子将在测试摘要中打印在失败的情况下。
检查器
通常,检查器是相同问题的暴力解决方案。其输出按字符与程序进行比较。然而,对于更复杂的需求,您可以使用具有任意逻辑的 自定义检查器。
可配置选项
除 --use-custom-checker
之外的 CLI 参数在 CLI 文档 中有详细描述。简而言之,您可以控制
- 是否使用自定义检查器(见下文)
- 是否删除每一行输出或仅删除最后一行
- 是否将失败的测试用例保存到文件
- 要使用的 diff 模式。可选的有按行、按字符和无 diff。
- 是否禁用进度条
- 迭代次数
自定义检查器
自定义检查器应从 stdin 逐个读取测试用例和检查的解决方案,没有任何除换行符之外的额外分隔符。然后,如果解决方案符合测试用例,它应该成功(返回零退出代码);如果解决方案对测试用例错误,它应该失败(返回非零退出代码)。此外,它还可以输出错误消息,这些消息将被写入测试摘要。
要启用,请设置 --use-custom-checker
参数
依赖关系
~6–19MB
~195K SLoC