Files
ocr_scanner/test/pn-decoder.test.js
T
vchuserandClaude Opus 5 e14d607761 Fix Samsung pattern to handle variable revision lengths
Das Samsung-Muster hat die Revision auf exakt 3 Zeichen festgelegt und die
Dichte-Gruppe auf exakt 4 Folgezeichen. Dies führte dazu, dass bei
abweichender Revisionslänge das gesamte Muster nicht passte und Bauform,
Geschwindigkeit und Kapazität verloren gingen.

Das neue Muster verwendet einen faul (lazy) Quantifier für die
Dichte-Gruppe (4-6 Zeichen) und erlaubt beliebig lange Revisionen vor
dem Bindestrich. Dadurch werden Bauform und Geschwindigkeit auch bei
nicht standardisierten Revisionslängen korrekt erkannt.

- M393A2K43B-CTD (einteilige Revision)
- M393A2K43BBX1-CTD (vierteilige Revision)

Beide Tests bestätigen jetzt die korrekte Erkennung von Bauform und
Geschwindigkeit unabhängig von der Revisionslänge.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-28 14:34:40 +02:00

58 lines
2.2 KiB
JavaScript

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { decodePartNumber } from '../src/pn-decoder.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');
});