Files
ocr_scanner/test/spec-match.test.js
T

59 lines
2.5 KiB
JavaScript

import { test } from 'node:test';
import assert from 'node:assert/strict';
import { KNOWN, emptySpec, canonical, matchKnown, specsCompatible } from '../src/spec.js';
test('canonical bildet verwechselbare Zeichen auf einen Vertreter ab', () => {
assert.equal(canonical('PC4-24O0'), canonical('PC4-2400'));
assert.equal(canonical('1RX8'), canonical('IRX8'));
assert.equal(canonical('BGB'), canonical('868'));
assert.equal(canonical('LRDIMM'), canonical('1RD1MM'));
});
test('canonical laesst D unangetastet, damit 4DRx4 erhalten bleibt', () => {
assert.notEqual(canonical('4DRX4'), canonical('40RX4'));
});
test('matchKnown findet den exakten Wert', () => {
assert.equal(matchKnown('PC4-2400', KNOWN.speed), 'PC4-2400');
assert.equal(matchKnown('lrdimm', KNOWN.formFactor), 'LRDIMM');
});
test('matchKnown repariert eine Verwechslung', () => {
assert.equal(matchKnown('PC4-24O0', KNOWN.speed), 'PC4-2400');
assert.equal(matchKnown('4DRX4', KNOWN.rank), '4DRx4');
});
test('matchKnown liefert null bei unbekanntem Wert', () => {
assert.equal(matchKnown('PC4-9999', KNOWN.speed), null);
assert.equal(matchKnown('', KNOWN.speed), null);
});
test('matchKnown funktioniert auch mit Zahlenlisten', () => {
assert.equal(matchKnown('64', KNOWN.capacityGb), 64);
assert.equal(matchKnown('6A', KNOWN.capacityGb), null);
});
test('specsCompatible vergleicht nur beidseitig gesetzte Felder', () => {
const voll = { capacityGb: 64, formFactor: 'LRDIMM', rank: '4DRx4', speed: 'PC4-2400', partNumber: 'M386A8K40BM1-CRC4Y', dateCode: '1908' };
const ohnePn = { ...voll, partNumber: null, dateCode: null };
assert.equal(specsCompatible(voll, ohnePn), true);
});
test('specsCompatible erkennt einen echten Unterschied', () => {
const a = { ...emptySpec(), capacityGb: 64, speed: 'PC4-2400' };
const b = { ...emptySpec(), capacityGb: 32, speed: 'PC4-2400' };
assert.equal(specsCompatible(a, b), false);
});
test('specsCompatible trennt gleiche Spec mit unterschiedlicher Teilenummer', () => {
const samsung = { ...emptySpec(), capacityGb: 64, speed: 'PC4-2400', partNumber: 'M386A8K40BM1-CRC4Y' };
const hynix = { ...emptySpec(), capacityGb: 64, speed: 'PC4-2400', partNumber: 'HMAA8GL7AMR4N-UH' };
assert.equal(specsCompatible(samsung, hynix), false);
});
test('specsCompatible toleriert eine Verwechslung in der Teilenummer', () => {
const a = { ...emptySpec(), capacityGb: 64, partNumber: 'M386A8K40BM1-CRC4Y' };
const b = { ...emptySpec(), capacityGb: 64, partNumber: 'M386A8K4OBM1-CRC4Y' };
assert.equal(specsCompatible(a, b), true);
});