mirror of
https://github.com/josdejong/mathjs.git
synced 2025-12-08 19:46:04 +00:00
131 lines
7.9 KiB
JavaScript
131 lines
7.9 KiB
JavaScript
// test number utils
|
|
var assert = require('assert');
|
|
var NumberFormatter = require('../../lib/util/NumberFormatter');
|
|
|
|
describe('NumberFormatter', function() {
|
|
|
|
it('should create a new NumberFormatter', function () {
|
|
assert.deepEqual(new NumberFormatter(0), {sign: '', coefficients: [0], exponent: 0});
|
|
assert.deepEqual(new NumberFormatter(2.3), {sign: '', coefficients: [2, 3], exponent: 0});
|
|
|
|
var a = new NumberFormatter(2.3);
|
|
assert.strictEqual(a.coefficients[0], 2);
|
|
assert.strictEqual(a.coefficients[1], 3);
|
|
assert.strictEqual(a.exponent, 0);
|
|
|
|
assert.deepEqual(new NumberFormatter(-2.3), {sign: '-', coefficients: [2, 3], exponent: 0});
|
|
assert.deepEqual(new NumberFormatter('02.3'), {sign: '', coefficients: [2, 3], exponent: 0});
|
|
assert.deepEqual(new NumberFormatter(2300), {sign: '', coefficients: [2, 3], exponent: 3});
|
|
assert.deepEqual(new NumberFormatter(0.00023), {sign: '', coefficients: [2, 3], exponent: -4});
|
|
assert.deepEqual(new NumberFormatter('0.00023'),{sign: '', coefficients: [2, 3], exponent: -4});
|
|
assert.deepEqual(new NumberFormatter('000.0002300'), {sign: '', coefficients: [2, 3], exponent: -4});
|
|
assert.deepEqual(new NumberFormatter('002300'), {sign: '', coefficients: [2, 3], exponent: 3});
|
|
assert.deepEqual(new NumberFormatter('2.3e3'), {sign: '', coefficients: [2, 3], exponent: 3});
|
|
assert.deepEqual(new NumberFormatter('2.3e+3'), {sign: '', coefficients: [2, 3], exponent: 3});
|
|
assert.deepEqual(new NumberFormatter('-2.3e3'), {sign: '-', coefficients: [2, 3], exponent: 3});
|
|
assert.deepEqual(new NumberFormatter('23e3'), {sign: '', coefficients: [2, 3], exponent: 4});
|
|
assert.deepEqual(new NumberFormatter('-23e3'), {sign: '-', coefficients: [2, 3], exponent: 4});
|
|
assert.deepEqual(new NumberFormatter('2.3e-3'), {sign: '', coefficients: [2, 3], exponent: -3});
|
|
assert.deepEqual(new NumberFormatter('23e-3'), {sign: '', coefficients: [2, 3], exponent: -2});
|
|
assert.deepEqual(new NumberFormatter('-23e-3'), {sign: '-', coefficients: [2, 3], exponent: -2});
|
|
assert.deepEqual(new NumberFormatter('99.99'), {sign: '', coefficients: [9,9,9,9], exponent: 1});
|
|
});
|
|
|
|
it('should clone a NumberFormatter', function () {
|
|
var a = new NumberFormatter(2.3);
|
|
var clone = a.clone();
|
|
assert.deepEqual(clone, a);
|
|
assert.notStrictEqual(clone, a);
|
|
});
|
|
|
|
it('should round a NumberFormatter', function () {
|
|
assert.deepEqual(new NumberFormatter(123456).roundDigits(3), new NumberFormatter(123000));
|
|
assert.deepEqual(new NumberFormatter(123456).roundDigits(4), new NumberFormatter(123500));
|
|
assert.deepEqual(new NumberFormatter(0.00555).roundDigits(2), new NumberFormatter(0.0056));
|
|
assert.deepEqual(new NumberFormatter(99.99).roundDigits(2), new NumberFormatter(100));
|
|
});
|
|
|
|
it('should format a number with toFixed', function () {
|
|
assert.strictEqual(new NumberFormatter(0).toFixed(), '0');
|
|
assert.strictEqual(new NumberFormatter(2300).toFixed(), '2300');
|
|
assert.strictEqual(new NumberFormatter(-2300).toFixed(), '-2300');
|
|
assert.strictEqual(new NumberFormatter(19.9).toFixed(), '20');
|
|
assert.strictEqual(new NumberFormatter(99.9).toFixed(), '100');
|
|
assert.strictEqual(new NumberFormatter(99.5).toFixed(), '100');
|
|
assert.strictEqual(new NumberFormatter(99.4).toFixed(), '99');
|
|
assert.strictEqual(new NumberFormatter(2.3).toFixed(), '2');
|
|
assert.strictEqual(new NumberFormatter(2.5).toFixed(), '3');
|
|
assert.strictEqual(new NumberFormatter(2.9).toFixed(), '3');
|
|
assert.strictEqual(new NumberFormatter(1.5).toFixed(), '2');
|
|
assert.strictEqual(new NumberFormatter(-1.5).toFixed(), '-2');
|
|
assert.strictEqual(new NumberFormatter(123.45).toFixed(), '123');
|
|
assert.strictEqual(new NumberFormatter(0.005).toFixed(), '0');
|
|
assert.strictEqual(new NumberFormatter(0.7).toFixed(), '1');
|
|
|
|
assert.strictEqual(new NumberFormatter(0.15).toFixed(1), '0.2');
|
|
assert.strictEqual(new NumberFormatter(123.4567).toFixed(1), '123.5');
|
|
assert.strictEqual(new NumberFormatter(-123.4567).toFixed(1), '-123.5');
|
|
assert.strictEqual(new NumberFormatter(0.23).toFixed(1), '0.2');
|
|
assert.strictEqual(new NumberFormatter(0.005).toFixed(5), '0.00500');
|
|
assert.strictEqual(new NumberFormatter(0.00567).toFixed(4), '0.0057');
|
|
assert.strictEqual(new NumberFormatter(0.00999).toFixed(2), '0.01');
|
|
assert.strictEqual(new NumberFormatter(0.00999).toFixed(3), '0.010');
|
|
assert.strictEqual(new NumberFormatter(-0.00999).toFixed(3), '-0.010');
|
|
});
|
|
|
|
it('should format a number with toExponential', function () {
|
|
assert.strictEqual(new NumberFormatter(0).toExponential(), '0e+0');
|
|
assert.strictEqual(new NumberFormatter(0.15).toExponential(), '1.5e-1');
|
|
assert.strictEqual(new NumberFormatter(1).toExponential(), '1e+0');
|
|
assert.strictEqual(new NumberFormatter(-1).toExponential(), '-1e+0');
|
|
assert.strictEqual(new NumberFormatter(1000).toExponential(), '1e+3');
|
|
assert.strictEqual(new NumberFormatter(2300).toExponential(), '2.3e+3');
|
|
assert.strictEqual(new NumberFormatter(-2300).toExponential(), '-2.3e+3');
|
|
assert.strictEqual(new NumberFormatter(3.568).toExponential(), '3.568e+0');
|
|
assert.strictEqual(new NumberFormatter(0.00123).toExponential(), '1.23e-3');
|
|
assert.strictEqual(new NumberFormatter(-0.00123).toExponential(), '-1.23e-3');
|
|
assert.strictEqual(new NumberFormatter('20.3e2').toExponential(), '2.03e+3');
|
|
|
|
assert.strictEqual(new NumberFormatter(0).toExponential(2), '0.0e+0');
|
|
assert.strictEqual(new NumberFormatter(0.15).toExponential(1), '2e-1');
|
|
assert.strictEqual(new NumberFormatter(1234).toExponential(2), '1.2e+3');
|
|
assert.strictEqual(new NumberFormatter(-1234).toExponential(2), '-1.2e+3');
|
|
assert.strictEqual(new NumberFormatter(1234).toExponential(6), '1.23400e+3');
|
|
assert.strictEqual(new NumberFormatter(9999).toExponential(2), '1.0e+4');
|
|
});
|
|
|
|
it('should format a number with toPrecision', function () {
|
|
assert.strictEqual(new NumberFormatter(0).toPrecision(), '0');
|
|
assert.strictEqual(new NumberFormatter(0.15).toPrecision(), '0.15');
|
|
assert.strictEqual(new NumberFormatter(2300).toPrecision(), '2300');
|
|
assert.strictEqual(new NumberFormatter(-2300).toPrecision(), '-2300');
|
|
assert.strictEqual(new NumberFormatter(0.00123).toPrecision(), '0.00123');
|
|
assert.strictEqual(new NumberFormatter(-0.00123).toPrecision(), '-0.00123');
|
|
assert.strictEqual(new NumberFormatter(1.2e-8).toPrecision(), '1.2e-8');
|
|
|
|
assert.strictEqual(new NumberFormatter(2300).toPrecision(6), '2300.00');
|
|
assert.strictEqual(new NumberFormatter(1234.5678).toPrecision(6), '1234.57');
|
|
assert.strictEqual(new NumberFormatter(1234.5678).toPrecision(2), '1200');
|
|
assert.strictEqual(new NumberFormatter(1234).toPrecision(2), '1200');
|
|
assert.strictEqual(new NumberFormatter(0.15).toPrecision(1), '0.2');
|
|
assert.strictEqual(new NumberFormatter(0.004).toPrecision(3), '0.00400');
|
|
assert.strictEqual(new NumberFormatter(0.00123456).toPrecision(5), '0.0012346');
|
|
assert.strictEqual(new NumberFormatter(999).toPrecision(2), '1000');
|
|
assert.strictEqual(new NumberFormatter(99900).toPrecision(2), '100000');
|
|
assert.strictEqual(new NumberFormatter(99999).toPrecision(2), '100000');
|
|
assert.strictEqual(new NumberFormatter(999e7).toPrecision(2), '1.0e+10');
|
|
assert.strictEqual(new NumberFormatter(0.00999).toPrecision(2), '0.010');
|
|
assert.strictEqual(new NumberFormatter(-0.00999).toPrecision(2), '-0.010');
|
|
});
|
|
|
|
it('should should throw an error on invalid input', function () {
|
|
assert.throws(function () {new NumberFormatter('2.3.4')}, /SyntaxError/);
|
|
assert.throws(function () {new NumberFormatter('2.3ee')}, /SyntaxError/);
|
|
assert.throws(function () {new NumberFormatter('2.3e4.3')}, /SyntaxError/);
|
|
assert.throws(function () {new NumberFormatter('2.3a')}, /SyntaxError/);
|
|
assert.throws(function () {new NumberFormatter('foo')}, /SyntaxError/);
|
|
assert.throws(function () {new NumberFormatter(new Date())}, /SyntaxError/);
|
|
});
|
|
|
|
});
|