UNPKG

@mathigon/fermat

Version:

Powerful mathematics and statistics library for JavaScript.

110 lines (90 loc) 5.07 kB
// ============================================================================= // Fermat.js | Arithmetic Tests // (c) Mathigon // ============================================================================= import tape from 'tape'; import {numberFormat, parseNumber, scientificFormat, toWord} from '../src'; tape('numberFormat', (test) => { test.equal(numberFormat(1234, 5), '1,234', ':: numberFormat(1234, 5)'); test.equal(numberFormat(1234, 4), '1,234', ':: numberFormat(1234, 4)'); test.equal(numberFormat(1234, 3), '1.2k', ':: numberFormat(1234, 3)'); test.equal(numberFormat(1000, 3), '1k', ':: numberFormat(1000, 3)'); test.equal(numberFormat(-1234, 6), '–1,234', ':: numberFormat(-1234, 6)'); test.equal(numberFormat(-1234, 5), '–1,234', ':: numberFormat(-1234, 5)'); test.equal(numberFormat(-1234, 4), '–1.2k', ':: numberFormat(-1234, 4)'); test.equal(numberFormat(-1000, 4), '–1k', ':: numberFormat(-1000, 4)'); test.equal(numberFormat(10001, 5), '10,001', ':: numberFormat(10001, 5)'); test.equal(numberFormat(10001, 4), '10k', ':: numberFormat(10001, 4)'); test.equal(numberFormat(-10001, 6), '–10,001', ':: numberFormat(-10001, 6)'); test.equal(numberFormat(-10001, 5), '–10k', ':: numberFormat(-10001, 5)'); test.equal(numberFormat(100001, 6), '100,001', ':: numberFormat(100001, 6)'); test.equal(numberFormat(100001, 5), '100k', ':: numberFormat(100001, 5)'); test.equal(numberFormat(-100001, 7), '–100,001', ':: numberFormat(-100001, 7)'); test.equal(numberFormat(-100001, 6), '–100k', ':: numberFormat(-100001, 6)'); test.equal(numberFormat(1000001, 7), '1,000,001', ':: numberFormat(1000001, 7)'); test.equal(numberFormat(1000001, 6), '1m', ':: numberFormat(1000001, 6)'); test.equal(numberFormat(-1000001, 8), '–1,000,001', ':: numberFormat(-1000001, 8)'); test.equal(numberFormat(-1000001, 7), '–1m', ':: numberFormat(-1000001, 7)'); test.equal(numberFormat(0.1, 2), '0.1', ':: numberFormat(0.1, 2)'); test.equal(numberFormat(0.1, 1), '0', ':: numberFormat(0.1, 1)'); test.equal(numberFormat(-0.1, 3), '–0.1', ':: numberFormat(-0.1, 3)'); test.equal(numberFormat(-0.1, 2), '0', ':: numberFormat(-0.1, 2)'); test.equal(numberFormat(0.01, 3), '0.01', ':: numberFormat(0.01, 3)'); test.equal(numberFormat(0.01, 2), '0', ':: numberFormat(0.01, 2)'); test.equal(numberFormat(-0.01, 4), '–0.01', ':: numberFormat(-0.01, 4)'); test.equal(numberFormat(-0.01, 3), '0', ':: numberFormat(-0.01, 3)'); test.equal(numberFormat(0.001, 4), '0.001', ':: numberFormat(0.001, 4)'); test.equal(numberFormat(0.001, 3), '0', ':: numberFormat(0.001, 3)'); test.equal(numberFormat(-0.001, 5), '–0.001', ':: numberFormat(-0.001, 5)'); test.equal(numberFormat(-0.001, 4), '0', ':: numberFormat(-0.001, 4)'); test.equal(scientificFormat(123123123, 6), '1.231 × 10^8'); test.equal(scientificFormat(123123, 6), '123,123'); test.equal(scientificFormat(-123123123, 6), '-1.23 × 10^8'); test.equal(scientificFormat(0.000123, 6), '0.00012'); test.equal(scientificFormat(0.000000123, 6), '1.23 × 10^(–7)'); test.equal(scientificFormat(-0.000000123, 6), '-1.23 × 10^(–7)'); test.equal(scientificFormat(-Number.MAX_VALUE * 10, 6), '–∞'); test.equal(scientificFormat(-Number.MIN_VALUE / 10, 6), '0'); test.end(); }); tape('parseNumber', (test) => { test.equal(parseNumber('1234'), 1234); test.equal(parseNumber('1.234,56'), 1234.56); test.equal(parseNumber('1,234.56'), 1234.56); test.equal(parseNumber('1,234,567'), 1234567); test.equal(parseNumber('1.234.567'), 1234567); test.equal(parseNumber('1,234.567'), 1234.567); test.equal(parseNumber('1.234,567'), 1234.567); test.equal(parseNumber('1.234'), 1.234); // ambiguous! test.equal(parseNumber('1,234'), 1234); // ambiguous! test.equal(parseNumber('0,123'), 0.123); // ambiguous! test.equal(parseNumber('1,23'), 1.23); test.equal(parseNumber('1.2345'), 1.2345); test.equal(parseNumber('.123'), 0.123); test.equal(parseNumber('-123'), -123); test.equal(parseNumber('–123'), -123); test.equal(parseNumber('-123,456'), -123456); // ambiguous! test.equal(parseNumber('-123.456'), -123.456); // ambiguous! test.ok(isNaN(parseNumber('1,2345,678'))); test.ok(isNaN(parseNumber('1.2345.678'))); test.ok(isNaN(parseNumber('1,2345.678'))); test.ok(isNaN(parseNumber('1.2345,678'))); test.ok(isNaN(parseNumber('1.234,56A'))); test.ok(isNaN(parseNumber('123A456'))); test.end(); }); tape('parseNumber', (test) => { test.equal(toWord(0), 'zero'); test.equal(toWord(1), 'one'); test.equal(toWord(2), 'two'); test.equal(toWord(10), 'ten'); test.equal(toWord(11), 'eleven'); test.equal(toWord(20), 'twenty'); test.equal(toWord(45), 'forty-five'); test.equal(toWord(99), 'ninety-nine'); test.equal(toWord(105), 'one hundred five'); test.equal(toWord(35783), 'thirty-five thousand seven hundred eighty-three'); test.equal(toWord(1000000), 'one million'); test.equal(toWord(10000011), 'ten million eleven'); test.end(); });