Files
whetstone_DSL/editor/tests/step500_test.cpp

148 lines
6.5 KiB
C++
Raw Normal View History

// Step 500: Scenario - Legacy Modernization Tests (12 tests)
#include "LegacyModernizationScenarioRunner.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 {}
static LegacyModernizationScenarioResult runNow() {
return LegacyModernizationScenarioRunner::run();
}
void test_legacy_ingestion_detects_c_idioms_and_legacy_score() {
TEST(legacy_ingestion_detects_c_idioms_and_legacy_score);
auto r = runNow();
CHECK(r.legacyReport.language == "c", "expected c language");
CHECK(r.legacyReport.legacyScore > 0, "expected non-zero legacy score");
CHECK(r.legacyReport.hasPattern("manual-memory-management"), "missing manual memory pattern");
PASS();
}
void test_safety_audit_flags_memory_and_buffer_risks() {
TEST(safety_audit_flags_memory_and_buffer_risks);
auto r = runNow();
CHECK(r.safetyReport.overallRisk >= 2, "expected elevated safety risk");
CHECK(r.safetyReport.hasCategory("buffer-overflow"), "missing buffer-overflow finding");
CHECK(r.safetyReport.hasCategory("use-after-free"), "missing use-after-free finding");
PASS();
}
void test_modernization_suggestions_include_rust_target_and_actions() {
TEST(modernization_suggestions_include_rust_target_and_actions);
auto r = runNow();
CHECK(r.modernizationReport.sourceLanguage == "c", "expected c source");
CHECK(r.modernizationReport.targetLanguage == "rust", "expected rust target");
CHECK(!r.modernizationReport.suggestions.empty(), "expected modernization suggestions");
PASS();
}
void test_security_annotations_strengthened_for_rust_ownership_model() {
TEST(security_annotations_strengthened_for_rust_ownership_model);
auto r = runNow();
CHECK(r.securityOwnershipStrengthened, "expected rust ownership strengthening");
CHECK(r.modernizationReport.hasSuggestionTo("Rust ownership + borrow checker"),
"missing rust ownership suggestion");
PASS();
}
void test_workflow_contains_deterministic_and_llm_routing_paths() {
TEST(workflow_contains_deterministic_and_llm_routing_paths);
auto r = runNow();
CHECK(r.modernizationWorkflow.countByRouting(WorkItemRouting::Deterministic) > 0,
"expected deterministic work items");
CHECK(r.modernizationWorkflow.countByRouting(WorkItemRouting::LLM) > 0,
"expected llm work items");
PASS();
}
void test_workflow_prioritizes_quick_wins_before_harder_refactors() {
TEST(workflow_prioritizes_quick_wins_before_harder_refactors);
auto r = runNow();
auto ordered = r.modernizationWorkflow.itemsInOrder();
CHECK(!ordered.empty(), "expected ordered workflow items");
CHECK(ordered.front().effort == ModernizeEffort::QuickWin,
"first workflow item should be quick win");
PASS();
}
void test_migration_plan_targets_rust_and_has_units() {
TEST(migration_plan_targets_rust_and_has_units);
auto r = runNow();
CHECK(r.migrationPlan.sourceLanguage == "c", "expected c source migration plan");
CHECK(r.migrationPlan.targetLanguage == "rust", "expected rust migration plan target");
CHECK(r.migrationPlan.units.size() >= 2, "expected multiple migration units");
PASS();
}
void test_migration_plan_has_mixed_routing_deterministic_and_llm() {
TEST(migration_plan_has_mixed_routing_deterministic_and_llm);
auto r = runNow();
CHECK(r.migrationPlan.countByRouting(MigrationRouting::Deterministic) > 0,
"expected deterministic migration unit");
CHECK(r.migrationPlan.countByRouting(MigrationRouting::LLM) > 0,
"expected llm migration unit");
PASS();
}
void test_api_boundary_preservation_is_verified() {
TEST(api_boundary_preservation_is_verified);
auto r = runNow();
CHECK(r.apiBoundaryOriginal.hasFunction("clamp_small"), "original api function missing");
CHECK(r.apiBoundaryMigrated.hasFunction("clamp_small"), "migrated api function missing");
CHECK(r.apiBoundaryPreserved, "api boundary preservation should verify");
PASS();
}
void test_ffi_annotations_are_available_for_rust_boundary() {
TEST(ffi_annotations_are_available_for_rust_boundary);
auto r = runNow();
CHECK(!r.apiBoundaryOriginal.ffiBoundaries.empty(), "expected ffi boundaries");
CHECK(r.apiBoundaryOriginal.ffiBoundaries[0].annotation.find("FFI") != std::string::npos,
"missing ffi annotation");
PASS();
}
void test_migration_tests_are_generated_from_preserved_api_surface() {
TEST(migration_tests_are_generated_from_preserved_api_surface);
auto r = runNow();
CHECK(!r.migrationTests.tests.empty(), "expected generated migration tests");
CHECK(r.migrationTests.targetLanguage == "rust", "expected rust migration tests");
CHECK(r.migrationTests.hasTestFor("clamp_small"), "missing tests for preserved api");
PASS();
}
void test_scenario_notes_capture_end_to_end_modernization_flow() {
TEST(scenario_notes_capture_end_to_end_modernization_flow);
auto r = runNow();
CHECK(r.notes.size() >= 2, "expected scenario notes");
CHECK(r.notes[0].find("Legacy C modernization scenario executed") != std::string::npos,
"missing execution note");
PASS();
}
int main() {
std::cout << "Step 500: Scenario - Legacy Modernization Tests\n";
test_legacy_ingestion_detects_c_idioms_and_legacy_score(); // 1
test_safety_audit_flags_memory_and_buffer_risks(); // 2
test_modernization_suggestions_include_rust_target_and_actions(); // 3
test_security_annotations_strengthened_for_rust_ownership_model(); // 4
test_workflow_contains_deterministic_and_llm_routing_paths(); // 5
test_workflow_prioritizes_quick_wins_before_harder_refactors(); // 6
test_migration_plan_targets_rust_and_has_units(); // 7
test_migration_plan_has_mixed_routing_deterministic_and_llm(); // 8
test_api_boundary_preservation_is_verified(); // 9
test_ffi_annotations_are_available_for_rust_boundary(); // 10
test_migration_tests_are_generated_from_preserved_api_surface(); // 11
test_scenario_notes_capture_end_to_end_modernization_flow(); // 12
std::cout << "\nResults: " << passed << "/" << (passed + failed)
<< " passed\n";
return failed == 0 ? 0 : 1;
}