Files
whetstone_DSL/editor/tests/step1941_test.cpp
Bill 84708da611 Sprint 282: Polyglot test harness (steps 1938–1942)
PolyglotSpecRunner, BehavioralParityChecker, ParityRegressionGuard,
PolyglotSuiteOrchestrator — 26/26 tests pass.
Integration step 1942: poly-sort Python+Rust+Go parity verified.
Metrics: 7 whetstone calls, 8855 tokens.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 22:21:40 -07:00

98 lines
3.1 KiB
C++

// Step 1941: PolyglotSuiteOrchestrator
//
// t1: run returns SuiteResult with correct parity and guard
// t2: overallPass true when parity matches and guard passes
// t3: overallPass false when parity diverges
// t4: overallPass false when guard regression detected
// t5: runAll covers all registered nodeIds
#include "PolyglotSuiteOrchestrator.h"
#include <iostream>
namespace ws = whetstone;
static int p=0,f=0;
#define T(n) { std::cout<<" "<<#n<<"... "; }
#define P() { std::cout<<"PASS\n"; ++p; }
#define F(m) { std::cout<<"FAIL: "<<m<<"\n"; ++f; }
#define C(c,m) if(!(c)){F(m);return;}
void t1(){
T(run_returns_suiteresult);
ws::PolyglotSuiteOrchestrator o;
o.addVariant("sort","Python","p");
o.addVariant("sort","Rust", "r");
o.recordExpected("sort","Python","1 2 3\n");
o.recordExpected("sort","Rust", "1 2 3\n");
o.approveBaseline("sort","Python","1 2 3\n");
o.approveBaseline("sort","Rust", "1 2 3\n");
auto sr = o.run("sort","3 1 2");
C(sr.astNodeId == "sort", "nodeId");
C(sr.parity.allMatch, "parity matches");
C(sr.guard.passed, "guard passed");
C(sr.overallPass, "overall pass");
P();
}
void t2(){
T(overallPass_true_when_all_good);
ws::PolyglotSuiteOrchestrator o;
o.addVariant("f","Go","g");
o.recordExpected("f","Go","ok\n");
o.approveBaseline("f","Go","ok\n");
auto sr = o.run("f","");
C(sr.overallPass, "overall pass");
P();
}
void t3(){
T(overallPass_false_when_parity_diverges);
ws::PolyglotSuiteOrchestrator o;
o.addVariant("sort","Python","p");
o.addVariant("sort","Rust", "r");
o.recordExpected("sort","Python","1 2 3\n");
o.recordExpected("sort","Rust", "3 2 1\n"); // diverges
o.approveBaseline("sort","Python","1 2 3\n");
o.approveBaseline("sort","Rust", "3 2 1\n");
auto sr = o.run("sort","");
C(!sr.parity.allMatch, "parity fails");
C(!sr.overallPass, "overall fails");
P();
}
void t4(){
T(overallPass_false_when_guard_regression);
ws::PolyglotSuiteOrchestrator o;
o.addVariant("sort","Python","p");
o.recordExpected("sort","Python","new_output\n");
o.approveBaseline("sort","Python","old_output\n"); // mismatch → regression
auto sr = o.run("sort","");
C(!sr.guard.passed, "guard fails");
C(!sr.overallPass, "overall fails");
P();
}
void t5(){
T(runAll_covers_all_nodeIds);
ws::PolyglotSuiteOrchestrator o;
o.addVariant("sort", "Rust","r");
o.addVariant("merge","Go", "g");
o.recordExpected("sort", "Rust","s\n");
o.recordExpected("merge","Go", "m\n");
auto results = o.runAll("");
C(results.size() == 2, "two suite results");
bool sortFound = false, mergeFound = false;
for (auto& sr : results) {
if (sr.astNodeId == "sort") sortFound = true;
if (sr.astNodeId == "merge") mergeFound = true;
}
C(sortFound && mergeFound, "both nodeIds covered");
P();
}
int main(){
std::cout << "Step 1941: PolyglotSuiteOrchestrator\n";
t1(); t2(); t3(); t4(); t5();
std::cout << "\n" << p << "/" << (p+f) << " passed\n";
return f > 0 ? 1 : 0;
}