Back to Napplet Machines V8
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.

tests/network-codec.test.mjs
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);
});