/* eslint-env mocha */
/**
* Automated mocha and chai tests for the module {@link module:math math.js}.
*
* @module test/math
*
* @author Henry Brown
*/
"use strict";
var assert = require("chai").assert;
let mathFuncController = require("../index.js").math;
describe("math.js", function() {
describe("enable*()", function() {
describe("Test that by default, none of the math functions are enabled", function() {
it("should not have enabled Math.floor10", function() {
assert.isUndefined(Math.floor10);
});
it("should not have enabled Math.ceil10", function() {
assert.isUndefined(Math.ceil10);
});
it("should not have enabled Math.round10", function() {
assert.isUndefined(Math.round10);
});
});
});
describe("enableFloor10()", function() {
it("should enable Math.floor10", function() {
mathFuncController.enableFloor10();
assert.isDefined(Math.floor10);
});
it("shouldn't throw an error if you enable it again", function() {
assert.doesNotThrow(function() {
mathFuncController.enableFloor10();
});
});
});
describe("enableCeil10()", function() {
it("should enable Math.ceil10", function() {
mathFuncController.enableCeil10();
assert.isDefined(Math.ceil10);
});
it("shouldn't throw an error if you enable it again", function() {
assert.doesNotThrow(function() {
mathFuncController.enableCeil10();
});
});
});
describe("enableRound10()", function() {
it("should enable Math.round10", function() {
mathFuncController.enableRound10();
assert.isDefined(Math.round10);
});
it("shouldn't throw an error if you enable it again", function() {
assert.doesNotThrow(function() {
mathFuncController.enableRound10();
});
});
});
describe("Test for existing function clobbering", function() {
it("should not clobber an existing floor10 function", function() {
assert.isTrue(mathFuncController.enabledFloor10);
assert.isDefined(Math.floor10);
delete mathFuncController.enabledFloor10;
assert.throws(function() {
mathFuncController.enableFloor10();
});
delete Math.floor10;
assert.isUndefined(Math.floor10);
});
it("should not clobber an existing ceil10 function", function() {
assert.isTrue(mathFuncController.enabledCeil10);
assert.isDefined(Math.ceil10);
delete mathFuncController.enabledCeil10;
assert.throws(function() {
mathFuncController.enableCeil10();
});
delete Math.ceil10;
assert.isUndefined(Math.ceil10);
});
it("should not clobber an existing round10 function", function() {
assert.isTrue(mathFuncController.enabledRound10);
assert.isDefined(Math.round10);
delete mathFuncController.enabledRound10;
assert.throws(function() {
mathFuncController.enableRound10();
});
delete Math.round10;
assert.isUndefined(Math.round10);
});
});
describe("enableAll()", function() {
it("should enable all math functions", function() {
assert.isUndefined(Math.floor10);
assert.isUndefined(Math.ceil10);
assert.isUndefined(Math.round10);
mathFuncController.enableAll();
assert.isDefined(Math.floor10);
assert.isDefined(Math.ceil10);
assert.isDefined(Math.round10);
});
});
describe("floor10()", function() {
it("should allow to round down at the 10^exp's place floor10(value, exp)", function() {
assert.equal(Math.floor10(999, 3), 0);
assert.equal(Math.floor10(999, 2), 900);
assert.equal(Math.floor10(999, 1), 990);
assert.equal(Math.floor10(999.99, -1), 999.9);
});
});
describe("ceil10()", function() {
it("should allow to round up at the 10^exp's place ceil10(value, exp)", function() {
assert.equal(Math.ceil10(111, 3), 1000);
assert.equal(Math.ceil10(111, 2), 200);
assert.equal(Math.ceil10(111, 1), 120);
assert.equal(Math.ceil10(111.11, -1), 111.2);
});
});
describe("round10()", function() {
it("should allow rounding at the 10^exp's place round10(value, exp)", function() {
assert.equal(Math.round10(445, 3), 0);
assert.equal(Math.round10(455, 3), 0);
assert.equal(Math.round10(555, 3), 1000);
});
});
});