Created
February 18, 2016 21:26
-
-
Save dmgig/3318ebb752eefdff495d to your computer and use it in GitHub Desktop.
Matrix Math QUnit Tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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