UNPKG

mathjs

Version:

Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser and offers an integrated solution to work with numbers, big numbers, complex numbers, units, and matrices.

180 lines (156 loc) 4.65 kB
var assert = require('assert'); var math = require('../../../index'); var Spa = math.type.Spa; describe('Spa', function() { describe('constructor', function() { it('should throw an error when called without new keyword', function () { assert.throws(function () { Spa(); }, /Constructor must be called with the new operator/); }); it('should have a property isSpa', function () { var a = new Spa(); assert.strictEqual(a.isSpa, true); }); it('should have a property type', function () { var a = new Spa(); assert.strictEqual(a.type, 'Spa'); }); }); describe('test', function () { it('should add value when no value exists for row', function () { var spa = new Spa(10); spa.set(5, 0.5); assert(spa._values[5]); assert(spa._values[5].value); assert.equal(spa._values[5].value, 0.5); }); it('should set value when value exists for row', function () { var spa = new Spa(10); spa.set(5, 0.5); assert(spa._values[5]); assert(spa._values[5].value); assert.equal(spa._values[5].value, 0.5); spa.set(5, 1.5); assert(spa._values[5]); assert(spa._values[5].value); assert.equal(spa._values[5].value, 1.5); }); }); describe('get', function () { it('should get zero when no value exists for row', function () { var spa = new Spa(10); var v = spa.get(5); assert.equal(v, 0); }); it('should get value when value exists for row', function () { var spa = new Spa(10); spa.set(5, 0.5); var v = spa.get(5); assert.equal(v, 0.5); }); }); describe('accumulate', function () { it('should add value when no value exists for row', function () { var spa = new Spa(10); spa.accumulate(5, 0.5); assert(spa._values[5]); assert(spa._values[5].value); assert.equal(spa._values[5].value, 0.5); }); it('should accumulate value when value exists for row', function () { var spa = new Spa(10); spa.set(5, 0.5); spa.accumulate(5, 1.5); assert(spa._values[5]); assert(spa._values[5].value); assert.equal(spa._values[5].value, 2); }); }); describe('swap', function () { it('should swap two existing values', function () { var spa = new Spa(10); spa.set(5, 0.5); spa.set(2, 0.2); spa.swap(2, 5); assert(spa._values[5]); assert(spa._values[5].value); assert.equal(spa._values[5].value, 0.2); assert(spa._values[2]); assert(spa._values[2].value); assert.equal(spa._values[2].value, 0.5); }); it('should swap an existing and non existing values', function () { var spa = new Spa(10); spa.set(5, 0.5); spa.swap(5, 2); assert(!spa._values[5]); assert(spa._values[2]); assert(spa._values[2].value); assert.equal(spa._values[2].value, 0.5); }); it('should swap a non existing and existing values', function () { var spa = new Spa(10); spa.set(5, 0.5); spa.swap(2, 5); assert(!spa._values[5]); assert(spa._values[2]); assert(spa._values[2].value); assert.equal(spa._values[2].value, 0.5); }); it('should swap two non existing values', function () { var spa = new Spa(10); spa.swap(2, 5); assert(!spa._values[5]); assert(!spa._values[2]); }); }); describe('forEach', function () { it('should enumerate values in correct order', function () { var spa = new Spa(10); spa.set(2, 2); spa.set(3, 3); spa.set(4, 4); spa.set(1, 2); var x; var c = 0; spa.forEach(0, 9, function (i) { if (!x) { assert.equal(i, 1); x = i; } else { assert(i > x); x = i; } c++; }); assert.equal(c, 4); assert.equal(x, 4); assert(spa._heap._minimum !== null); assert.equal(spa._heap._size, 4); }); it('should enumerate values in interval', function () { var spa = new Spa(10); spa.set(2, 2); spa.set(3, 3); spa.set(4, 4); spa.set(1, 2); var x; var c = 0; spa.forEach(2, 3, function (i) { if (!x) { assert.equal(i, 2); x = i; } else { assert(i > x); x = i; } c++; }); assert.equal(c, 2); assert.equal(x, 3); assert(spa._heap._minimum !== null); assert.equal(spa._heap._size, 4); }); }); });