Skip to content

Commit

Permalink
added sum, mean, stdev computations and assertions
Browse files Browse the repository at this point in the history
  • Loading branch information
logicalparadox committed Apr 24, 2012
1 parent 76ae30a commit 903d52e
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
55 changes: 55 additions & 0 deletions lib/calc.js
@@ -0,0 +1,55 @@
/*!
* Chai Stats - calculation utilities
* Copyright (c) 2012 Jake Luer <jake@alogicalparadox.com>
* MIT Licenced
*/

/**
* # sum
*
* Returns the sum of a given array of numbers.
*
* @param {Array} numbers to sum
* @returns sum
*/

exports.sum = function (nums) {
var res = 0;
for (var i = 0; i < nums.length; i++)
res += nums[i];
return res;
};

/**
* # mean
*
* Returns the mean (average) of a given array of numbers.
*
* @param {Array} numbers to average
* @returs mean
*/

exports.mean = function (nums) {
var sum = exports.sum(nums);
return sum / nums.length;
};

/**
* # sdeviation
*
* Returns the standard deviation of a given array of numbers.
*
* @param {Array} numbers for stdev
* @return standard deviation
*/

exports.sdeviation = function (nums) {
var devs = []
, mean = exports.mean(nums);
for (var i = 0; i < nums.length; i++)
devs.push(nums[i] - mean);
for (var d = 0; d < devs.length; d++)
devs[d] = Math.pow(devs[d], 2);
var davg = exports.sum(devs) / (devs.length - 1);
return Math.sqrt(davg);
};
26 changes: 26 additions & 0 deletions lib/stats.js
@@ -0,0 +1,26 @@
var calc = require('./calc');

module.exports = function (chai, _) {

_.addProperty(chai.Assertion, 'sum', function () {
var obj = _.flag(this, 'object');
new chai.Assertion(obj).to.be.instanceOf(Array);
_.flag(this, 'object', calc.sum(obj));
});

_.addProperty(chai.Assertion, 'mean', function () {
var obj = _.flag(this, 'object');
new chai.Assertion(obj).to.be.instanceOf(Array);
_.flag(this, 'object', calc.mean(obj));
});

function deviation () {
var obj = _.flag(this, 'object');
new chai.Assertion(obj).to.be.instanceOf(Array);
_.flag(this, 'object', calc.sdeviation(obj));
}

_.addProperty(chai.Assertion, 'stdev', deviation);
_.addProperty(chai.Assertion, 'deviation', deviation);

};

0 comments on commit 903d52e

Please sign in to comment.