Jos de Jong 6f00715754
Specify import require paths (continuation of #1941) (#1962)
* Add `.js` extension to source file imports

* Specify package `exports` in `package.json`

Specify package type as `commonjs` (It's good to be specific)

* Move all compiled scripts into `lib` directory

Remove ./number.js (You can use the compiled ones in `./lib/*`)

Tell node that the `esm` directory is type `module` and enable tree shaking.

Remove unused files from packages `files` property

* Allow importing of package.json

* Make library ESM first

* - Fix merge conflicts
- Refactor `bundleAny` into `defaultInstance.js` and `browserBundle.cjs`
- Refactor unit tests to be able to run with plain nodejs (no transpiling)
- Fix browser examples

* Fix browser and browserstack tests

* Fix running unit tests on Node 10 (which has no support for modules)

* Fix node.js examples (those are still commonjs)

* Remove the need for `browserBundle.cjs`

* Generate minified bundle only

* [Security] Bump node-fetch from 2.6.0 to 2.6.1 (#1963)

Bumps [node-fetch](https://github.com/bitinn/node-fetch) from 2.6.0 to 2.6.1. **This update includes a security fix.**
- [Release notes](https://github.com/bitinn/node-fetch/releases)
- [Changelog](https://github.com/node-fetch/node-fetch/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/bitinn/node-fetch/compare/v2.6.0...v2.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

* Cleanup console.log

* Add integration tests to test the entry points (commonjs/esm, full/number only)

* Create backward compatibility error messages in the files moved/removed since v8

* Describe breaking changes in HISTORY.md

* Bump karma from 5.2.1 to 5.2.2 (#1965)

Bumps [karma](https://github.com/karma-runner/karma) from 5.2.1 to 5.2.2.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v5.2.1...v5.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>

Co-authored-by: Lee Langley-Rees <lee@greenimp.co.uk>
Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-09-20 18:01:29 +02:00

255 lines
7.4 KiB
JavaScript

import assert from 'assert'
import math from '../../../../src/defaultInstance.js'
const erf = math.erf
const DIFF_THRESH = 5e-16
describe('erf', function () {
it('should calculate erf(x), |x| < 0.46875', function () {
let i, diff, actual, expected
for (i = -4; i <= 4; i += 1) {
actual = erf(i / 10)
expected = actualErfValues[(i / 10).toFixed(1)]
diff = Math.abs(actual - expected)
assert.ok(diff < DIFF_THRESH, [i, actual, expected, diff])
}
})
it('should calculate erf(x), 0.46875 <= |x| <= 4', function () {
let i, diff, actual, expected
for (i = -40; i < -4; i += 1) {
actual = erf(i / 10)
expected = actualErfValues[(i / 10).toFixed(1)]
diff = Math.abs(actual - expected)
assert.ok(diff < DIFF_THRESH, [i, actual, expected, diff])
}
for (i = 5; i <= 40; i += 1) {
actual = erf(i / 10)
expected = actualErfValues[(i / 10).toFixed(1)]
diff = Math.abs(actual - expected)
assert.ok(diff < DIFF_THRESH, [i, actual, expected, diff])
}
})
it('should calculate erf(x), |x| > 4', function () {
let i, diff, actual, expected
for (i = -70; i < -40; i += 1) {
actual = erf(i / 10)
expected = actualErfValues[(i / 10).toFixed(1)]
diff = Math.abs(actual - expected)
assert.ok(diff < DIFF_THRESH, [i, actual, expected, diff])
}
for (i = 41; i < 70; i += 1) {
actual = erf(i / 10)
expected = actualErfValues[(i / 10).toFixed(1)]
diff = Math.abs(actual - expected)
assert.ok(diff < DIFF_THRESH, [i, actual, expected, diff])
}
})
it('should calculate the erf of a nonpositive integer', function () {
assert.ok(Math.abs(erf(-1) - actualErfValues['-1.0']) < DIFF_THRESH)
assert.ok(Math.abs(erf(-2) - actualErfValues['-2.0']) < DIFF_THRESH)
assert.ok(Math.abs(erf(-3) - actualErfValues['-3.0']) < DIFF_THRESH)
})
it('should calculate the erf of a boolean (true = 1, false = 0)', function () {
assert.ok(Math.abs(erf(true) - actualErfValues['1.0']) < DIFF_THRESH)
assert.ok(Math.abs(erf(false) - actualErfValues['0.0']) < DIFF_THRESH)
})
it('should calculate the erf of each element in a matrix', function () {
math.subtract(
erf(math.matrix([0, 1, 2, 3, 4, 5])),
math.matrix([0, 1, 2, 3, 4, 5].map(function (x) {
return actualErfValues[x.toFixed(1)]
}))
).forEach(function (diff) {
assert.ok(diff < DIFF_THRESH)
})
})
it('should calculate the erf of each element in an array', function () {
math.subtract(
erf(math.matrix([0, 1, 2, 3, 4, 5])),
math.matrix([0, 1, 2, 3, 4, 5].map(function (x) {
return actualErfValues[x.toFixed(1)]
}))
).forEach(function (diff) {
assert.ok(diff < DIFF_THRESH)
})
})
it('should throw en error if called with invalid number of arguments', function () {
assert.throws(function () { erf() })
assert.throws(function () { erf(1, 3) })
})
it('should throw en error if called with invalid type of argument', function () {
assert.throws(function () { erf(new Date()) })
assert.throws(function () { erf('a string') })
})
it('should LaTeX erf', function () {
const expression = math.parse('erf(2.5)')
assert.strictEqual(expression.toTex(), 'erf\\left(2.5\\right)')
})
it('should return 1 for numbers greater than 2**53 (including Infinity)', function () {
assert.strictEqual(erf(Math.pow(2, 53)), 1)
assert.strictEqual(erf(Infinity), 1)
})
it('should return -1 for numbers less than -2**53 (including -Infinity)', function () {
assert.strictEqual(erf(-Math.pow(2, 53)), -1)
assert.strictEqual(erf(-Infinity), -1)
})
// TODO: Test with nums really close to 0
// TODO: Once this works for complex numbers and imaginary units, test
})
const actualErfValues = {
'-7.0': -1.0,
'-6.9': -1.0,
'-6.8': -1.0,
'-6.7': -1.0,
'-6.6': -1.0,
'-6.5': -1.0,
'-6.4': -1.0,
'-6.3': -1.0,
'-6.2': -1.0,
'-6.1': -1.0,
'-6.0': -1.0,
'-5.9': -0.9999999999999999,
'-5.8': -0.9999999999999998,
'-5.7': -0.9999999999999992,
'-5.6': -0.9999999999999977,
'-5.5': -0.9999999999999927,
'-5.4': -0.9999999999999777,
'-5.3': -0.9999999999999338,
'-5.2': -0.9999999999998075,
'-5.1': -0.9999999999994507,
'-5.0': -0.9999999999984626,
'-4.9': -0.999999999995781,
'-4.8': -0.9999999999886479,
'-4.7': -0.9999999999700474,
'-4.6': -0.999999999922504,
'-4.5': -0.9999999998033839,
'-4.4': -0.999999999510829,
'-4.3': -0.9999999988065282,
'-4.2': -0.9999999971445058,
'-4.1': -0.9999999932999724,
'-4.0': -0.9999999845827421,
'-3.9': -0.9999999652077514,
'-3.8': -0.9999999229960725,
'-3.7': -0.9999998328489421,
'-3.6': -0.999999644137007,
'-3.5': -0.9999992569016276,
'-3.4': -0.9999984780066371,
'-3.3': -0.9999969422902035,
'-3.2': -0.9999939742388483,
'-3.1': -0.9999883513426328,
'-3.0': -0.9999779095030014,
'-2.9': -0.9999589021219005,
'-2.8': -0.9999249868053346,
'-2.7': -0.9998656672600594,
'-2.6': -0.9997639655834707,
'-2.5': -0.999593047982555,
'-2.4': -0.999311486103355,
'-2.3': -0.9988568234026434,
'-2.2': -0.9981371537020182,
'-2.1': -0.997020533343667,
'-2.0': -0.9953222650189527,
'-1.9': -0.9927904292352574,
'-1.8': -0.9890905016357308,
'-1.7': -0.9837904585907746,
'-1.6': -0.976348383344644,
'-1.5': -0.9661051464753108,
'-1.4': -0.9522851197626488,
'-1.3': -0.9340079449406524,
'-1.2': -0.9103139782296352,
'-1.1': -0.8802050695740816,
'-1.0': -0.842700792949715,
'-0.9': -0.796908212422832,
'-0.8': -0.7421009647076606,
'-0.7': -0.6778011938374184,
'-0.6': -0.6038560908479259,
'-0.5': -0.5204998778130465,
'-0.4': -0.42839235504666845,
'-0.3': -0.3286267594591274,
'-0.2': -0.22270258921047842,
'-0.1': -0.11246291601828488,
'0.0': 0.0,
0.1: 0.11246291601828488,
0.2: 0.22270258921047842,
0.3: 0.3286267594591274,
0.4: 0.42839235504666845,
0.5: 0.5204998778130465,
0.6: 0.6038560908479259,
0.7: 0.6778011938374184,
0.8: 0.7421009647076606,
0.9: 0.796908212422832,
'1.0': 0.842700792949715,
1.1: 0.8802050695740816,
1.2: 0.9103139782296352,
1.3: 0.9340079449406524,
1.4: 0.9522851197626488,
1.5: 0.9661051464753108,
1.6: 0.976348383344644,
1.7: 0.9837904585907746,
1.8: 0.9890905016357308,
1.9: 0.9927904292352574,
'2.0': 0.9953222650189527,
2.1: 0.997020533343667,
2.2: 0.9981371537020182,
2.3: 0.9988568234026434,
2.4: 0.999311486103355,
2.5: 0.999593047982555,
2.6: 0.9997639655834707,
2.7: 0.9998656672600594,
2.8: 0.9999249868053346,
2.9: 0.9999589021219005,
'3.0': 0.9999779095030014,
3.1: 0.9999883513426328,
3.2: 0.9999939742388483,
3.3: 0.9999969422902035,
3.4: 0.9999984780066371,
3.5: 0.9999992569016276,
3.6: 0.999999644137007,
3.7: 0.9999998328489421,
3.8: 0.9999999229960725,
3.9: 0.9999999652077514,
'4.0': 0.9999999845827421,
4.1: 0.9999999932999724,
4.2: 0.9999999971445058,
4.3: 0.9999999988065282,
4.4: 0.999999999510829,
4.5: 0.9999999998033839,
4.6: 0.999999999922504,
4.7: 0.9999999999700474,
4.8: 0.9999999999886479,
4.9: 0.999999999995781,
'5.0': 0.9999999999984626,
5.1: 0.9999999999994507,
5.2: 0.9999999999998075,
5.3: 0.9999999999999338,
5.4: 0.9999999999999777,
5.5: 0.9999999999999927,
5.6: 0.9999999999999977,
5.7: 0.9999999999999992,
5.8: 0.9999999999999998,
5.9: 0.9999999999999999,
'6.0': 1.0,
6.1: 1.0,
6.2: 1.0,
6.3: 1.0,
6.4: 1.0,
6.5: 1.0,
6.6: 1.0,
6.7: 1.0,
6.8: 1.0,
6.9: 1.0
}