Files
TREK/server/tests/unit/nest/compare.test.ts
T
2026-10-06 21:50:59 +02:00

47 lines
1.7 KiB
TypeScript

/**
* byCodeUnit restates what a bare `.sort()` already did, so the contract is
* "identical to the default order" — and that is what these check, against the
* default rather than against hand-written expectations.
*/
import { byCodeUnit } from '../../../src/nest/common/compare';
import { describe, it, expect } from 'vitest';
describe('byCodeUnit', () => {
it('CMP-001: reports less, greater and equal', () => {
expect(byCodeUnit('a', 'b')).toBe(-1);
expect(byCodeUnit('b', 'a')).toBe(1);
expect(byCodeUnit('a', 'a')).toBe(0);
});
it('CMP-002: orders ISO dates chronologically, which is why the callers can use it', () => {
expect(['2026-03-01', '2026-01-15', '2026-02-28'].sort(byCodeUnit)).toEqual([
'2026-01-15',
'2026-02-28',
'2026-03-01',
]);
});
it('CMP-003: reproduces the default sort exactly for the ASCII the callers pass', () => {
const samples = [
['EUR', 'usd', 'CHF', 'JPY'],
['b', 'A', 'a', 'B', ''],
['plugin:one', 'plugin:One', 'plugin:1', 'plugin:'],
['2026-01-01', '2026-1-1', '2026-01-1'],
['x'],
[],
];
for (const sample of samples) {
expect([...sample].sort(byCodeUnit)).toEqual([...sample].sort());
}
});
it('CMP-004: is NOT locale-aware — the reason the doc comment warns callers off names', () => {
// Code-unit order files every accented word behind the whole ASCII range.
// A list a person reads wants localeCompare instead; this asserts the
// difference so nobody reaches for byCodeUnit there by accident.
expect(['Zelt', 'Übernachtung'].sort(byCodeUnit)).toEqual(['Zelt', 'Übernachtung']);
expect(['Zelt', 'Übernachtung'].sort((a, b) => a.localeCompare(b, 'de'))).toEqual(['Übernachtung', 'Zelt']);
});
});