mirror of
https://github.com/josdejong/mathjs.git
synced 2026-01-18 14:59:29 +00:00
83 lines
2.9 KiB
JavaScript
83 lines
2.9 KiB
JavaScript
import assert from 'assert'
|
|
import math from '../../src/main'
|
|
import approx from '../../tools/approx'
|
|
const number = math.number
|
|
|
|
describe('number', function () {
|
|
it('should be 0 if called with no argument', function () {
|
|
approx.equal(number(), 0)
|
|
})
|
|
|
|
it('should convert a boolean to a number', function () {
|
|
approx.equal(number(true), 1)
|
|
approx.equal(number(false), 0)
|
|
})
|
|
|
|
it('should convert null to a number', function () {
|
|
approx.equal(number(null), 0)
|
|
})
|
|
|
|
it('should convert a bignumber to a number', function () {
|
|
approx.equal(number(math.bignumber(0.1)), 0.1)
|
|
approx.equal(number(math.bignumber('1.3e500')), Infinity)
|
|
})
|
|
|
|
it('should convert a fraction to a number', function () {
|
|
approx.equal(number(math.fraction(2, 5)), 0.4)
|
|
})
|
|
|
|
it('should accept a number as argument', function () {
|
|
approx.equal(number(3), 3)
|
|
approx.equal(number(-3), -3)
|
|
})
|
|
|
|
it('should convert a unit to a number', function () {
|
|
approx.equal(number(math.unit('52cm'), 'm'), 0.52)
|
|
})
|
|
|
|
it('should parse the string if called with a valid string', function () {
|
|
approx.equal(number('2.1e3'), 2100)
|
|
approx.equal(number(' 2.1e-3 '), 0.0021)
|
|
approx.equal(number(''), 0)
|
|
approx.equal(number(' '), 0)
|
|
})
|
|
|
|
it('should throw an error if called with an invalid string', function () {
|
|
assert.throws(function () { number('2.3.4') }, SyntaxError)
|
|
assert.throws(function () { number('23a') }, SyntaxError)
|
|
})
|
|
|
|
it('should convert the elements of a matrix to numbers', function () {
|
|
assert.deepStrictEqual(number(math.matrix(['123', true])), math.matrix([123, 1]))
|
|
})
|
|
|
|
it('should convert the elements of an array to numbers', function () {
|
|
assert.deepStrictEqual(number(['123', true]), [123, 1])
|
|
})
|
|
|
|
it('should throw an error if called with a wrong number of arguments', function () {
|
|
assert.throws(function () { number(1, 2, 3) }, /TypeError: Too many arguments/)
|
|
})
|
|
|
|
it('should throw an error if called with a complex number', function () {
|
|
assert.throws(function () { number(math.complex(2, 3)) }, TypeError)
|
|
})
|
|
|
|
it('should throw an error with wrong type of arguments', function () {
|
|
assert.throws(function () { number(math.unit('5cm')) }, /Second argument with valueless unit expected/)
|
|
// assert.throws(function () {number(math.unit('5cm'), 2)}, TypeError); // FIXME: this should also throw an error
|
|
assert.throws(function () { number(math.unit('5cm'), new Date()) }, TypeError)
|
|
assert.throws(function () { number('23', 2) }, TypeError)
|
|
})
|
|
|
|
it('should LaTeX number', function () {
|
|
const expr1 = math.parse('number()')
|
|
const expr2 = math.parse('number(1)')
|
|
const expr3 = math.parse('number(1,cm)')
|
|
|
|
assert.strictEqual(expr1.toTex(), '0')
|
|
assert.strictEqual(expr2.toTex(), '\\left(1\\right)')
|
|
assert.strictEqual(expr3.toTex(), '\\left(\\left(1\\right)\\mathrm{cm}\\right)')
|
|
})
|
|
})
|