File size: 2,052 Bytes
63780b7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// "0 = unproven" for the kernel probe hash (2026-10-14).
// app.js now treats phash 0 as "this device's probe did not run" and halts on it
// (the comparison used to SKIP such a peer). That is only sound if a probe that
// DID run can never hash to 0: check the canonical probe on the CPU backend and
// on a fake bgemm that returns the same result, and that a wrong kernel moves it.
const fs = require("fs");
const path = require("path");
const V = require("./public/verified_core.js");

const root = { Verified: V };
new Function("self", fs.readFileSync(path.join(__dirname, "public", "webgpu.js"), "utf8"))(root);
const mul = new Int16Array(fs.readFileSync(path.join(__dirname, "public", "mul_lut.bin")).buffer.slice(0));
const L = { mul };

let pass = 0, fail = 0;
const t = (name, ok, detail) => {
  if (ok) { pass++; console.log("  PASS  " + name); }
  else { fail++; console.log(`  FAIL  ${name}  [${detail || ""}]`); }
};

(async () => {
  const cpu = await root.Compute.kernelProbe(null, L);
  t("the canonical probe on the CPU mirror is non-zero", cpu !== 0, cpu);
  t("...and deterministic", (await root.Compute.kernelProbe(null, L)) === cpu);
  const same = { bgemm: async (Xq, Wq, rs, cs, d) => V.bgemmJS(Xq, Wq, rs, cs, d, L) };
  t("a backend computing the same values hashes the same", (await root.Compute.kernelProbe(same, L)) === cpu);
  const off = { bgemm: async (Xq, Wq, rs, cs, d) => {
    const o = V.bgemmJS(Xq, Wq, rs, cs, d, L); o[o.length - 1] += 1; return o; } };
  const h = await root.Compute.kernelProbe(off, L);
  t("a kernel wrong in one cell hashes differently (and non-zero)", h !== cpu && h !== 0, h);
  const app = fs.readFileSync(path.join(__dirname, "public", "app.js"), "utf8");
  t("app.js resets probeHash to 0 when the probe throws", /catch \(e\) \{ probeHash = 0;/.test(app));
  t("app.js halts on a roster member with phash 0", app.includes("roster.find(id => hs.has(id) && !hs.get(id).phash)"));
  console.log(`test_probe_unproven.js: ${pass} passed, ${fail} failed`);
  process.exit(fail ? 1 : 0);
})();