用途:rego_fuzzer 通过 Trieste 生成式测试验证 rego-cpp 编译器各 pass 的健壮性。对 transform 管线中的每个 pass,它读取该 pass 的输入良构(WF)定义,生成结构上符合该 WF 的随机 AST,运行 pass,并检查输出是否符合该 pass 的输出 WF,从而发现手写测试遗漏的边界情况。
主要能力:支持四个 transform(pass 集合):file_to_rego(解析到结构化 AST,18 个 pass)、rego_to_bundle(AST 到可执行字节码,11 个 pass)、json_to_bundle 和 bundle_to_json。启用 REGOCPP_BUILD_TOOLS(标准 preset 默认开启)后构建:cd build && ninja rego_fuzzer,二进制位于 ./build/tools/rego_fuzzer。
使用方式:按 transform 运行三次,每次 count 1000,不指定 seed(随机 seed 保证三次覆盖不同输入),并用 --failfast 在首次失败停止:cd build 后执行 ./tools/rego_fuzzer <transform> -c 1000 -f。判定标准是三次输出均不含 Failed pass: 行;不能只看退出码,需查看输出尾部。失败时可用相同 seed 和 count 复现:./tools/rego_fuzzer <transform> -c 1 -s <failing_seed>,需要更多日志加 -l Info。修复特定 seed 后,再跑完整三次验证,并运行 ./tests/rego_test -wf tests/regocpp.yaml。也可通过 ctest --test-dir build -R rego_fuzzer 运行默认 count 100 的 fuzzer 测试。
失败诊断:输出包含 WF 错误信息(违规节点类型与期望类型)、失败 pass 与 seed、输入 AST、输出 AST 和失败摘要。常见失败类别包括 WF 违规、未处理节点类型、崩溃/断言失败、无限循环(超时)。修复后先复现特定 seed,再全量验证。
适用场景与限制:适用于修改或新增 pass、修改 WF 定义、新增 AST 节点或重写规则、复现 CI fuzzer 失败、合并 pass 管线前的最终验证。相关 WF 定义位于 include/rego/rego.hh 和 src/internal.hh。资料未提供安装依赖、收费、平台或性能等额外信息。