UNPKG

webppl

Version:

Probabilistic programming for the web

75 lines (62 loc) 2.24 kB
// NOTE: this file cannot live in the top-level tests directory. For compatibility // with Windows, we alias `npm test` to `nodeunit tests`, which runs all the .js // files in the top-level directory; helpers.js is not a valid nodeunit file, so // this would cause tests to fail 'use strict'; var _ = require('lodash'); var fs = require('fs'); var assert = require('assert'); var webppl = require('../../src/main'); var util = require('../../src/util'); var serialize = util.serialize; _.templateSettings = { interpolate: /\{\{(.+?)\}\}/g }; var getModelNames = function(testDataDir) { var filenames = fs.readdirSync(testDataDir + 'models/'); return _.map(filenames, function(fn) { return fn.split('.')[0]; }); }; var loadModel = function(testDataDir, modelName) { var filename = testDataDir + 'models/' + modelName + '.wppl'; return fs.readFileSync(filename, 'utf-8'); }; var loadExpected = function(testDataDir, modelName) { var filename = testDataDir + 'expected/' + modelName + '.json'; return JSON.parse(fs.readFileSync(filename, 'utf-8')); }; var testEqual = function(test, actual, expected, name) { var msg = ['Expected ', name, ': ', serialize(expected), ', actual: ', serialize(actual)].join(''); test.ok(_.isEqual(actual, expected), msg); }; var toleranceMessage = _.template('Expected {{name}}: {{expected}}, actual: {{actual}}, tolerance: {{tolerance}}'); var testWithinTolerance = function(test, actual, expected, tolerance, name, verbose) { var absDiff = Math.abs(actual - expected); var msg = toleranceMessage({ name: name, expected: expected, actual: actual, tolerance: tolerance }); var isOk = (actual === expected) || // for -Infinity and Infinity absDiff <= tolerance; if (!isOk && verbose) { console.log(msg) } test.ok(isOk, msg); }; var getRandomSeedFromEnv = function() { if (process.env.RANDOM_SEED) { var seed = parseInt(process.env.RANDOM_SEED); util.assertValidRandomSeed(seed); return seed; } }; module.exports = { getModelNames: getModelNames, loadModel: loadModel, loadExpected: loadExpected, testEqual: testEqual, testWithinTolerance: testWithinTolerance, getRandomSeedFromEnv: getRandomSeedFromEnv }