import assert from 'node:assert/strict'; import test from 'node:test'; import { collectSettings } from '../src/lib/parsers'; import { TarFile } from '../src/lib/untar'; import { FaderParam } from '../src/types/types'; test('preserves float32 precision for every group fader parameter', () => { const data = new Uint8Array(224); const view = new DataView(data.buffer); const expectedValues = new Map(); view.setFloat32(4, 123.456789, true); for (let groupNum = 0; groupNum < 4; groupNum++) { for (let paramNum = 0; paramNum <= 11; paramNum++) { const value = 0.1234567 + groupNum * 0.1 + paramNum * 0.0032109; const offset = 24 + groupNum * 48 + paramNum * 4; view.setFloat32(offset, value, true); expectedValues.set(`${groupNum}:${paramNum}`, view.getFloat32(offset, true)); } } const settings = collectSettings([new TarFile('settings', data.length, data)]); assert.equal(settings.bpm, 123.46); for (const [groupNum, group] of ['a', 'b', 'c', 'd'].entries()) { for (let paramNum = 0; paramNum <= 11; paramNum++) { assert.equal( settings.groupFaderParams[group][paramNum as FaderParam], expectedValues.get(`${groupNum}:${paramNum}`), ); } } });