sitespeed-grade
Version:
Sitespeed grade.
141 lines (100 loc) • 3.04 kB
JavaScript
var assert = require('assert'),
Stats = require('fast-stats').Stats;
var s1, s2, s3, s4;
s1 = new Stats().push(1, 2, 3, 10, 8, 4, 3);
s2 = new Stats().push([1, 2, 3, 10, 8, 4, 3]);
s3 = new Stats();
s3.push(1, 2, 3, 10, 8, 4, 3);
s4 = new Stats();
s4.unshift(1, 2, 3, 10, 8, 4);
s4.push(3);
assert.equal(s1.amean().toFixed(2), s2.amean().toFixed(2));
assert.equal(s1.amean().toFixed(2), s3.amean().toFixed(2));
assert.equal(s1.amean().toFixed(2), s4.amean().toFixed(2));
var a = s1.pop();
assert.equal(a, 3);
var b = s2.shift();
assert.equal(b, 1);
assert.equal(s1.length, 6);
assert.equal(s2.length, 6);
assert.ok(s1.amean() < s2.amean());
s4.reset();
assert.equal(s4.length, 0);
s4 = s3.copy();
assert.equal(s3.length, s4.length);
var a = s1.amean();
assert.equal(a.toFixed(2), "4.67"); // remember we popped out the last item of `s1` above.
var a = s1.gmean();
assert.equal(a.toFixed(2), "3.53");
var a = s1.median();
assert.equal(a.toFixed(2), "3.50");
var p95 = s1.percentile(95);
var m = s1.percentile(50);
var q1 = s1.percentile(25);
assert.equal(p95.toFixed(2), "10.00");
assert.equal(m.toFixed(2), "3.50");
assert.equal(q1.toFixed(2), "2.50");
var r = s1.range();
assert.equal(r.length, 2);
assert.equal(r[0], 1);
assert.equal(r[1], 10);
var sd = s1.σ();
assert.equal(sd.toFixed(2), '3.25');
var gsd = s1.gstddev();
assert.equal(gsd.toFixed(2), '2.20');
var moe = s1.moe();
assert.equal(moe.toFixed(2), '2.60');
var s5 = s1.band_pass(3, 8);
var r = s5.range();
assert.equal(r[0], 3);
assert.equal(r[1], 8);
s5 = s1.band_pass(3, 8, true);
r = s5.range();
assert.equal(r[0], 4);
assert.equal(r[1], 4);
var s6 = s1.iqr();
r = s6.range();
assert.equal(r[0], 1);
assert.equal(r[1], 10);
var s7 = new Stats({bucket_precision: 10});
// Populate s7 with sequence of squares from 0-10
// 0 1 4 9 16 25 36 49 64 81 100
for(var i=0; i<=10; i++)
s7.push(i*i);
// distribution should be [4, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1]
// but 0s are undefined to save on memory
var d=s7.distribution();
// length should be one more than (max-min)/bucket_precision
assert.equal(d.length, 11);
d.forEach(function(e) {
switch(e.bucket) {
case 5: assert.equal(e.count, 4); // 0 1 4 9
break;
case 15: assert.equal(e.count, 1); // 16
break;
case 25: assert.equal(e.count, 1); // 25
break;
case 35: assert.equal(e.count, 1); // 36
break;
case 45: assert.equal(e.count, 1); // 49
break;
case 55: assert.equal(e.count, 0);
break;
case 65: assert.equal(e.count, 1); // 64
break;
case 75: assert.equal(e.count, 0);
break;
case 85: assert.equal(e.count, 1); // 81
break;
case 95: assert.equal(e.count, 0);
break;
case 105: assert.equal(e.count, 1); // 100
break;
default: assert.fail(e.bucket, "", "", "Unexpected bucket");
}
});
var s8 = new Stats({store_data: false, bucket_precision: 2}).push(1, 2, 3, 10, 8, 4, 3);
var s9 = s8.copy()
assert.equal(s9.length, s8.length);
assert.equal(s9.buckets.length, s8.buckets.length);
assert.equal(s9.amean(), s8.amean());