time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

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);