91 lines
3.5 KiB
JavaScript
91 lines
3.5 KiB
JavaScript
|
|
'use strict';
|
||
|
|
|
||
|
|
const test = require('node:test');
|
||
|
|
const assert = require('node:assert/strict');
|
||
|
|
|
||
|
|
const convert = require('../../src/convert/index.js');
|
||
|
|
|
||
|
|
test('convert.possibilities — exported as a top-level function', () => {
|
||
|
|
assert.equal(typeof convert.possibilities, 'function');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert.possibilities(volumeFlowRate) returns common flow units', () => {
|
||
|
|
const units = convert.possibilities('volumeFlowRate');
|
||
|
|
assert.ok(Array.isArray(units));
|
||
|
|
assert.ok(units.length > 0);
|
||
|
|
for (const u of ['m3/s', 'm3/h', 'l/s', 'l/min', 'l/h']) {
|
||
|
|
assert.ok(units.includes(u), `expected '${u}' in volumeFlowRate possibilities`);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert.possibilities(pressure) returns common pressure units', () => {
|
||
|
|
const units = convert.possibilities('pressure');
|
||
|
|
for (const u of ['Pa', 'kPa', 'bar', 'mbar', 'psi']) {
|
||
|
|
assert.ok(units.includes(u), `expected '${u}' in pressure possibilities`);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert.possibilities(power) returns common power units', () => {
|
||
|
|
const units = convert.possibilities('power');
|
||
|
|
for (const u of ['W', 'kW', 'MW']) {
|
||
|
|
assert.ok(units.includes(u), `expected '${u}' in power possibilities`);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert.possibilities(temperature) returns K, C, F', () => {
|
||
|
|
const units = convert.possibilities('temperature');
|
||
|
|
for (const u of ['K', 'C', 'F']) {
|
||
|
|
assert.ok(units.includes(u), `expected '${u}' in temperature possibilities`);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert.possibilities for length / mass / volume return non-empty', () => {
|
||
|
|
assert.ok(convert.possibilities('length').includes('m'));
|
||
|
|
assert.ok(convert.possibilities('mass').includes('kg'));
|
||
|
|
assert.ok(convert.possibilities('volume').includes('l'));
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert.possibilities(unknown) returns []', () => {
|
||
|
|
assert.deepEqual(convert.possibilities('foo'), []);
|
||
|
|
assert.deepEqual(convert.possibilities('bogus-measure'), []);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert.possibilities handles invalid input safely', () => {
|
||
|
|
assert.deepEqual(convert.possibilities(), []);
|
||
|
|
assert.deepEqual(convert.possibilities(null), []);
|
||
|
|
assert.deepEqual(convert.possibilities(''), []);
|
||
|
|
assert.deepEqual(convert.possibilities(42), []);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert.possibilities is sorted and deduplicated', () => {
|
||
|
|
const units = convert.possibilities('pressure');
|
||
|
|
const sorted = [...units].sort();
|
||
|
|
assert.deepEqual(units, sorted, 'result should be alphabetically sorted');
|
||
|
|
const set = new Set(units);
|
||
|
|
assert.equal(set.size, units.length, 'result should have no duplicates');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert.possibilities returns stable / cached results across calls', () => {
|
||
|
|
const a = convert.possibilities('volumeFlowRate');
|
||
|
|
const b = convert.possibilities('volumeFlowRate');
|
||
|
|
assert.deepEqual(a, b, 'two calls must return equal arrays');
|
||
|
|
// Mutating the returned array must not poison the cache.
|
||
|
|
a.push('SHOULD_NOT_PERSIST');
|
||
|
|
const c = convert.possibilities('volumeFlowRate');
|
||
|
|
assert.ok(!c.includes('SHOULD_NOT_PERSIST'), 'cached array must be defensively copied');
|
||
|
|
assert.deepEqual(c, b);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert.measures lists known measure names', () => {
|
||
|
|
const m = convert.measures();
|
||
|
|
assert.ok(Array.isArray(m));
|
||
|
|
for (const name of ['length', 'mass', 'volume', 'pressure', 'power', 'temperature', 'volumeFlowRate']) {
|
||
|
|
assert.ok(m.includes(name), `expected measure '${name}'`);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
test('convert factory still works (regression — no breakage of existing API)', () => {
|
||
|
|
const result = convert(1).from('m').to('cm');
|
||
|
|
assert.equal(result, 100);
|
||
|
|
});
|