generated from ztimson/template
97 lines
3.1 KiB
JavaScript
97 lines
3.1 KiB
JavaScript
var geomagnetism = require('../index.js');
|
|
var assert = require('chai').assert;
|
|
var fs = require('fs');
|
|
|
|
var tolerances = {
|
|
incl: 0.01, //deg
|
|
decl: 0.01, //deg
|
|
x: 5, //nT
|
|
y: 5, //nT
|
|
z: 5, //nT
|
|
h: 5, //nT
|
|
f: 5 //nT
|
|
};
|
|
|
|
function loadTestValues(){
|
|
var str = fs.readFileSync(__dirname + '/values.csv', {encoding: 'utf8'});
|
|
var lines = str.split(/\r?\n/);
|
|
var header = lines[0].split(',');
|
|
var values = [];
|
|
for(var i = 1; i < lines.length; i++){
|
|
var l = lines[i].split(',');
|
|
var v = {};
|
|
for(var j = 0; j < header.length; j++){
|
|
v[header[j]] = parseFloat(l[j]);
|
|
}
|
|
values.push(v);
|
|
}
|
|
return values;
|
|
}
|
|
|
|
function getModel(test){
|
|
var t0, t1;
|
|
var year = test.date;
|
|
var year_int = Math.floor(year);
|
|
var year_fpart = year - year_int;
|
|
var dms = 1000*3600*24*365*year_fpart;
|
|
|
|
t0 = new Date(year_int, 0, 1);
|
|
t1 = new Date(t0.valueOf() + dms);
|
|
|
|
return geomagnetism.model(t1);
|
|
}
|
|
|
|
var values = loadTestValues();
|
|
|
|
describe("model", function(){
|
|
describe("point()", function(){
|
|
it("should return expected values", function(){
|
|
values.forEach(function(test){
|
|
var model = getModel(test);
|
|
var info = model.point([test.lat, test.lon, test.alt]);
|
|
assert.closeTo(info.incl, test.incl, tolerances.incl, 'inclination ' + test.date);
|
|
assert.closeTo(info.decl, test.decl, tolerances.decl, 'declination ' + test.date);
|
|
assert.closeTo(info.x, test.x, tolerances.x, 'x');
|
|
assert.closeTo(info.y, test.y, tolerances.y, 'y');
|
|
assert.closeTo(info.z, test.z, tolerances.z, 'z');
|
|
assert.closeTo(info.h, test.h, tolerances.h, 'h');
|
|
assert.closeTo(info.f, test.f, tolerances.f, 'f');
|
|
});
|
|
});
|
|
it("should return value for current date", function(){
|
|
var date = new Date();
|
|
geomagnetism.model(date).point([44.53461, -109.05572]);
|
|
});
|
|
it("should return value for current date + 1 year", function(){
|
|
var date = new Date();
|
|
date.setFullYear(date.getFullYear() + 1);
|
|
geomagnetism.model(date).point([44.53461, -109.05572]);
|
|
});
|
|
});
|
|
describe("getTimedModel()", function(){
|
|
it("should throw error if date is outside of valid range and allowOutOfBoundsModel is false", function(){
|
|
assert.throws(function(){
|
|
geomagnetism.model(new Date("1/1/1999"));
|
|
}, Error);
|
|
});
|
|
it("should log error if date is outside of valid range below and allowOutOfBoundsModel is true", function(){
|
|
var model = geomagnetism.model(new Date("1/1/1999"), { allowOutOfBoundsModel: true });
|
|
assert.equal(model.start_date.getFullYear(), 2014);
|
|
});
|
|
it("should log error if date is outside of valid range above and allowOutOfBoundsModel is true", function(){
|
|
var model = geomagnetism.model(new Date("1/1/2030"), { allowOutOfBoundsModel: true });
|
|
assert.equal(model.start_date.getFullYear(), 2024);
|
|
});
|
|
it("should get a different model for a different date", function(){
|
|
var pt = [44.53461, -109.05572];
|
|
var model0 = geomagnetism.model();
|
|
var model1 = geomagnetism.model(new Date("3/22/2018"));
|
|
var decl0 = model0.point(pt).decl;
|
|
var decl1 = model1.point(pt).decl;
|
|
assert.notEqual(model0, model1);
|
|
assert(Math.abs(decl1 - decl0) > 0.001, 'declination should be different');
|
|
});
|
|
|
|
});
|
|
});
|