Skip to content

Instantly share code, notes, and snippets.

@dmgig
Created February 18, 2016 21:26
Show Gist options
  • Save dmgig/3318ebb752eefdff495d to your computer and use it in GitHub Desktop.
Save dmgig/3318ebb752eefdff495d to your computer and use it in GitHub Desktop.
Matrix Math QUnit Tests
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>QUnit Matrix Tests</title>
<link rel="stylesheet" href="//code.jquery.com/qunit/qunit-1.19.0.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<script src="//code.jquery.com/qunit/qunit-1.19.0.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.js"></script>
<script type="text/javascript">
var DateLabel, DataMatrix, DataMatricies, Field, TestObj;
TestObj = function(){
return {
"i":0,
"increment": function(){
return this.i++;
}
}
}
Field = function(name){
return { "name": name };
}
DateLabel = function(m){
return {
"date": m,
"A": 'A',
"Y": 'Y'+m.year().toString(),
"Q": 'Y'+m.year().toString()+'Q'+m.quarter().toString(),
"M": 'Y'+m.year().toString()+'M'+m.month().toString(),
//"WM": m.weekmonth(),
"WY": 'Y'+m.year().toString()+'WY'+m.week().toString(),
"D": 'Y'+m.year().toString()+'M'+m.month().toString()+'D'+m.day().toString()
}
}
DataMatricies = function(matricies_array){
this.combineMatricies = function(){
}
this.compareMatricies = function(){
}
this.matricies = matricies_array;
}
DataMatrix = function(dates, fields, data){
this.validate = function(){
for(i in data){
//console.log(data);
if(data[i].length != dates.length)
throw 'data['+i+'] length does not match dates length. Data length = ' + data[i].length + ' and Dates length = ' + dates.length + '.';
}
}
_orig = {
"dates" :dates,
"fields":fields,
"data" :data
};
this.dates = dates;
this.fields = fields;
this.data = data;
this.subtotals = []; // DataMatricies
this.total = [];
this.validate();
// convert _orig to combined data set and return;
this.condenseTo = function(P){
var new_data = {}, new_dates = {}, combine_on;
for(var i in _orig.data){
new_data[i] = [];
for(var j in _orig.dates){
combine_on = _orig.dates[j][P];
console.log(combine_on);
new_dates[combine_on] = _orig.dates[j];
if(isNaN(new_data[i][combine_on])) new_data[i][combine_on] = 0;
new_data[i][combine_on] = Number(_orig.data[i][j]) + Number(new_data[i][combine_on]);
}
}
// normalize objects to simple arrays
this.dates = [], this.data = [];
for(var i in new_dates) this.dates.push(new_dates[i]);
for(var i in new_data){
this.data.push([]);
for(var j in new_data[i]) this.data[i].push(new_data[i][j]);
}
}
this.revert = function(){
this.dates = _orig.dates;
this.fields = _orig.fields;
this.data = _orig.data;
}
return this;
}
var to = new TestObj();
QUnit.test( "testobj", function( assert ) {
assert.ok( to.i == 0, "setup is right" );
to.increment();
assert.ok( to.i == 1, "increment worked");
});
var matrix, exception;
try {
matrix = new DataMatrix([ new DateLabel('2015-01-01') ], [ new Feild("test") ], [ 2, 5 ]);
}
catch(err) {
exception = err;
}
QUnit.test( "failed matrix creation test", function( assert ) {
assert.ok( exception != null, "Matrix validation failed! " + exception );
});
var report = [], dates = [], fields = [], data = [], date_start = '2015-01-01', date, matrix;
date = moment(date_start);
fields.push(new Field("metric-a"));
data.push([]);
i = 1;
while(i <= 100){
dates.push(new DateLabel(date.clone()));
data[0].push(10);
date.add(1, "days");
i++;
}
QUnit.test( "good matrix creation test", function( assert ) {
var matrix = new DataMatrix(dates, fields, data);
assert.ok( matrix.dates.length == 100, "Passed!" );
assert.ok( matrix.fields.length == 1, "Passed!" );
assert.ok( matrix.fields.length == matrix.data.length, "Passed!" );
assert.ok( matrix.data[0].length == 100, "Passed!" );
});
QUnit.test( "test all", function( assert ) {
var matrixA = new DataMatrix(dates, fields, data);
//console.log(JSON.stringify(matrixY));
matrixA.condenseTo('A');
console.log(JSON.stringify(matrixA));
assert.ok( matrixA.dates.length == 1, "Passed!" );
assert.ok( matrixA.fields.length == 1, "Passed!" );
assert.ok( matrixA.fields.length == matrixA.data.length, "Passed!" );
assert.ok( matrixA.data[0].length == 1, "Passed!" );
assert.ok( matrixA.data[0][0] == 1000, "Passed!" );
});
QUnit.test( "test year", function( assert ) {
var matrixY = new DataMatrix(dates, fields, data);
//console.log(JSON.stringify(matrixY));
matrixY.condenseTo('Y');
console.log(JSON.stringify(matrixY));
assert.ok( matrixY.dates.length == 1, "Passed!" );
assert.ok( matrixY.fields.length == 1, "Passed!" );
assert.ok( matrixY.fields.length == matrixY.data.length, "Passed!" );
assert.ok( matrixY.data[0].length == 1, "Passed!" );
assert.ok( matrixY.data[0][0] == 1000, "Passed!" );
matrixY.revert();
assert.ok( matrixY.dates.length == 100, "byDays reversion Passed!" );
assert.ok( matrixY.fields.length == 1, "Passed!" );
assert.ok( matrixY.fields.length == matrixY.data.length, "Passed!" );
assert.ok( matrixY.data[0].length == 100, "Passed!" );
});
QUnit.test( "test month", function( assert ) {
var matrixM = new DataMatrix(dates, fields, data);
matrixM.condenseTo('M');
console.log(JSON.stringify(matrixM));
assert.ok( matrixM.dates.length == 4, "Passed!" );
assert.ok( matrixM.fields.length == 1, "Passed!" );
assert.ok( matrixM.fields.length == matrixM.data.length, "Passed!" );
assert.ok( matrixM.data[0].length == 4, "Passed!" );
assert.ok( matrixM.data[0][0] == 310, "Passed!" );
});
QUnit.test( "test DataMatricies", function( assert ) {
var matrixM = new DataMatrix(dates, fields, data);
matrixM.condenseTo('M');
console.log(JSON.stringify(matrixM));
assert.ok( matrixM.dates.length == 4, "Passed!" );
assert.ok( matrixM.fields.length == 1, "Passed!" );
assert.ok( matrixM.fields.length == matrixM.data.length, "Passed!" );
assert.ok( matrixM.data[0].length == 4, "Passed!" );
assert.ok( matrixM.data[0][0] == 310, "Passed!" );
});
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment