import assert from 'node:assert/strict'; // An exact tie is handled with nearest-even, including negative input. export function roundEven(v) { const f = Math.floor(v), d = v - f; return d < 0.5 ? f : d > 0.5 ? f + 1 : f % 2 === 0 ? f : f + 1; } export const quantize = (x, s, z) => Math.min(255, Math.max(0, roundEven(x / s) + z)); const values = [-0.625, -0.375, 0, 0.375, 0.625, 40]; const codes = values.map(x => quantize(x, 0.25, 128)); assert.deepEqual(codes, [126, 126, 128, 130, 130, 255]); assert.equal(roundEven(-1.5), -2); assert.equal(roundEven(-2.5), -2); const xq = [130, 126], wq = [3, -2]; const acc = xq.reduce((sum, x, i) => sum + (x - 128) * wq[i], 0); assert.equal(acc, 10); assert.equal(acc * 0.25 * 0.5, 1.25); assert.equal(quantize(1.25, 0.25, 128), 133); console.log(JSON.stringify({codes, acc, real: 1.25, output: 133}));