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

MIT 许可证

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

Usage

此命令将迭代次数设置为 1000 并按字符输出 diff。注意 ./generator.py 和其他文件中的点:如果使用相对路径,这些是必需的。

有关其他参数,请参阅 CLI 文档

解决方案

这是要测试的可执行文件。它应该通过 stdin 接受测试用例并将答案打印到 stdout

采样器

采样器(或生成器)应该是一个可执行文件,它生成随机测试用例并将它们打印到标准输出。它可以(可选)将随机种子作为命令行参数,以实现可重复的运行;种子将在测试摘要中打印在失败的情况下。

检查器

通常,检查器是相同问题的暴力解决方案。其输出按字符与程序进行比较。然而,对于更复杂的需求,您可以使用具有任意逻辑的 自定义检查器

可配置选项

--use-custom-checker 之外的 CLI 参数在 CLI 文档 中有详细描述。简而言之,您可以控制

  • 是否使用自定义检查器(见下文)
  • 是否删除每一行输出或仅删除最后一行
  • 是否将失败的测试用例保存到文件
  • 要使用的 diff 模式。可选的有按行、按字符和无 diff。
  • 是否禁用进度条
  • 迭代次数

自定义检查器

自定义检查器应从 stdin 逐个读取测试用例和检查的解决方案,没有任何除换行符之外的额外分隔符。然后,如果解决方案符合测试用例,它应该成功(返回零退出代码);如果解决方案对测试用例错误,它应该失败(返回非零退出代码)。此外,它还可以输出错误消息,这些消息将被写入测试摘要。

要启用,请设置 --use-custom-checker 参数

依赖关系

~6–19MB
~195K SLoC