time-to-botec

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

triangular-test.js (8363B)


      1 var vows = require('vows');
      2 var assert = require('assert');
      3 var suite = vows.describe('jStat.distribution');
      4 
      5 require('../env.js');
      6 
      7 suite.addBatch({
      8   'triangular pdf': {
      9     'topic': function() {
     10       return jStat;
     11     },
     12     // checked against R's dtriang(x, min, mode, max, log=FALSE) from package 'mc2d':
     13     //   install.packages("mc2d")
     14     //   library("mc2d")
     15     //   dtriang(c(0.5, 1, 2.5, 5, 6.5, 11, 20), 1, 5, 11)
     16     //   dtriang(c(-20, -5, -2.5, 5, 10), -5, -5, 5)
     17     //   dtriang(c(-10, 0, 4, 8, 12), 0, 8, 8)
     18     //   dtriang(c(0, 7, 12), 5, 4, 10)
     19     //   dtriang(c(17, 30, 88), 23, 50, 47)
     20     //   dtriang(c(-17, -10, 0), -10, -10, -10)
     21 
     22     'check pdf calculation, when a < c < b': function(jStat) {
     23       var tol = 0.0000001;
     24       assert.epsilon(tol, jStat.triangular.pdf(0.5, 1, 11, 5), 0);      // x < a
     25       assert.epsilon(tol, jStat.triangular.pdf(1, 1, 11, 5), 0);        // x = a
     26       assert.epsilon(tol, jStat.triangular.pdf(2.5, 1, 11, 5), 0.075);  // a < x < c
     27       assert.epsilon(tol, jStat.triangular.pdf(5, 1, 11, 5), 0.2);      // x = c
     28       assert.epsilon(tol, jStat.triangular.pdf(6.5, 1, 11, 5), 0.15);   // c < x < b
     29       assert.epsilon(tol, jStat.triangular.pdf(11, 1, 11, 5), 0);       // x = b
     30       assert.epsilon(tol, jStat.triangular.pdf(20, 1, 11, 5), 0);       // b < x
     31     },
     32     'check pdf calculation, when a = c < b': function(jStat) {
     33       var tol = 0.0000001;
     34       assert.epsilon(tol, jStat.triangular.pdf(-20, -5, 5, -5), 0);     // x < a
     35       assert.epsilon(tol, jStat.triangular.pdf(-5, -5, 5, -5), 0.2);    // x = a = c
     36       assert.epsilon(tol, jStat.triangular.pdf(-2.5, -5, 5, -5), 0.15); // a = c < x < b
     37       assert.epsilon(tol, jStat.triangular.pdf(5, -5, 5, -5), 0);       // x = b
     38       assert.epsilon(tol, jStat.triangular.pdf(10, -5, 5, -5), 0);      // b < x
     39     },
     40     'check pdf calculation, when a < c = b': function(jStat) {
     41       var tol = 0.0000001;
     42       assert.epsilon(tol, jStat.triangular.pdf(-10, 0, 8, 8), 0);       // x < a
     43       assert.epsilon(tol, jStat.triangular.pdf(0, 0, 8, 8), 0);         // x = a < c = b
     44       assert.epsilon(tol, jStat.triangular.pdf(4, 0, 8, 8), 0.125);     // a = c < x < b
     45       assert.epsilon(tol, jStat.triangular.pdf(8, 0, 8, 8), 0.25);      // x = c = b
     46       assert.epsilon(tol, jStat.triangular.pdf(12, 0, 8, 8), 0);        // b < x
     47     },
     48     'check pdf calculation, when c < a': function(jStat) {
     49       var tol = 0.0000001;
     50       assert.isNaN(jStat.triangular.pdf(0, 5, 10, 4));                  // x < a
     51       assert.isNaN(jStat.triangular.pdf(7, 5, 10, 4));                  // a < x < b
     52       assert.isNaN(jStat.triangular.pdf(12, 5, 10, 4));                 // b < x
     53     },
     54     'check pdf calculation, when b < c': function(jStat) {
     55       var tol = 0.0000001;
     56       assert.isNaN(jStat.triangular.pdf(17, 23, 47, 50));               // x < a
     57       assert.isNaN(jStat.triangular.pdf(30, 23, 47, 50));               // a < x < b
     58       assert.isNaN(jStat.triangular.pdf(88, 23, 47, 50));               // b < x
     59     },
     60     'check pdf calculation, when a = b': function(jStat) {
     61       var tol = 0.0000001;
     62       assert.isNaN(jStat.triangular.pdf(-17, -10, -10, -10));           // x < a
     63       assert.isNaN(jStat.triangular.pdf(-10, -10, -10, -10));           // a = x = b
     64       assert.isNaN(jStat.triangular.pdf(0, -10, -10, -10));             // b < x
     65     }
     66   },
     67   'triangular cdf': {
     68     'topic': function() {
     69       return jStat;
     70     },
     71     // checked against R's ptriang(q, min=-1, mode=0, max=1, lower.tail=TRUE, log.p=FALSE) from package 'mc2d':
     72     //   install.packages("mc2d")
     73     //   library("mc2d")
     74     //   options(digits=10)
     75     //   ptriang(c(0, 1, 3, 5, 7, 11, 13), 1, 5, 11)
     76     //   ptriang(c(-10, -5, 0, 5, 10), -5, -5, 5)
     77     //   ptriang(c(-1, 0, 4, 8, 10), 0, 8, 8)
     78     //   ptriang(6, 5, 4, 10)
     79     //   ptriang(30, 23, 50, 47)
     80     //   ptriang(-10, -10, -10, -10) # NOTE: This returns: [1] 1, but we don't allow a = b = c!
     81     'check cdf calculation, when a < c < b': function(jStat) {
     82       var tol = 0.0000001;
     83       assert.epsilon(tol, jStat.triangular.cdf(0, 1, 11, 5), 0);
     84       assert.epsilon(tol, jStat.triangular.cdf(1, 1, 11, 5), 0);
     85       assert.epsilon(tol, jStat.triangular.cdf(3, 1, 11, 5), 0.1);
     86       assert.epsilon(tol, jStat.triangular.cdf(5, 1, 11, 5), 0.4);
     87       assert.epsilon(tol, jStat.triangular.cdf(7, 1, 11, 5), 0.7333333333);
     88       assert.epsilon(tol, jStat.triangular.cdf(11, 1, 11, 5), 1);
     89       assert.epsilon(tol, jStat.triangular.cdf(13, 1, 11, 5), 1);
     90     },
     91     'check cdf calculation, when a = c < b': function(jStat) {
     92       var tol = 0.0000001;
     93       assert.epsilon(tol, jStat.triangular.cdf(-10, -5, 5, -5), 0);
     94       assert.epsilon(tol, jStat.triangular.cdf(-5, -5, 5, -5), 0);
     95       assert.epsilon(tol, jStat.triangular.cdf(0, -5, 5, -5), 0.75);
     96       assert.epsilon(tol, jStat.triangular.cdf(5, -5, 5, -5), 1);
     97       assert.epsilon(tol, jStat.triangular.cdf(10, -5, 5, -5), 1);
     98     },
     99     'check cdf calculation, when a < c = b': function(jStat) {
    100       var tol = 0.0000001;
    101       assert.epsilon(tol, jStat.triangular.cdf(-1, 0, 8, 8), 0);
    102       assert.epsilon(tol, jStat.triangular.cdf(0, 0, 8, 8), 0);
    103       assert.epsilon(tol, jStat.triangular.cdf(4, 0, 8, 8), 0.25);
    104       assert.epsilon(tol, jStat.triangular.cdf(8, 0, 8, 8), 1);
    105       assert.epsilon(tol, jStat.triangular.cdf(10, 0, 8, 8), 1);
    106     },
    107     'check cdf calculation, when c < a': function(jStat) {
    108       var tol = 0.0000001;
    109       assert.isNaN(jStat.triangular.cdf(6, 5, 10, 4));
    110     },
    111     'check cdf calculation, when b < c': function(jStat) {
    112       var tol = 0.0000001;
    113       assert.isNaN(jStat.triangular.cdf(30, 23, 47, 50));
    114     },
    115     'check cdf calculation, when a = b': function(jStat) {
    116       var tol = 0.0000001;
    117       assert.isNaN(jStat.triangular.cdf(-10, -10, -10, -10));
    118     }
    119   },
    120   'triangular inv': {
    121     'topic': function() {
    122       return jStat;
    123     },
    124     // checked against R's qtriang(p, min=-1, mode=0, max=1, lower.tail=TRUE, log.p=FALSE) from package 'mc2d':
    125     //   install.packages("mc2d")
    126     //   library("mc2d")
    127     //   options(digits=10)
    128     //   qtriang(c(0, 0.25, 0.5, 0.75, 1), 1, 5, 11)
    129     //   qtriang(c(0, 0.5, 1), -5, -5, 5)
    130     //   qtriang(c(0, 0.5, 1), 0, 8, 8)
    131     //   qtriang(c(0, 0.5, 1), 5, 4, 10)
    132     //   qtriang(c(0, 0.5, 1), 23, 50, 47)
    133     //   qtriang(c(0, 0.5, 1), -10, -10, -10) # NOTE: This returns: [1] 1 1 1, but we don't allow a = b = c!
    134     'check inv calculation, when a < c < b': function(jStat) {
    135       var tol = 0.0000001;
    136       assert.epsilon(tol, jStat.triangular.inv(0, 1, 11, 5), 1);
    137       assert.epsilon(tol, jStat.triangular.inv(0.25, 1, 11, 5), 4.162277660);
    138       assert.epsilon(tol, jStat.triangular.inv(0.5, 1, 11, 5), 5.522774425);
    139       assert.epsilon(tol, jStat.triangular.inv(0.75, 1, 11, 5), 7.127016654);
    140       assert.epsilon(tol, jStat.triangular.inv(1, 1, 11, 5), 11);
    141     },
    142     'check inv calculation, when a = c < b': function(jStat) {
    143       var tol = 0.0000001;
    144       assert.epsilon(tol, jStat.triangular.inv(0, -5, 5, -5), -5);
    145       assert.epsilon(tol, jStat.triangular.inv(0.5, -5, 5, -5), -2.071067812);
    146       assert.epsilon(tol, jStat.triangular.inv(1, -5, 5, -5), 5);
    147     },
    148     'check inv calculation, when a < c = b': function(jStat) {
    149       var tol = 0.0000001;
    150       assert.epsilon(tol, jStat.triangular.inv(0, 0, 8, 8), 0);
    151       assert.epsilon(tol, jStat.triangular.inv(0.5, 0, 8, 8), 5.656854249);
    152       assert.epsilon(tol, jStat.triangular.inv(1, 0, 8, 8), 8);
    153     },
    154     'check inv calculation, when c < a': function(jStat) {
    155       var tol = 0.0000001;
    156       assert.isNaN(jStat.triangular.inv(0, 5, 10, 4));
    157       assert.isNaN(jStat.triangular.inv(0.5, 5, 10, 4));
    158       assert.isNaN(jStat.triangular.inv(1, 5, 10, 4));
    159     },
    160     'check inv calculation, when b < c': function(jStat) {
    161       var tol = 0.0000001;
    162       assert.isNaN(jStat.triangular.inv(0, 23, 47, 50));
    163       assert.isNaN(jStat.triangular.inv(0.5, 23, 47, 50));
    164       assert.isNaN(jStat.triangular.inv(1, 23, 47, 50));
    165     },
    166     'check inv calculation, when a = b': function(jStat) {
    167       var tol = 0.0000001;
    168       assert.isNaN(jStat.triangular.inv(0, -10, -10, -10));
    169       assert.isNaN(jStat.triangular.inv(0.5, -10, -10, -10));
    170       assert.isNaN(jStat.triangular.inv(1, -10, -10, -10));
    171     }
    172   }
    173 });
    174 
    175 suite.export(module);