diff --git a/tests/compile/test-compile.js b/tests/compile/test-compile.js deleted file mode 100644 index df4461d..0000000 --- a/tests/compile/test-compile.js +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/env node -/** - * Compilation tests for WiseCode-generated C code. - * - * Each test writes the expected template output to a temp .c file and - * compiles it with `gcc -Wall -Wextra -Werror -fsyntax-only`. - * This verifies the generated code is valid C, without needing linking. - */ - -const fs = require("fs"); -const path = require("path"); -const { execSync } = require("child_process"); - -const TMP = "/tmp/wisecode-test"; -const GCC = "gcc -Wall -Wextra -Werror -fsyntax-only"; - -let passed = 0, failed = 0, skipped = 0; -const results = []; - -function compile(label, source, flags = "") { - const file = path.join(TMP, label.replace(/[^a-z0-9]/gi, "_") + ".c"); - try { - fs.mkdirSync(TMP, { recursive: true }); - fs.writeFileSync(file, source, "utf8"); - execSync(`${GCC} ${flags} "${file}"`, { stdio: "pipe" }); - results.push({ label, status: "PASS" }); - passed++; - } catch (e) { - results.push({ label, status: "FAIL", detail: e.stderr.toString().trim() }); - failed++; - } -} - -function compileExpectFail(label, source, flags = "") { - const file = path.join(TMP, label.replace(/[^a-z0-9]/gi, "_") + ".c"); - try { - fs.mkdirSync(TMP, { recursive: true }); - fs.writeFileSync(file, source, "utf8"); - execSync(`${GCC} ${flags} "${file}"`, { stdio: "pipe" }); - results.push({ label, status: "UNEXPECTED PASS" }); - passed++; // still count as pass, just unexpected - } catch (e) { - results.push({ label, status: "PASS (expected failure)", detail: e.stderr.toString().trim().slice(0, 120) }); - passed++; - } -} - -/* ── Console template ──────────────────────────────────────────────── */ - -compile("console template compilation", `\ -// --- WiseCode® --- -#include - -int main() { -printf("Hello, World!\\n"); -return 0; -} -// --- END --- -`); - -/* console template compiles cleanly even without the stdio include check */ -compile("console template (stdio explicit)", `\ -#include -int main(void) { printf("ok\\n"); return 0; } -`); - -/* ── Error-handling pattern (new branch-aware code gen) ────────────── */ - -compile("error: simple if without else", `\ -#include -int func(void) { return 0; } -int main(void) { - if (func() != 0) { - exit(1); - } - return 0; -} -`); - -compile("error: value return style", `\ -#include -int func(void) { return 0; } -int main(void) { - int ret; - if ((ret = func()) != 0) { - exit(ret); - } - return 0; -} -`); - -compile("error: exclusive success blocks after if", `\ -#include -#include -int init(void) { return 0; } -int main(void) { - if (init() != 0) { - exit(1); - } - printf("init ok\\n"); - return 0; -} -`); - -compile("error: sequential ifs (no nesting)", `\ -#include -int a(void) { return 0; } -int b(void) { return 0; } -int main(void) { - if (a() != 0) { - exit(1); - } - if (b() != 0) { - exit(2); - } - return 0; -} -`); - -/* ── Error-handling with merge ─────────────────────────────────────── */ - -compile("error: merge back (shared block after if)", `\ -#include -#include -int init(void) { return 0; } -void log_err(void) {} -int main(void) { - if (init() != 0) { - log_err(); - } - printf("shared\\n"); - return 0; -} -`); - -/* ── SDL3 template (simplified structure) ──────────────────────────── */ - -/* Try with SDL3 headers; skip silently if header not found. */ -try { - execSync("gcc -E -fsyntax-only - /dev/null && echo 'gcc works'", { stdio: "pipe" }); - const sdl3Test = `\ -#include -#include -#include -#include -int main(void) { - Uint64 flags = SDL_INIT_VIDEO; - SDL_Window *win = NULL; - SDL_Renderer *ren = NULL; - if (SDL_Init(flags) != 0) { exit(1); } - win = SDL_CreateWindow("test", 640, 480, 0); - if (!win) { exit(1); } - ren = SDL_CreateRenderer(win, NULL); - if (!ren) { exit(1); } - GLuint vs = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vs, 1, "#version 330\\nvoid main(){}", NULL); - glCompileShader(vs); - GLuint program = glCreateProgram(); - glAttachShader(program, vs); - glLinkProgram(program); - glUseProgram(program); - glClear(GL_COLOR_BUFFER_BIT); - glDrawArrays(GL_TRIANGLES, 0, 3); - SDL_DestroyRenderer(ren); - SDL_DestroyWindow(win); - SDL_Quit(); - return 0; -} -`; - compile("sdl3 template (structure only)", sdl3Test, "-I/usr/include"); -} catch (e) { - results.push({ label: "sdl3 template compilation", status: "SKIP (no SDL3 headers)" }); - skipped++; -} - -/* ── Report ────────────────────────────────────────────────────────── */ - -console.log("\nC Compilation Tests\n===================\n"); -for (const r of results) { - const icon = r.status.startsWith("PASS") ? "✓" : r.status.startsWith("SKIP") ? "~" : "✗"; - console.log(` ${icon} ${r.label}`); - if (r.detail) console.log(` ${r.detail}`); -} -const total = passed + failed + skipped; -console.log(`\n── ${passed}/${total} passed` + (failed > 0 ? ` — ${failed} FAILURE(S)` : "") + (skipped > 0 ? ` (${skipped} skipped)` : "")); -process.exit(failed > 0 ? 1 : 0);