SOURCE / PINNED RELEASE
Made of little things.
Napplet Machines V8
- Release
- f041ff5dc40c…
- Author-recorded commit
- 71c68951e1dd…
- License
- LICENSE
- Author’s source reference
- nostr://npub182jczunncwe0jn6frpqwq3e0qjws7yqqnc3auccqv9nte2dnd63scjm4rf/wss%3A%2F%2Fgit.napplet.soy%2F/n-b5572362d4a
Archive hash verified: 996282af7a380b0d…. The source-to-build association is the author’s claim; it has not been independently rebuilt.
import assert from 'node:assert/strict';
import test from 'node:test';
import { load } from './load.mjs';
const { encodeState, decodeState, stateBytes, stateBase64, stateFields } =
load('src/network-codec.ts');
const { validWorld, validInput } = load('src/network.ts');
const { createWorld } = load('src/physics.ts');
const { Road, presets } = load('src/track.ts');
const race = '12345678-1234-1234-1234-123456789abc';
const road = new Road(presets[0]);
const world = createWorld([{ id: 'a'.repeat(64), name: 'Driver', car: 0, ai: false }], road);
test('compact world preserves authoritative state and binary is measurably smaller than JSON', () => {
world.tick = 999;
world.bodies[0].ack = 1234567;
world.bodies[0].x = 123.12345;
const packet = { type: 'world', race, world },
bytes = encodeState(packet);
const decoded = decodeState(bytes, race, world.bodies);
assert.ok(validWorld(decoded.world));
assert.equal(decoded.world.bodies[0].ack, 1234567);
for (const field of stateFields)
assert.ok(Math.abs(decoded.world.bodies[0][field] - world.bodies[0][field]) < 0.0001);
assert.ok(bytes.length < JSON.stringify(packet).length * 0.3);
assert.equal(stateBase64(stateBytes(stateBase64(bytes))), stateBase64(bytes));
});
test('input encodes ordered sequences and quantized analogue intent without identities', () => {
const packet = {
type: 'input',
race,
commands: [
{ seq: 14, input: { throttle: 0.62, steer: -0.37, brake: true, boost: false, reset: true } },
],
};
const bytes = encodeState(packet),
decoded = decodeState(bytes, race, world.bodies);
assert.ok(validInput(decoded.commands[0].input));
assert.equal(decoded.commands[0].seq, 14);
assert.ok(Math.abs(decoded.commands[0].input.throttle - 0.62) < 1 / 32767);
assert.equal(bytes.length, 30);
});
test('wrong races, versions, lengths, pad bits and out-of-range values do not become usable peer state', () => {
const bytes = encodeState({ type: 'world', race, world });
assert.equal(decodeState(bytes, race.replace('1234', '0000'), world.bodies), undefined);
assert.equal(decodeState(bytes.slice(0, -1), race, world.bodies), undefined);
const bad = bytes.slice();
bad[2] = 2;
assert.equal(decodeState(bad, race, world.bodies), undefined);
const nan = bytes.slice();
new DataView(nan.buffer).setFloat32(35, NaN, true);
assert.equal(validWorld(decodeState(nan, race, world.bodies).world), false);
for (const s of ['AB==', 'AA', '_w==', 'AA==\n']) assert.equal(stateBytes(s), undefined);
});
