원클릭으로
rebrgen-test
unictest.py を使った自動テストの実行方法と解釈。テスト失敗、未実装フックの確認、デバッグ出力の読み方に使う。**テスト実行直前に必ず読むこと。**
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
unictest.py を使った自動テストの実行方法と解釈。テスト失敗、未実装フックの確認、デバッグ出力の読み方に使う。**テスト実行直前に必ず読むこと。**
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
rebrgen の設計判断を ADR として記録するか検討する。設計方針の議論、選択肢の比較、既存判断の変更、判断理由を残す場面で使用する。
rebrgen のビルド、初期セットアップ、EBM再生成、ebmcodegen復旧、新言語ジェネレーター追加を行うときに使用する。
rebrgen のコンパイルエラー、テスト失敗、想定外の挙動を調査するときに使用する。型や構造の定義から原因を追跡するデバッグ手順を提供する。
rebrgen 内部の機能、マクロ、Context型、実装場所や構造を調べるときに使用する。開発中に関連定義やAPIの所在を確認するための知識を提供する。
rebrgen の複数言語ジェネレーターにまたがるリファクタリング、共通部分の整理、EBM構造変更の影響調査を行うときに使用する。
rebrgen のコードジェネレーターへ新機能を追加するときに使用する。共通処理と言語固有処理の配置、EBM変更の判断、実装時の注意点を提供する。
| name | rebrgen-test |
| description | unictest.py を使った自動テストの実行方法と解釈。テスト失敗、未実装フックの確認、デバッグ出力の読み方に使う。**テスト実行直前に必ず読むこと。** |
警告: python script/unictest.py を引数なしで実行するとPCが過負荷になるため厳禁。必ず --target-runner ebm2<lang> で言語を指定すること。
出力は save/unictest.txt などsave/内にリダイレクトしてから grep などで調べること。直接pipe処理だと裏側では毎回buildが走り繰り返すとpcが非常に重くなるため、必ず一旦ファイルに落としてから調べること。たとえ指定言語数が少ないとかテストケース単体だからといった例外は存在しない。必ずsave/に落としてから調べること。
mkdir -p save
python script/unictest.py --target-runner ebm2<lang> --print-stdout > save/unictest.txt 2>&1
# 特定の入力に絞る場合
python script/unictest.py --target-runner ebm2<lang> --target-input <input_name> --print-stdout > save/unictest.txt 2>&1
# 調べる
grep "unimplemented\|FAIL\|ERROR" save/unictest.txt
.bgn → EBM 変換 (ebmgen)ebm2<lang>)--debug-unimplemented を自動付与)テスト出力に unimplemented hook: Statement_FOO が出た場合:
ebmtemplate.py で生成すること 🚨手書きで Write するとビルドは通るがフックがサイレントに呼ばれない(cmake が main.cpp の __has_include 依存を追跡しないため)。ebmtemplate.py は必要な touch まで自動でやる。
python script/ebmtemplate.py Statement_FOO_class <lang>
# → src/ebmcg/ebm2<lang>/visitor/Statement_FOO_class.hpp を生成
# → main.cpp を touch して再コンパイルさせる
生成されたファイル内に DEFINE_VISITOR(Statement_FOO) { ... } を実装する。
src/ebmcg/ebm2<lang>/visitor/entry_before_class.hpp は ebmcodegen.py で既に作られているので、編集だけなら touch 不要。量が少ない間はここに config.foo_visitor = [...] で集約してよい。
config.foo_visitor = [](Context_Statement_FOO& ctx) -> expected<Result> {
// 実装
};
直接 curl してパイプ処理するとPCが重くなるため必ず save/ に落としてから解析すること:
mkdir -p save
curl -s "https://on-keyday.github.io/brgen/unictest-results/test_results.json" -o save/test_results_main.json
python -c "
import json
data = json.load(open('save/test_results_main.json'))
results = data['results']
runners = sorted(set(r['runner'] for r in results))
for runner in runners:
rs = [r for r in results if r['runner'] == runner]
passed = sum(1 for r in rs if r.get('success'))
failed = [r['input_name'] for r in rs if not r.get('success')]
print(f'{runner}: PASS={passed}, FAIL={len(failed)}, failed={failed}')
"
JSON の構造: data['results'] がテスト結果のリスト。各エントリのフィールドは runner, success (bool), input_name, source, format_name など。
EBM デバッグ出力 (ebmgen -d) は情報量が多すぎてAIには有害なことが多い。
失敗調査にはログ内の生成コードを直接確認するほうが有効。