1const assert = require('assert');
2const { convert, formatNumber } = require('./convert.js');
3
4function near(actual, expected, eps = 1e-9) {
5 assert.ok(Math.abs(actual - expected) <= eps, `${actual} not near ${expected}`);
6}
7
8near(convert(1, 'km', 'm', 'length'), 1000);
9near(convert(12, 'in', 'ft', 'length'), 1);
10near(convert(1, 'mi', 'km', 'length'), 1.609344);
11near(convert(1, 'kg', 'g', 'mass'), 1000);
12near(convert(16, 'oz', 'lb', 'mass'), 1);
13near(convert(1, 'GB', 'MB', 'data'), 1000);
14near(convert(1, 'GiB', 'MiB', 'data'), 1024);
15near(convert(2, 'h', 'min', 'time'), 120);
16near(convert(1, 'week', 'day', 'time'), 7);
17
18
19near(convert(0, 'C', 'F', 'temperature'), 32);
20near(convert(100, 'C', 'F', 'temperature'), 212);
21near(convert(-40, 'C', 'F', 'temperature'), -40);
22near(convert(32, 'F', 'C', 'temperature'), 0);
23near(convert(212, 'F', 'C', 'temperature'), 100);
24near(convert(0, 'K', 'C', 'temperature'), -273.15);
25near(convert(-273.15, 'C', 'K', 'temperature'), 0);
26near(convert(0, 'R', 'K', 'temperature'), 0);
27near(convert(491.67, 'R', 'C', 'temperature'), 0, 1e-6);
28near(convert(300, 'K', 'F', 'temperature'), 80.33, 1e-9);
29
30assert.strictEqual(formatNumber(1/3, 2), '0.33');
31assert.strictEqual(formatNumber(2, 4), '2');
32assert.ok(Number.isNaN(convert('x', 'm', 'km', 'length')));
33assert.throws(() => convert(1, 'm', 'kg', 'length'), /Unknown unit/);
34
35console.log('All conversion tests passed');
36
Discussion
No comments yet. Start the discussion. Recorded by @patrick-toulme.