import { test } from 'node:test'; import assert from 'node:assert/strict'; import { decodePartNumber } from '../src/pn-decoder.js'; import { VENDOR_TABLES } from '../src/pn-tables.js'; test('dekodiert die Samsung-Teilenummer aus dem Referenzmodul', () => { const spec = decodePartNumber('M386A8K40BM1-CRC4Y'); assert.equal(spec.formFactor, 'LRDIMM'); assert.equal(spec.speed, 'PC4-2400'); assert.equal(spec.capacityGb, 64); assert.equal(spec.rank, '4DRx4'); assert.equal(spec.partNumber, 'M386A8K40BM1-CRC4Y'); }); test('erkennt die Bauform auch ohne bekannten Dichte-Code', () => { const spec = decodePartNumber('M393A2K43BB1-CTD'); assert.equal(spec.formFactor, 'RDIMM'); assert.equal(spec.speed, 'PC4-2666'); assert.equal(spec.capacityGb, null, 'unbekannter Dichte-Code laesst das Feld offen'); assert.equal(spec.rank, null); assert.equal(spec.partNumber, 'M393A2K43BB1-CTD'); }); test('normalisiert Kleinschreibung und Leerzeichen', () => { const spec = decodePartNumber(' m386a8k40bm1-crc4y '); assert.equal(spec.capacityGb, 64); assert.equal(spec.partNumber, 'M386A8K40BM1-CRC4Y'); }); test('unbekannter Hersteller liefert ein leeres Spec mit gesetzter Teilenummer', () => { const spec = decodePartNumber('7325773'); assert.equal(spec.formFactor, null); assert.equal(spec.speed, null); assert.equal(spec.capacityGb, null); assert.equal(spec.partNumber, '7325773'); }); test('leere Eingabe liefert ein vollstaendig leeres Spec', () => { const spec = decodePartNumber(''); assert.equal(spec.partNumber, null); assert.equal(spec.capacityGb, null); }); test('erkennt Bauform und Geschwindigkeit auch mit einteiliger Revision', () => { const spec = decodePartNumber('M393A2K43B-CTD'); assert.equal(spec.formFactor, 'RDIMM'); assert.equal(spec.speed, 'PC4-2666'); assert.equal(spec.capacityGb, null, 'unbekannter Dichte-Code laesst das Feld offen'); assert.equal(spec.partNumber, 'M393A2K43B-CTD'); }); test('erkennt Bauform und Geschwindigkeit auch mit vierteiliger Revision', () => { const spec = decodePartNumber('M393A2K43BBX1-CTD'); assert.equal(spec.formFactor, 'RDIMM'); assert.equal(spec.speed, 'PC4-2666'); assert.equal(spec.capacityGb, null, 'unbekannter Dichte-Code laesst das Feld offen'); assert.equal(spec.partNumber, 'M393A2K43BBX1-CTD'); }); test('Samsung-Dichte-Codes sind exakt fuenf Zeichen lang (feste Feldbreite im Muster)', () => { const samsung = VENDOR_TABLES.find((table) => table.vendor === 'Samsung'); for (const key of Object.keys(samsung.density)) { assert.equal(key.length, 5, `Dichte-Code '${key}' hat nicht die geforderte Laenge 5 und waere im Muster wirkungslos`); } });