a11oy / test /gates /doctrine_entropy.test.ts
betterwithage's picture
sync(space): complete build context — fix BUILD_ERROR (CTO)
518343a verified
Raw
History Blame
5.63 kB
/**
* doctrine_entropy.test.ts
*
* Vitest tests for the Lutar.Shannon.DoctrineEntropy gate.
*
* Tests:
* 1. 1000-input random channel-rate bound test
* 2. Encoder/decoder round-trip for all labels
* 3. Kraft inequality at equality
* 4. Receipt emission with mock signer
*
* Lean commit: c4d13795689601324fce0236351bfe0ade990a43
*/
import { describe, it, expect } from "vitest";
import {
shannonCode,
shannonDecode,
verifyRoundtrip,
verifyCodeIn2Bits,
verifyKraftEquality,
channelRateBound,
emitDoctrineEntropyReceipt,
doctrineEntropyGate,
ALL_LABELS,
DOCTRINE_ALPHABET_SIZE,
DOCTRINE_CODEWORD_LENGTH,
type DoctrineLabel,
type Signer,
} from "../../src/gates/doctrine_entropy";
// ---------------------------------------------------------------------------
// Seeded LCG
// ---------------------------------------------------------------------------
function seedRandom(seed: number) {
let s = seed >>> 0;
return () => {
s = (Math.imul(1664525, s) + 1013904223) >>> 0;
return s / 0x100000000;
};
}
const mockSigner: Signer = (p: string) =>
`mock-sig::${Buffer.from(p).slice(0, 16).toString("hex")}`;
// ---------------------------------------------------------------------------
// 1. 1000-input random channel-rate bound test
// ---------------------------------------------------------------------------
describe("doctrine_entropy: 1000-input channel rate bound test", () => {
it("channelRateBound(B, rate) = true iff rate * 2 ≤ B for 1000 random pairs", () => {
const rand = seedRandom(0x55667788);
let failures = 0;
for (let i = 0; i < 1000; i++) {
const B = Math.floor(rand() * 10000);
const rate = Math.floor(rand() * 10000);
const expected = rate * DOCTRINE_CODEWORD_LENGTH <= B;
if (channelRateBound(B, rate) !== expected) failures++;
}
expect(failures).toBe(0);
});
it("channelRateBound: rate = 0 is always admissible", () => {
const rand = seedRandom(0x11111111);
for (let i = 0; i < 1000; i++) {
const B = Math.floor(rand() * 10000);
expect(channelRateBound(B, 0)).toBe(true);
}
});
});
// ---------------------------------------------------------------------------
// 2. Encoder/decoder round-trip
// ---------------------------------------------------------------------------
describe("doctrine_entropy: encoder/decoder round-trip", () => {
it("verifyRoundtrip() is true", () => {
expect(verifyRoundtrip()).toBe(true);
});
it("shannonDecode(shannonCode(l)) = l for all labels", () => {
for (const label of ALL_LABELS) {
expect(shannonDecode(shannonCode(label))).toBe(label);
}
});
it("shannonCode produces distinct values for distinct labels", () => {
const codes = new Set(ALL_LABELS.map(shannonCode));
expect(codes.size).toBe(DOCTRINE_ALPHABET_SIZE);
});
it("shannonDecode returns null for codewords ≥ 4", () => {
expect(shannonDecode(4)).toBeNull();
expect(shannonDecode(99)).toBeNull();
expect(shannonDecode(-1)).toBeNull();
});
it("shannonCode(Bot)=0, L1=1, L2=2, Top=3", () => {
expect(shannonCode("Bot")).toBe(0);
expect(shannonCode("L1")).toBe(1);
expect(shannonCode("L2")).toBe(2);
expect(shannonCode("Top")).toBe(3);
});
});
// ---------------------------------------------------------------------------
// 3. Kraft inequality at equality
// ---------------------------------------------------------------------------
describe("doctrine_entropy: Kraft inequality (kraft_inequality_doctrine)", () => {
it("verifyKraftEquality() is true", () => {
expect(verifyKraftEquality()).toBe(true);
});
it("alphabet has exactly 4 elements (doctrine_alphabet_size_4)", () => {
expect(ALL_LABELS.length).toBe(DOCTRINE_ALPHABET_SIZE);
});
it("all codewords fit in 2 bits (shannon_code_in_2_bits)", () => {
expect(verifyCodeIn2Bits()).toBe(true);
for (const label of ALL_LABELS) {
expect(shannonCode(label)).toBeGreaterThanOrEqual(0);
expect(shannonCode(label)).toBeLessThan(4);
}
});
it("codeword length is uniformly 2 (doctrine_uniform_code_length_2_bits)", () => {
// All labels map to codewords fitting in 2 bits
for (const label of ALL_LABELS) {
expect(shannonCode(label) < 4).toBe(true);
}
});
});
// ---------------------------------------------------------------------------
// 4. Receipt emission
// ---------------------------------------------------------------------------
describe("doctrine_entropy: DSSE receipt emission", () => {
it("emits receipt with correct theorem and commit SHA", () => {
const receipt = emitDoctrineEntropyReceipt(mockSigner);
expect(receipt.theorem).toBe(
"Lutar.Shannon.doctrine_uniform_code_length_2_bits"
);
expect(receipt.lean_commit_sha).toBe("c4d13795689601324fce0236351bfe0ade990a43");
expect(receipt.output).toBe(true);
expect(receipt.inputs_hash).toMatch(/^[0-9a-f]{64}$/);
expect(receipt.sig).toContain("mock-sig::");
});
it("receipt is deterministic (same inputs_hash across calls)", () => {
const r1 = emitDoctrineEntropyReceipt(mockSigner);
const r2 = emitDoctrineEntropyReceipt(mockSigner);
expect(r1.inputs_hash).toBe(r2.inputs_hash);
expect(r1.output).toBe(r2.output);
});
it("gate returns alphabetSize=4, codewordLength=2, kraftEqualityHolds=true", () => {
const result = doctrineEntropyGate(mockSigner);
expect(result.alphabetSize).toBe(4);
expect(result.codewordLength).toBe(2);
expect(result.kraftEqualityHolds).toBe(true);
expect(result.receipt.output).toBe(true);
});
});