poisson-test.js (2102B)
1 var vows = require('vows'); 2 var assert = require('assert'); 3 var suite = vows.describe('jStat.distribution'); 4 5 require('../env.js'); 6 7 var tol = 0.0000001; 8 9 suite.addBatch({ 10 'poisson pdf': { 11 'topic': function() { 12 return jStat; 13 }, 14 'check pdf calculation': function(jStat) { 15 var pdf = jStat.poisson.pdf; 16 17 assert.epsilon(tol, pdf(1, 1), Math.exp(-1)); 18 assert.epsilon(tol, pdf(2, 1), Math.exp(-1) / 2); 19 20 assert.epsilon(tol, pdf(1, 3), 3 * Math.exp(-3)); 21 assert.epsilon(tol, pdf(1, 1.5), 1.5 * Math.exp(- 1.5)); 22 23 //Negative test cases outside of support 24 assert.epsilon(tol, pdf(1.4, 1), 0); 25 assert.epsilon(tol, pdf(1, -2), 0); 26 }, 27 'check cdf calculation': function(jStat) { 28 var curriedCdf = function(k) { return jStat.poisson.cdf(k, 1); }; 29 30 var pdfValues = [Math.exp(-1), Math.exp(-1), Math.exp(-1) / 2, Math.exp(-1) / 6, Math.exp(-1) / 24]; 31 32 assert.epsilon(tol, curriedCdf(0.5), pdfValues[0]); 33 assert.epsilon(tol, curriedCdf(3.5), pdfValues[0] + pdfValues[1] + pdfValues[2] + pdfValues[3]); 34 35 assert.epsilon(tol, curriedCdf(-1), 0); 36 assert.epsilon(tol, curriedCdf(2), pdfValues[0] + pdfValues[1] + pdfValues[2]); 37 }, 38 'mean': function(jStat) { 39 var mean = jStat.poisson.mean; 40 41 assert.epsilon(tol, mean(1), 1); 42 assert.epsilon(tol, mean(3.5), 3.5); 43 }, 44 'check sample': function(jStat) { 45 var samplingTol = 10; 46 var lambdaToTest = [10, 100, 1000, 10000, 100000]; 47 var sampleSize = 10000; 48 for(var i in lambdaToTest) { 49 var lambda = lambdaToTest[i]; 50 var sum = 0; 51 for(let i = 0; i < sampleSize; i++) { 52 sum += jStat.poisson.sample(lambda); 53 } 54 var mean = sum/sampleSize; 55 assert.epsilon(samplingTol, mean, lambda); 56 } 57 } 58 } 59 }); 60 61 suite.export(module);