UNPKG

free-gaussian

Version:

A JavaScript model of a Gaussian distribution

101 lines (86 loc) 2.84 kB
// Tests based on values from Wolfram Alpha var gaussian = require('../lib/gaussian'); // Allow for some error var assert = require('nodeunit').assert; assert.epsilonEqual = function(actual, expected) { var diff = Math.abs(actual - expected); assert.ok(diff < 1e-5, actual + ' - ' + expected + ' is ' + diff); }; assert.gaussianEqual = function(actual, expected) { assert.equal(actual.mean, expected.mean); assert.equal(actual.variance, expected.variance); assert.epsilonEqual(actual.standardDeviation, Math.sqrt(expected.variance)); } module.exports = { 'test properties': function(test) { var d1 = gaussian(0, 1); test.equal(d1.mean, 0); test.equal(d1.variance, 1); test.equal(d1.standardDeviation, 1); var d2 = gaussian(1, 4); test.equal(d2.mean, 1); test.equal(d2.variance, 4); test.equal(d2.standardDeviation, 2); test.done(); }, 'test pdf': function(test) { var d = gaussian(0, 1); test.epsilonEqual(d.pdf(-2), 0.053991); test.epsilonEqual(d.pdf(-1), 0.241971); test.epsilonEqual(d.pdf(0), 0.398942); test.epsilonEqual(d.pdf(1), 0.241971); test.epsilonEqual(d.pdf(2), 0.053991); test.done(); }, 'test cdf': function(test) { var d = gaussian(0, 1); test.epsilonEqual(d.cdf(-1.28155), 0.1); test.epsilonEqual(d.cdf(-0.67449), 0.25); test.epsilonEqual(d.cdf(0), 0.5); test.epsilonEqual(d.cdf(0.67449), 0.75); test.epsilonEqual(d.cdf(1.28155), 0.9); test.done(); }, 'test ppf': function(test) { var d = gaussian(0, 1); test.epsilonEqual(d.ppf(0.1), -1.28155); test.epsilonEqual(d.ppf(0.25), -0.67449); test.epsilonEqual(d.ppf(0.5), 0); test.epsilonEqual(d.ppf(0.75), 0.67449); test.epsilonEqual(d.ppf(0.9), 1.28155); test.done(); }, 'test mul': function(test) { //test normal mul var d = gaussian(0, 1).mul(gaussian(0, 1)); test.gaussianEqual(d, gaussian(0,0.5)); //test scale test.gaussianEqual(gaussian(1,1).mul(2), gaussian(2,4)); test.done(); }, 'test div': function(test) { //test normal div var d = gaussian(1, 1).div(gaussian(1, 2)); test.gaussianEqual(d, gaussian(1,2)); //test scale test.gaussianEqual(gaussian(1,1).div(1/2), gaussian(2,4)); test.done(); }, 'test rejects negative variances': function(test) { test.throws(function() { gaussian(0, 0) }, Error); test.throws(function() { gaussian(0, -1) }, Error); test.done(); }, 'test add': function(test) { test.gaussianEqual(gaussian(1,1).add(gaussian(1,2)), gaussian(2,3)); test.done(); }, 'test sub': function(test) { test.gaussianEqual(gaussian(1,1).sub(gaussian(1,2)), gaussian(0,3)); test.done(); }, 'test scale': function(test) { test.gaussianEqual(gaussian(1,1).scale(2), gaussian(2,4)); test.done(); } };