diff --git a/tests/3_signal_pipeline/outputs/anthropic_claude-opus-4.5 TEMP_0.7.js b/tests/3_signal_pipeline/outputs/anthropic_claude-opus-4.5 TEMP_0.7.js
new file mode 100644
index 0000000..e94a589
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/anthropic_claude-opus-4.5 TEMP_0.7.js
@@ -0,0 +1,46 @@
+async function analyzeSignal(yamlString) {
+ const [
+ { default: jsYaml },
+ math,
+ { default: ndarray },
+ ndarrayFft,
+ DOMPurify
+ ] = await Promise.all([
+ import('https://esm.sh/js-yaml'),
+ import('https://esm.sh/mathjs'),
+ import('https://esm.sh/ndarray'),
+ import('https://esm.sh/ndarray-fft'),
+ import('https://esm.sh/dompurify')
+ ]);
+
+ const cfg = jsYaml.load(yamlString);
+ const N = cfg.sampleRate * cfg.duration;
+ const signal = Array(N).fill(0).map((_, i) => {
+ const t = i / cfg.sampleRate;
+ return cfg.components.reduce((s, c) =>
+ s + c.amplitude * math.sin(2 * math.pi * c.frequency * t), 0);
+ });
+
+ const real = ndarray(new Float64Array(signal), [N]);
+ const imag = ndarray(new Float64Array(N), [N]);
+ ndarrayFft(1, real, imag);
+
+ const half = N / 2;
+ const mags = Array(half + 1).fill(0).map((_, k) =>
+ math.sqrt(real.get(k) ** 2 + imag.get(k) ** 2) / half);
+
+ const peaks = mags
+ .map((m, k) => ({ frequencyHz: Math.round(k * cfg.sampleRate / N), magnitude: +m.toFixed(2) }))
+ .filter(p => p.magnitude > 0.1)
+ .sort((a, b) => b.magnitude - a.magnitude);
+
+ const rows = peaks.map(p => `
| ${p.frequencyHz} | ${p.magnitude} |
`).join('');
+ const html = DOMPurify.sanitize(
+ `| Frequency (Hz) | Magnitude |
${rows}
`
+ );
+
+ return { peaks, html, signalLength: N };
+}
+export default analyzeSignal;
+// Generation time: 6.922s
+// Result: FAIL
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/anthropic_claude-opus-4.6.js b/tests/3_signal_pipeline/outputs/anthropic_claude-opus-4.6.js
new file mode 100644
index 0000000..6e61464
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/anthropic_claude-opus-4.6.js
@@ -0,0 +1,62 @@
+async function analyzeSignal(yamlString) {
+ const [
+ jsYaml,
+ math,
+ ndarray,
+ ndarrayFft,
+ DOMPurify
+ ] = await Promise.all([
+ import("https://cdn.jsdelivr.net/npm/js-yaml@4/+esm").then(m => m.default || m),
+ import("https://cdn.jsdelivr.net/npm/mathjs@13/+esm").then(m => m.default || m),
+ import("https://cdn.jsdelivr.net/npm/ndarray@1/+esm").then(m => m.default || m),
+ import("https://cdn.jsdelivr.net/npm/ndarray-fft@1/+esm").then(m => m.default || m),
+ import("https://cdn.jsdelivr.net/npm/dompurify@3/+esm").then(m => m.default || m),
+ ]);
+
+ const config = jsYaml.load(yamlString);
+ const { sampleRate, duration, components } = config;
+ const N = sampleRate * duration;
+
+ const signalData = new Float64Array(N);
+ for (let i = 0; i < N; i++) {
+ const t = i / sampleRate;
+ let sum = 0;
+ for (const { frequency, amplitude } of components)
+ sum += amplitude * math.sin(2 * math.pi * frequency * t);
+ signalData[i] = sum;
+ }
+
+ const real = ndarray(new Float64Array(signalData), [N]);
+ const imag = ndarray(new Float64Array(N), [N]);
+
+ ndarrayFft(1, real, imag);
+
+ const half = N / 2;
+ const magnitudes = [];
+ for (let k = 0; k <= half; k++) {
+ const r = real.get(k);
+ const im = imag.get(k);
+ magnitudes.push(math.sqrt(r ** 2 + im ** 2) / half);
+ }
+
+ const peaks = magnitudes
+ .map((mag, k) => ({
+ frequencyHz: Math.round(k * sampleRate / N),
+ magnitude: Math.round(mag * 100) / 100
+ }))
+ .filter(p => p.magnitude > 0.1)
+ .sort((a, b) => b.magnitude - a.magnitude);
+
+ const rows = peaks
+ .map(p => `| ${p.frequencyHz} | ${p.magnitude} |
`)
+ .join("");
+
+ const html = DOMPurify.sanitize(
+ `| Frequency (Hz) | Magnitude |
${rows}
`
+ );
+
+ return { peaks, html, signalLength: N };
+}
+export default analyzeSignal;
+// Generation time: 9.844s
+// Result: PASS
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/anthropic_claude-sonnet-4.5 TEMP_0.7.js b/tests/3_signal_pipeline/outputs/anthropic_claude-sonnet-4.5 TEMP_0.7.js
new file mode 100644
index 0000000..c7933fa
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/anthropic_claude-sonnet-4.5 TEMP_0.7.js
@@ -0,0 +1,54 @@
+const analyzeSignal = async (yamlStr) => {
+ const [
+ { load: loadYaml },
+ math,
+ ndarray,
+ { fft },
+ DOMPurify
+ ] = await Promise.all([
+ import('https://cdn.jsdelivr.net/npm/js-yaml@4/dist/js-yaml.mjs'),
+ import('https://cdn.jsdelivr.net/npm/mathjs@12/lib/esm/index.js'),
+ import('https://cdn.jsdelivr.net/npm/ndarray@1/+esm'),
+ import('https://cdn.jsdelivr.net/npm/ndarray-fft@1/+esm'),
+ import('https://cdn.jsdelivr.net/npm/dompurify@3/dist/purify.es.mjs')
+ ]);
+
+ const config = loadYaml(yamlStr);
+ const N = config.sampleRate * config.duration;
+
+ const signal = Array.from({ length: N }, (_, i) => {
+ const t = i / config.sampleRate;
+ return config.components.reduce((sum, { frequency, amplitude }) =>
+ sum + amplitude * math.sin(2 * math.pi * frequency * t), 0);
+ });
+
+ const real = ndarray(new Float64Array(signal), [N]);
+ const imag = ndarray(new Float64Array(N), [N]);
+
+ fft(1, real, imag);
+
+ const magnitude = Array.from({ length: Math.floor(N / 2) + 1 }, (_, k) =>
+ math.sqrt(math.pow(real.get(k), 2) + math.pow(imag.get(k), 2)) / (N / 2));
+
+ const peaks = magnitude
+ .map((mag, k) => ({
+ frequencyHz: Math.round(k * config.sampleRate / N),
+ magnitude: Math.round(mag * 100) / 100
+ }))
+ .filter(({ magnitude }) => magnitude > 0.1)
+ .sort((a, b) => b.magnitude - a.magnitude);
+
+ const html = `| Frequency (Hz) | Magnitude |
${
+ peaks.map(({ frequencyHz, magnitude }) =>
+ `| ${frequencyHz} | ${magnitude} |
`).join('')
+ }
`;
+
+ return {
+ peaks,
+ html: DOMPurify.sanitize(html),
+ signalLength: N
+ };
+};
+export default analyzeSignal;
+// Generation time: 8.641s
+// Result: FAIL
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/anthropic_claude-sonnet-4.6.js b/tests/3_signal_pipeline/outputs/anthropic_claude-sonnet-4.6.js
new file mode 100644
index 0000000..2768de3
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/anthropic_claude-sonnet-4.6.js
@@ -0,0 +1,60 @@
+async function analyzeSignal(yamlString) {
+ const CDN = "https://cdn.jsdelivr.net/npm";
+
+ const [{ default: jsyaml }, { create, all }, { default: ndarray }, { default: fft }, { default: DOMPurify }] =
+ await Promise.all([
+ import(`${CDN}/js-yaml/dist/js-yaml.mjs`),
+ import(`${CDN}/mathjs/src/entry/allLimitedExports.mjs`),
+ import(`${CDN}/ndarray/ndarray.mjs`),
+ import(`${CDN}/ndarray-fft/dist/ndarray-fft.mjs`),
+ import(`${CDN}/dompurify/dist/purify.es.mjs`),
+ ]);
+
+ const math = create(all);
+ const config = jsyaml.load(yamlString);
+
+ const { sampleRate, duration, components } = config;
+ const N = sampleRate * duration;
+
+ const signal = Array.from({ length: N }, (_, i) => {
+ const t = i / sampleRate;
+ return components.reduce((sum, { frequency, amplitude }) =>
+ sum + amplitude * math.sin(2 * math.pi * frequency * t), 0);
+ });
+
+ const realData = new Float64Array(signal);
+ const imagData = new Float64Array(N);
+ const real = ndarray(realData, [N]);
+ const imag = ndarray(imagData, [N]);
+
+ fft(1, real, imag);
+
+ const half = N / 2;
+ const magnitude = Array.from({ length: half + 1 }, (_, k) =>
+ math.sqrt(real.get(k) ** 2 + imag.get(k) ** 2) / half
+ );
+
+ const peaks = magnitude
+ .reduce((acc, mag, k) => {
+ if (mag > 0.1) acc.push({
+ frequencyHz: Math.round(k * sampleRate / N),
+ magnitude: Math.round(mag * 100) / 100,
+ });
+ return acc;
+ }, [])
+ .sort((a, b) => b.magnitude - a.magnitude);
+
+ const rows = peaks.map(({ frequencyHz, magnitude }) =>
+ `| ${frequencyHz} | ${magnitude} |
`
+ ).join("");
+
+ const rawHtml =
+ `| Frequency (Hz) | Magnitude |
${rows}
`;
+
+ const html = DOMPurify.sanitize(rawHtml);
+
+ return { peaks, html, signalLength: N };
+}
+export default analyzeSignal;
+// Generation time: 8.705s
+// Result: FAIL
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/deepseek_deepseek-v3.2.js b/tests/3_signal_pipeline/outputs/deepseek_deepseek-v3.2.js
new file mode 100644
index 0000000..5dd7566
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/deepseek_deepseek-v3.2.js
@@ -0,0 +1,59 @@
+const analyzeSignal = async (yamlString) => {
+ const { load } = await import('https://cdn.jsdelivr.net/npm/js-yaml@4.1.0/+esm');
+ const math = await import('https://cdn.jsdelivr.net/npm/mathjs@11.9.1/+esm');
+ const ndarray = await import('https://cdn.jsdelivr.net/npm/ndarray@1.0.19/+esm');
+ const fft = await import('https://cdn.jsdelivr.net/npm/ndarray-fft@1.0.6/+esm');
+ const DOMPurify = await import('https://cdn.jsdelivr.net/npm/dompurify@3.0.6/+esm');
+
+ const config = load(yamlString);
+ const { sampleRate, duration, components } = config;
+ const N = sampleRate * duration;
+ const signal = new Float64Array(N);
+
+ for (let i = 0; i < N; i++) {
+ let t = i / sampleRate;
+ let value = 0;
+ for (const comp of components) {
+ value += comp.amplitude * math.sin(2 * math.pi * comp.frequency * t);
+ }
+ signal[i] = value;
+ }
+
+ const real = ndarray.default(signal.slice());
+ const imag = ndarray.default(new Float64Array(N));
+ fft.default(1, real, imag);
+
+ const magnitudes = [];
+ const halfN = Math.floor(N / 2);
+ for (let k = 0; k <= halfN; k++) {
+ const re = real.get(k);
+ const im = imag.get(k);
+ magnitudes[k] = Math.sqrt(re * re + im * im) / halfN;
+ }
+
+ const peaks = [];
+ for (let k = 0; k <= halfN; k++) {
+ if (magnitudes[k] > 0.1) {
+ peaks.push({
+ frequencyHz: Math.round(k * sampleRate / N),
+ magnitude: Math.round(magnitudes[k] * 100) / 100
+ });
+ }
+ }
+ peaks.sort((a, b) => b.magnitude - a.magnitude);
+
+ let html = `| Frequency (Hz) | Magnitude |
`;
+ peaks.forEach(p => {
+ html += `| ${p.frequencyHz} | ${p.magnitude} |
`;
+ });
+ html += `
`;
+
+ return {
+ peaks,
+ html: DOMPurify.default.sanitize(html),
+ signalLength: N
+ };
+};
+export default analyzeSignal;
+// Generation time: 19.364s
+// Result: FAIL
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/google_gemini-3-flash-preview TEMP_0.35.js b/tests/3_signal_pipeline/outputs/google_gemini-3-flash-preview TEMP_0.35.js
new file mode 100644
index 0000000..fb32b51
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/google_gemini-3-flash-preview TEMP_0.35.js
@@ -0,0 +1,54 @@
+async function analyzeSignal(yamlStr) {
+ const [
+ { load: parseYaml },
+ math,
+ ndarray,
+ fft,
+ { default: purify }
+ ] = await Promise.all([
+ import('https://cdn.skypack.dev/js-yaml'),
+ import('https://cdn.skypack.dev/mathjs'),
+ import('https://cdn.skypack.dev/ndarray'),
+ import('https://cdn.skypack.dev/ndarray-fft'),
+ import('https://cdn.skypack.dev/dompurify')
+ ]);
+
+ const { sampleRate: fs, duration, components } = parseYaml(yamlStr);
+ const N = fs * duration;
+ const signal = new Float64Array(N);
+
+ for (let i = 0; i < N; i++) {
+ const t = i / fs;
+ signal[i] = components.reduce((acc, { frequency: f, amplitude: a }) =>
+ acc + a * math.sin(2 * math.pi * f * t), 0);
+ }
+
+ const real = ndarray(new Float64Array(signal), [N]);
+ const imag = ndarray(new Float64Array(N), [N]);
+ fft(1, real, imag);
+
+ const peaks = [];
+ for (let k = 0; k <= N / 2; k++) {
+ const mag = math.sqrt(real.get(k) ** 2 + imag.get(k) ** 2) / (N / 2);
+ if (mag > 0.1) {
+ peaks.push({
+ frequencyHz: Math.round(k * fs / N),
+ magnitude: +mag.toFixed(2)
+ });
+ }
+ }
+
+ peaks.sort((a, b) => b.magnitude - a.magnitude);
+
+ const rows = peaks.map(p => `| ${p.frequencyHz} | ${p.magnitude} |
`).join('');
+ const rawHtml = `| Frequency (Hz) | Magnitude |
${rows}
`;
+
+ return {
+ peaks,
+ html: purify.sanitize(rawHtml),
+ signalLength: N
+ };
+}
+export default analyzeSignal;
+// Generation time: 4.379s
+// Result: FAIL
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/google_gemini-3-pro-preview TEMP_0.35.js b/tests/3_signal_pipeline/outputs/google_gemini-3-pro-preview TEMP_0.35.js
new file mode 100644
index 0000000..c7e9f5b
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/google_gemini-3-pro-preview TEMP_0.35.js
@@ -0,0 +1,50 @@
+const analyzeSignal = async (yamlInput) => {
+ const cdn = 'https://esm.sh/',
+ [Yaml, MathPkg, ndarray, fft, DOMPurify] = await Promise.all(
+ ['js-yaml', 'mathjs', 'ndarray', 'ndarray-fft', 'dompurify'].map(lib =>
+ import(`${cdn}${lib}`).then(m => m.default || m)
+ )
+ );
+
+ const { sampleRate: sr, duration: dur, components: comps } = Yaml.load(yamlInput),
+ N = sr * dur,
+ realData = new Float64Array(N),
+ imagData = new Float64Array(N);
+
+ for (let i = 0; i < N; i++) {
+ const t = i / sr;
+ realData[i] = comps.reduce((acc, { frequency: f, amplitude: a }) =>
+ acc + a * MathPkg.sin(2 * MathPkg.pi * f * t), 0);
+ }
+
+ const r = ndarray(realData, [N]),
+ i = ndarray(imagData, [N]);
+
+ fft(1, r, i);
+
+ const peaks = [];
+ for (let k = 0; k <= N / 2; k++) {
+ const mag = MathPkg.sqrt(r.get(k) ** 2 + i.get(k) ** 2) / (N / 2);
+ if (mag > 0.1) {
+ peaks.push({
+ frequencyHz: Math.round(k * sr / N),
+ magnitude: +mag.toFixed(2)
+ });
+ }
+ }
+
+ peaks.sort((a, b) => b.magnitude - a.magnitude);
+
+ const rows = peaks.map(p => `| ${p.frequencyHz} | ${p.magnitude} |
`).join(''),
+ rawHtml = `| Frequency (Hz) | Magnitude |
${rows}
`,
+ purifier = DOMPurify(self);
+
+ return {
+ peaks,
+ html: purifier.sanitize(rawHtml),
+ signalLength: N
+ };
+};
+export default analyzeSignal;
+// Generation time: 50.247s
+// Result: PASS
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/google_gemini-3.1-flash-lite-preview.js b/tests/3_signal_pipeline/outputs/google_gemini-3.1-flash-lite-preview.js
new file mode 100644
index 0000000..a99c46c
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/google_gemini-3.1-flash-lite-preview.js
@@ -0,0 +1,42 @@
+async function analyzeSignal(yaml) {
+ const [yamlLib, math, ndarray, fft, purify] = await Promise.all([
+ import('https://cdn.skypack.dev/js-yaml'),
+ import('https://cdn.skypack.dev/mathjs'),
+ import('https://cdn.skypack.dev/ndarray'),
+ import('https://cdn.skypack.dev/ndarray-fft'),
+ import('https://cdn.skypack.dev/dompurify')
+ ]);
+
+ const { sampleRate, duration, components } = yamlLib.load(yaml);
+ const N = sampleRate * duration;
+ const real = ndarray(new Float64Array(N));
+ const imag = ndarray(new Float64Array(N));
+
+ for (let i = 0; i < N; i++) {
+ const t = i / sampleRate;
+ real.set(i, components.reduce((acc, c) =>
+ acc + c.amplitude * math.sin(2 * math.pi * c.frequency * t), 0));
+ }
+
+ fft(1, real, imag);
+
+ const peaks = [];
+ for (let k = 0; k <= N / 2; k++) {
+ const mag = math.sqrt(real.get(k) ** 2 + imag.get(k) ** 2) / (N / 2);
+ if (mag > 0.1) peaks.push({
+ frequencyHz: Math.round(k * sampleRate / N),
+ magnitude: Math.round(mag * 100) / 100
+ });
+ }
+
+ peaks.sort((a, b) => b.magnitude - a.magnitude);
+
+ const html = purify.sanitize(`| Frequency (Hz) | Magnitude |
` +
+ peaks.map(p => `| ${p.frequencyHz} | ${p.magnitude} |
`).join('') +
+ `
`);
+
+ return { peaks, html, signalLength: N };
+}
+export default analyzeSignal;
+// Generation time: 2.100s
+// Result: FAIL
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/google_gemini-3.1-pro-preview.js b/tests/3_signal_pipeline/outputs/google_gemini-3.1-pro-preview.js
new file mode 100644
index 0000000..4bd1879
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/google_gemini-3.1-pro-preview.js
@@ -0,0 +1,44 @@
+export async function analyzeSignal(y) {
+ const [yM, mM, nM, fM, dM] = await Promise.all([
+ 'js-yaml', 'mathjs', 'ndarray', 'ndarray-fft', 'dompurify'
+ ].map(p => import(`https://esm.sh/${p}`)));
+
+ const load = yM.load || yM.default.load || yM.default;
+ const { sin, pi, sqrt } = mM.default || mM;
+ const ndarray = nM.default || nM;
+ const fft = fM.default || fM;
+ const DP = dM.default || dM;
+
+ const c = load(y);
+ const N = c.sampleRate * c.duration;
+ const R = new Float64Array(N), I = new Float64Array(N);
+
+ for (let i = 0; i < N; i++) {
+ let t = i / c.sampleRate, s = 0;
+ for (const p of c.components) s += p.amplitude * sin(2 * pi * p.frequency * t);
+ R[i] = s;
+ }
+
+ const r = ndarray(R), img = ndarray(I);
+ fft(1, r, img);
+
+ const pks = [], norm = N / 2;
+ for (let k = 0; k <= norm; k++) {
+ const m = sqrt(r.get(k) ** 2 + img.get(k) ** 2) / norm;
+ if (m > 0.1) pks.push({
+ frequencyHz: Math.round(k * c.sampleRate / N),
+ magnitude: +m.toFixed(2)
+ });
+ }
+
+ pks.sort((a, b) => b.magnitude - a.magnitude);
+
+ const h = `| Frequency (Hz) | Magnitude |
${
+ pks.map(p => `| ${p.frequencyHz} | ${p.magnitude} |
`).join('')
+ }
`;
+
+ return { peaks: pks, html: DP.sanitize(h), signalLength: N };
+}
+export default analyzeSignal;
+// Generation time: 50.698s
+// Result: PASS
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/minimax_minimax-m2.5.js b/tests/3_signal_pipeline/outputs/minimax_minimax-m2.5.js
new file mode 100644
index 0000000..e6c5f62
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/minimax_minimax-m2.5.js
@@ -0,0 +1,68 @@
+let _jsYaml, _math, _ndarray, _fft, _purify;
+
+
+ if (!_jsYaml) {
+ _jsYaml = (await import('https://cdn.jsdelivr.net/npm/js-yaml@4.1.0/dist/js-yaml.mjs')).default;
+ }
+ const { sampleRate, duration, components } = _jsYaml.load(yamlString);
+ const N = sampleRate * duration;
+
+ if (!_math) {
+ _math = await import('https://cdn.jsdelivr.net/npm/mathjs@11.8.0/lib/esm/index.js');
+ }
+
+ const signal = new Float64Array(N);
+ for (let i = 0; i < N; i++) {
+ const t = i / sampleRate;
+ let sum = 0;
+ for (const { frequency, amplitude } of components) {
+ sum += amplitude * _math.sin(2 * _math.pi * frequency * t);
+ }
+ signal[i] = sum;
+ }
+
+ if (!_ndarray) {
+ const ndMod = await import('https://cdn.jsdelivr.net/npm/ndarray@1.0.19/index.mjs');
+ _ndarray = ndMod.default || ndMod.ndarray;
+ }
+ if (!_fft) {
+ const fftMod = await import('https://cdn.jsdelivr.net/npm/ndarray-fft@1.0.0/index.mjs');
+ _fft = fftMod.fft || fftMod.default;
+ }
+ if (!_purify) {
+ const purifyMod = await import('https://cdn.jsdelivr.net/npm/dompurify@3.0.3/dist/purify.es.js');
+ _purify = purifyMod.default || purifyMod;
+ }
+
+ const real = _ndarray(signal, [N]);
+ const imag = _ndarray(new Float64Array(N), [N]);
+
+ _fft(1, real, imag);
+
+ const half = N / 2;
+ const peaks = [];
+ for (let k = 0; k <= half; k++) {
+ const re = real.get(k);
+ const im = imag.get(k);
+ const mag = _math.sqrt(re * re + im * im) / half;
+ if (mag > 0.1) {
+ const freq = Math.round(k * sampleRate / N);
+ const magRounded = Math.round(mag * 100) / 100;
+ peaks.push({ frequencyHz: freq, magnitude: magRounded });
+ }
+ }
+ peaks.sort((a, b) => b.magnitude - a.magnitude);
+
+ let html = '| Frequency (Hz) | Magnitude |
';
+ for (const p of peaks) {
+ html += `| ${p.frequencyHz} | ${p.magnitude.toFixed(2)} |
`;
+ }
+ html += '
';
+
+ const sanitized = _purify.sanitize(html);
+
+ return { peaks, html: sanitized, signalLength: N };
+}
+export default analyzeSignal;
+// Generation time: 94.075s
+// Result: FAIL
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/moonshotai_kimi-k2.5.js b/tests/3_signal_pipeline/outputs/moonshotai_kimi-k2.5.js
new file mode 100644
index 0000000..985ad36
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/moonshotai_kimi-k2.5.js
@@ -0,0 +1,27 @@
+const analyzeSignal=async y=>{
+ const[{load},{sin,pi,sqrt},ndarray,fft,{default:DOMPurify}]=await Promise.all([
+ import('https://cdn.jsdelivr.net/npm/js-yaml@4.1.0/dist/js-yaml.mjs'),
+ import('https://cdn.jsdelivr.net/npm/mathjs@11.8.0/lib/esm/index.js'),
+ import('https://cdn.jsdelivr.net/npm/ndarray@1.0.19/+esm'),
+ import('https://cdn.jsdelivr.net/npm/ndarray-fft@1.0.3/+esm'),
+ import('https://cdn.jsdelivr.net/npm/dompurify@3.0.3/dist/purify.es.mjs')
+ ]);
+ const{sampleRate:s,duration:d,components:c}=load(y),N=s*d,
+ signal=Array(N).fill().map((_,i)=>{
+ const t=i/s;
+ return c.reduce((a,{frequency:f,amplitude:m})=>a+m*sin(2*pi*f*t),0)
+ }),
+ real=ndarray(signal),
+ imag=ndarray(Array(N).fill(0));
+ fft(1,real,imag);
+ const H=N/2,
+ mags=Array(H+1).fill().map((_,k)=>sqrt(real.get(k)**2+imag.get(k)**2)/H),
+ peaks=mags.map((m,k)=>({frequencyHz:Math.round(k*s/N),magnitude:Math.round(m*100)/100}))
+ .filter(p=>p.magnitude>.1)
+ .sort((a,b)=>b.magnitude-a.magnitude),
+ html=`| Frequency (Hz) | Magnitude |
${peaks.map(p=>`| ${p.frequencyHz} | ${p.magnitude} |
`).join('')}
`;
+ return{peaks,html:DOMPurify.sanitize(html),signalLength:N}
+}
+export default analyzeSignal;
+// Generation time: 171.544s
+// Result: FAIL
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/openai_gpt-5.3-codex.js b/tests/3_signal_pipeline/outputs/openai_gpt-5.3-codex.js
new file mode 100644
index 0000000..2337114
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/openai_gpt-5.3-codex.js
@@ -0,0 +1,64 @@
+const libsPromise = (async () => {
+ const [y, m, n, f, d] = await Promise.all([
+ import("https://cdn.jsdelivr.net/npm/js-yaml@4.1.0/+esm"),
+ import("https://esm.sh/mathjs@13.0.3"),
+ import("https://esm.sh/ndarray@1.0.19"),
+ import("https://esm.sh/ndarray-fft@1.0.3"),
+ import("https://unpkg.com/dompurify@3.1.6/dist/purify.es.mjs")
+ ]);
+ return {
+ yaml: y.default?.load ? y.default : y,
+ math: m.default?.sin ? m.default : m,
+ ndarray: n.default || n,
+ fft: f.default || f.fft || f,
+ DOMPurify: d.default?.sanitize ? d.default : d
+ };
+})();
+
+async function analyzeSignal(yamlString) {
+ const { yaml, math, ndarray, fft, DOMPurify } = await libsPromise;
+ const cfg = yaml.load(String(yamlString || "")) || {};
+ const sampleRate = Number(cfg.sampleRate) || 64;
+ const duration = Number(cfg.duration) || 1;
+ const components = Array.isArray(cfg.components) ? cfg.components : [];
+ const N = Math.max(1, Math.floor(sampleRate * duration));
+ const signal = new Float64Array(N);
+
+ for (let i = 0; i < N; i++) {
+ const t = i / sampleRate;
+ let v = 0;
+ for (let j = 0; j < components.length; j++) {
+ const c = components[j] || {};
+ v += (Number(c.amplitude) || 0) * math.sin(2 * math.pi * (Number(c.frequency) || 0) * t);
+ }
+ signal[i] = v;
+ }
+
+ const realData = new Float64Array(signal);
+ const imagData = new Float64Array(N);
+ const real = ndarray(realData, [N]);
+ const imag = ndarray(imagData, [N]);
+ fft(1, real, imag);
+
+ const half = Math.floor(N / 2);
+ const norm = N / 2 || 1;
+ const peaks = [];
+
+ for (let k = 0; k <= half; k++) {
+ const mag = math.sqrt(real.get(k) ** 2 + imag.get(k) ** 2) / norm;
+ if (mag > 0.1) peaks.push({
+ frequencyHz: Math.round((k * sampleRate) / N),
+ magnitude: Number(mag.toFixed(2))
+ });
+ }
+
+ peaks.sort((a, b) => b.magnitude - a.magnitude);
+
+ const rows = peaks.map(p => `| ${p.frequencyHz} | ${p.magnitude} |
`).join("");
+ const html = DOMPurify.sanitize(`| Frequency (Hz) | Magnitude |
${rows}
`);
+
+ return { peaks, html, signalLength: N };
+}
+export default analyzeSignal;
+// Generation time: 28.814s
+// Result: PASS
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/x-ai_grok-4.js b/tests/3_signal_pipeline/outputs/x-ai_grok-4.js
new file mode 100644
index 0000000..103ea05
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/x-ai_grok-4.js
@@ -0,0 +1,51 @@
+async function analyzeSignal(yamlString) {
+ const { load } = await import('https://cdn.jsdelivr.net/npm/js-yaml@4.1.0/dist/js-yaml.mjs');
+ const { create, all } = await import('https://cdn.jsdelivr.net/npm/mathjs@12.4.1/+esm');
+ const math = create(all);
+ const ndarray = (await import('https://unpkg.com/ndarray@1.0.19?module')).default;
+ const fft = (await import('https://unpkg.com/ndarray-fft@1.0.3?module')).default;
+ const DOMPurify = (await import('https://cdn.jsdelivr.net/npm/dompurify@3.1.6/dist/purify.es.js')).default;
+ const config = load(yamlString);
+ const sampleRate = config.sampleRate;
+ const duration = config.duration;
+ const N = sampleRate * duration;
+ const signal = new Array(N);
+ for (let i = 0; i < N; i++) {
+ const t = i / sampleRate;
+ let val = 0;
+ for (let comp of config.components) {
+ val += comp.amplitude * math.sin(2 * math.pi * comp.frequency * t);
+ }
+ signal[i] = val;
+ }
+ const real = ndarray(new Float64Array(signal), [N]);
+ const imag = ndarray(new Float64Array(N), [N]);
+ fft(1, real, imag);
+ const halfN = N / 2;
+ const magnitude = new Array(Math.floor(halfN) + 1);
+ for (let k = 0; k < magnitude.length; k++) {
+ magnitude[k] = math.sqrt(math.pow(real.get(k), 2) + math.pow(imag.get(k), 2)) / halfN;
+ }
+ const peaks = [];
+ for (let k = 0; k < magnitude.length; k++) {
+ const m = magnitude[k];
+ if (m > 0.1) {
+ const freq = k * sampleRate / N;
+ peaks.push({
+ frequencyHz: Math.round(freq),
+ magnitude: Number(m.toFixed(2))
+ });
+ }
+ }
+ peaks.sort((a, b) => b.magnitude - a.magnitude);
+ let html = '| Frequency (Hz) | Magnitude |
';
+ for (let p of peaks) {
+ html += `| ${p.frequencyHz} | ${p.magnitude} |
`;
+ }
+ html += '
';
+ const sanitized = DOMPurify.sanitize(html);
+ return { peaks, html: sanitized, signalLength: N };
+}
+export default analyzeSignal;
+// Generation time: 85.724s
+// Result: FAIL
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/z-ai_glm-4.7.js b/tests/3_signal_pipeline/outputs/z-ai_glm-4.7.js
new file mode 100644
index 0000000..88de7b8
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/z-ai_glm-4.7.js
@@ -0,0 +1,60 @@
+async function analyzeSignal(str) {
+ const [
+ { load },
+ { create, all },
+ { default: ndarray },
+ { default: ndfft },
+ { default: purify }
+ ] = await Promise.all([
+ import('https://cdn.skypack.dev/js-yaml'),
+ import('https://cdn.skypack.dev/mathjs'),
+ import('https://cdn.skypack.dev/ndarray'),
+ import('https://cdn.skypack.dev/ndarray-fft'),
+ import('https://cdn.skypack.dev/dompurify')
+ ]);
+
+ const m = create(all);
+ const { sampleRate: s, duration: d, components: c } = load(str);
+ const N = s * d;
+ const sig = new Float64Array(N);
+
+ for (let i = 0; i < N; i++) {
+ const t = i / s;
+ let v = 0;
+ for (const { frequency: f, amplitude: a } of c) {
+ v += a * m.sin(2 * m.pi * f * t);
+ }
+ sig[i] = v;
+ }
+
+ const r = ndarray(sig);
+ const im = ndarray(new Float64Array(N));
+ ndfft(1, r, im);
+
+ const peaks = [];
+ const half = N / 2;
+
+ for (let k = 0; k <= half; k++) {
+ const rv = r.get(k);
+ const iv = im.get(k);
+ const mag = m.sqrt(rv * rv + iv * iv) / half;
+ if (mag > 0.1) {
+ peaks.push({
+ frequencyHz: Math.round(k * s / N),
+ magnitude: Number(mag.toFixed(2))
+ });
+ }
+ }
+
+ peaks.sort((x, y) => y.magnitude - x.magnitude);
+
+ const html = peaks.reduce((h, p) =>
+ `${h}| ${p.frequencyHz} | ${p.magnitude} |
`,
+ `| Frequency (Hz) | Magnitude |
`
+ ) + "
";
+
+ return { peaks, html: purify.sanitize(html), signalLength: N };
+}
+export default analyzeSignal;
+// Generation time: 341.010s
+// Result: FAIL
\ No newline at end of file
diff --git a/tests/3_signal_pipeline/outputs/z-ai_glm-5.js b/tests/3_signal_pipeline/outputs/z-ai_glm-5.js
new file mode 100644
index 0000000..05e31aa
--- /dev/null
+++ b/tests/3_signal_pipeline/outputs/z-ai_glm-5.js
@@ -0,0 +1,42 @@
+async function analyzeSignal(yamlStr) {
+ const [{ default: yaml }, { default: math }, { default: nd }, { default: fft }, { default: purify }] = await Promise.all([
+ import('https://esm.sh/js-yaml'),
+ import('https://esm.sh/mathjs'),
+ import('https://esm.sh/ndarray'),
+ import('https://esm.sh/ndarray-fft'),
+ import('https://esm.sh/dompurify')
+ ]);
+
+ const { sampleRate: sr, duration, components } = yaml.load(yamlStr);
+ const N = sr * duration;
+ const sig = Array.from({ length: N }, (_, i) =>
+ components.reduce((s, { frequency, amplitude }) =>
+ s + amplitude * math.sin(2 * math.pi * frequency * i / sr), 0)
+ );
+
+ const re = nd(new Float64Array(sig), [N]);
+ const im = nd(new Float64Array(N), [N]);
+ fft(1, re, im);
+
+ const peaks = [];
+ for (let k = 0; k <= N / 2; k++) {
+ const mag = math.sqrt(re.get(k) ** 2 + im.get(k) ** 2) / (N / 2);
+ if (mag > 0.1) peaks.push({
+ frequencyHz: Math.round(k * sr / N),
+ magnitude: +mag.toFixed(2)
+ });
+ }
+
+ peaks.sort((a, b) => b.magnitude - a.magnitude);
+
+ return {
+ peaks,
+ html: purify.sanitize(`| Frequency (Hz) | Magnitude |
${
+ peaks.map(p => `| ${p.frequencyHz} | ${p.magnitude} |
`).join('')
+ }
`),
+ signalLength: N
+ };
+}
+export default analyzeSignal;
+// Generation time: 285.288s
+// Result: FAIL
\ No newline at end of file