forked from josdejong/mathjs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdefaultInstance.test.js
More file actions
150 lines (124 loc) · 4.68 KB
/
defaultInstance.test.js
File metadata and controls
150 lines (124 loc) · 4.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
const assert = require('assert')
const cp = require('child_process')
const path = require('path')
const math = require('../../lib/cjs/defaultInstance.js').default
const version = require('../../package.json').version
describe('defaultInstance', function () {
it('should get a default instance of mathjs', function () {
assert.strictEqual(typeof math, 'object')
assert.deepStrictEqual(math.config(), {
matrix: 'Matrix',
number: 'number',
precision: 64,
predictable: false,
epsilon: 1e-12,
randomSeed: null
})
})
it('should create an instance of math.js with custom configuration', function () {
const math1 = math.create({
matrix: 'Array',
number: 'BigNumber'
})
assert.strictEqual(typeof math1, 'object')
assert.deepStrictEqual(math1.config(), {
matrix: 'Array',
number: 'BigNumber',
precision: 64,
predictable: false,
epsilon: 1e-12,
randomSeed: null
})
})
it('two instances of math.js should be isolated from each other', function () {
const math1 = math.create()
const math2 = math.create({
matrix: 'Array'
})
assert.notStrictEqual(math, math1)
assert.notStrictEqual(math, math2)
assert.notStrictEqual(math1, math2)
assert.notDeepStrictEqual(math1.config(), math2.config())
assert.notDeepStrictEqual(math.config(), math2.config())
// changing config should not affect the other
math1.config({ number: 'BigNumber' })
assert.strictEqual(math.config().number, 'number')
assert.strictEqual(math1.config().number, 'BigNumber')
assert.strictEqual(math2.config().number, 'number')
})
it('should apply configuration using the config function', function () {
const math1 = math.create()
assert.deepStrictEqual(math1.sqrt(-4), math1.complex(0, 2))
assert.strictEqual(math1.typeOf(math1.pi), 'number')
assert.strictEqual(math1.typeOf(math1.Unit.UNITS.rad.value), 'number') // TODO: find a better way to unit test this
assert.strictEqual(math1.bignumber(1).div(3).toString(), '0.3333333333333333333333333333333333333333333333333333333333333333')
const config = math1.config({
number: 'BigNumber',
precision: 4,
predictable: true
})
assert.deepStrictEqual(config, {
matrix: 'Matrix',
number: 'BigNumber',
precision: 4,
predictable: true,
epsilon: 1e-12,
randomSeed: null
})
assert.ok(math1.isNaN(math1.sqrt(-4)))
assert.strictEqual(math1.typeOf(math1.pi), 'BigNumber')
assert.strictEqual(math1.typeOf(math1.Unit.UNITS.rad.value), 'BigNumber') // TODO: find a better way to unit test this
assert.strictEqual(math1.bignumber(1).div(3).toString(), '0.3333')
const config2 = math1.config({
number: 'number',
precision: 64,
predictable: false
})
assert.deepStrictEqual(config2, {
matrix: 'Matrix',
number: 'number',
precision: 64,
predictable: false,
epsilon: 1e-12,
randomSeed: null
})
assert.deepStrictEqual(math1.sqrt(-4), math1.complex(0, 2))
assert.strictEqual(math1.typeOf(math1.pi), 'number')
assert.strictEqual(math1.typeOf(math1.Unit.UNITS.rad.value), 'number') // TODO: find a better way to unit test this
assert.strictEqual(math1.bignumber(1).div(3).toString(), '0.3333333333333333333333333333333333333333333333333333333333333333')
})
it('should not override a custom imported function when config changes', function () {
const math1 = math.create()
math1.import({
sqrt: function customSqrt (x) {
return 'foo(' + x + ')'
}
}, { override: true })
assert.strictEqual(math1.sqrt(4), 'foo(4)')
// changing config should not change the custom function sqrt
math1.config({ number: 'BigNumber' })
assert.strictEqual(math1.sqrt(4), 'foo(4)')
})
// TODO: test whether the namespace is correct: has functions like sin, constants like pi, objects like type and error.
it('should throw an error when ES5 is not supported', function () {
const create = Object.create
Object.create = undefined // fake missing Object.create function
assert.throws(function () {
math.create()
}, /ES5 not supported/)
// restore Object.create
Object.create = create
})
it('should have the correct version number', function () {
const math = require('../..')
assert.strictEqual(math.version, version)
})
it('should be robust against pollution of the Object prototype', function (done) {
const filename = path.join(__dirname, 'pollutedObjectPrototype.js')
cp.exec('node ' + filename, function (error, result) {
assert.strictEqual(error, null)
assert.strictEqual(result, '2i\n')
done()
})
})
})