Files
whetstone_DSL/editor/tests/step495_test.cpp

140 lines
5.4 KiB
C++

// Step 495: Transpile Whetstone Modules Tests (12 tests)
#include "SelfHostTranspileAudit.h"
#include <iostream>
static int passed = 0, failed = 0;
#define TEST(name) { std::cout << " " << #name << "... "; }
#define PASS() { std::cout << "PASS\n"; ++passed; }
#define FAIL(msg) { std::cout << "FAIL: " << msg << "\n"; ++failed; }
#define CHECK(cond, msg) if (!(cond)) { FAIL(msg); return; } else {}
void test_default_specs_include_three_expected_headers() {
TEST(default_specs_include_three_expected_headers);
auto specs = SelfHostTranspileAudit::defaultSpecs();
CHECK(specs.size() == 3, "expected three specs");
CHECK(specs[0].sourceHeaderPath.find("AnnotationConflictExtended.h") != std::string::npos, "missing first header");
CHECK(specs[1].sourceHeaderPath.find("ResponseBudget.h") != std::string::npos, "missing second header");
CHECK(specs[2].sourceHeaderPath.find("Icons.h") != std::string::npos, "missing third header");
PASS();
}
void test_default_run_produces_three_file_reports() {
TEST(default_run_produces_three_file_reports);
auto r = SelfHostTranspileAudit::runDefault();
CHECK(r.files.size() == 3, "expected three file reports");
PASS();
}
void test_sources_parse_before_projection() {
TEST(sources_parse_before_projection);
auto r = SelfHostTranspileAudit::runDefault();
for (const auto& f : r.files) {
CHECK(f.sourceParsed, "source should parse");
}
PASS();
}
void test_projection_and_annotation_preservation_hold() {
TEST(projection_and_annotation_preservation_hold);
auto r = SelfHostTranspileAudit::runDefault();
for (const auto& f : r.files) {
CHECK(f.projected, "projection should succeed");
CHECK(f.annotationsPreserved, "annotations should be preserved");
}
PASS();
}
void test_generated_target_code_is_nonempty_for_each_translation() {
TEST(generated_target_code_is_nonempty_for_each_translation);
auto r = SelfHostTranspileAudit::runDefault();
for (const auto& f : r.files) {
CHECK(f.generatedCodeNonEmpty, "generated code should not be empty");
}
PASS();
}
void test_target_parse_attempt_runs_for_each_translation() {
TEST(target_parse_attempt_runs_for_each_translation);
auto r = SelfHostTranspileAudit::runDefault();
for (const auto& f : r.files) {
CHECK(f.targetParses || !f.warnings.empty(), "target parse should run and report result");
}
PASS();
}
void test_confidence_score_is_recorded_per_file() {
TEST(confidence_score_is_recorded_per_file);
auto r = SelfHostTranspileAudit::runDefault();
for (const auto& f : r.files) {
CHECK(f.confidence.score >= 0.0f, "confidence below zero");
CHECK(f.confidence.score <= 1.0f, "confidence above one");
}
PASS();
}
void test_average_confidence_is_aggregate_of_reports() {
TEST(average_confidence_is_aggregate_of_reports);
auto r = SelfHostTranspileAudit::runDefault();
CHECK(r.averageConfidence >= 0.0f && r.averageConfidence <= 1.0f,
"average confidence out of range");
PASS();
}
void test_idiomatic_and_literal_counts_sum_to_file_count() {
TEST(idiomatic_and_literal_counts_sum_to_file_count);
auto r = SelfHostTranspileAudit::runDefault();
CHECK(r.idiomaticCount + r.literalCount == (int)r.files.size(),
"idiomatic+literal count mismatch");
PASS();
}
void test_target_languages_match_python_rust_java() {
TEST(target_languages_match_python_rust_java);
auto r = SelfHostTranspileAudit::runDefault();
CHECK(r.hasTarget("python"), "missing python target");
CHECK(r.hasTarget("rust"), "missing rust target");
CHECK(r.hasTarget("java"), "missing java target");
PASS();
}
void test_structural_counts_are_propagated_to_projected_ast_metrics() {
TEST(structural_counts_are_propagated_to_projected_ast_metrics);
auto r = SelfHostTranspileAudit::runDefault();
for (const auto& f : r.files) {
CHECK(f.projectedFunctionCount >= 0, "projected function count invalid");
CHECK(f.projectedClassCount >= 0, "projected class count invalid");
}
PASS();
}
void test_report_includes_completion_note() {
TEST(report_includes_completion_note);
auto r = SelfHostTranspileAudit::runDefault();
CHECK(!r.notes.empty(), "expected report notes");
CHECK(r.notes[0].find("complete") != std::string::npos, "missing completion note");
PASS();
}
int main() {
std::cout << "Step 495: Transpile Whetstone Modules Tests\n";
test_default_specs_include_three_expected_headers(); // 1
test_default_run_produces_three_file_reports(); // 2
test_sources_parse_before_projection(); // 3
test_projection_and_annotation_preservation_hold(); // 4
test_generated_target_code_is_nonempty_for_each_translation(); // 5
test_target_parse_attempt_runs_for_each_translation(); // 6
test_confidence_score_is_recorded_per_file(); // 7
test_average_confidence_is_aggregate_of_reports(); // 8
test_idiomatic_and_literal_counts_sum_to_file_count(); // 9
test_target_languages_match_python_rust_java(); // 10
test_structural_counts_are_propagated_to_projected_ast_metrics(); // 11
test_report_includes_completion_note(); // 12
std::cout << "\nResults: " << passed << "/" << (passed + failed)
<< " passed\n";
return failed == 0 ? 0 : 1;
}