test: add source-built Hopper conformance fixtures

This commit is contained in:
morluto committed 2026-07-12 19:32:29 +08:00
1 parent 4f18e26ee5
commit d648bcd2e4
13 files changed
+465

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
export const LARGE_FIXTURE_COUNT: number;
export function sha256(value: string | Uint8Array): string;
export function generateLargeFixture(count?: number): string;
export function sourceDigest(
sources: readonly { readonly path: string; readonly content: string }[],
): string;
+30
View File
@@ -0,0 +1,30 @@
import { createHash } from "node:crypto";
export const LARGE_FIXTURE_COUNT = 1_205;
export const sha256 = (value) =>
createHash("sha256").update(value).digest("hex");
export const generateLargeFixture = (count = LARGE_FIXTURE_COUNT) => {
if (!Number.isInteger(count) || count < 1)
throw new Error("Fixture count must be a positive integer");
const declarations = Array.from(
{ length: count },
(_, index) =>
`__attribute__((noinline, used)) int rea_page_${String(index).padStart(4, "0")}(void) { puts("REA_PAGE_${String(index).padStart(4, "0")}"); return ${index}; }`,
);
return [
"#include <stdio.h>",
...declarations,
"int main(void) { return rea_page_0000(); }",
"",
].join("\n");
};
export const sourceDigest = (sources) => {
const canonical = [...sources]
.sort(({ path: left }, { path: right }) => left.localeCompare(right))
.map(({ path, content }) => `${path}\0${sha256(content)}\n`)
.join("");
return sha256(canonical);
};