1023dd3b8Sopenharmony_ci// Adds global: T 2023dd3b8Sopenharmony_ci 3023dd3b8Sopenharmony_ciT = (function () { 4023dd3b8Sopenharmony_ci var passed, testNumber, write; 5023dd3b8Sopenharmony_ci 6023dd3b8Sopenharmony_ci function T(name, tests) { 7023dd3b8Sopenharmony_ci var time; 8023dd3b8Sopenharmony_ci write(' Testing ' + name + '...'); 9023dd3b8Sopenharmony_ci passed = testNumber = 0; 10023dd3b8Sopenharmony_ci time = new Date(); 11023dd3b8Sopenharmony_ci tests(); 12023dd3b8Sopenharmony_ci time = new Date() - time; 13023dd3b8Sopenharmony_ci T.result = [passed, testNumber, time]; 14023dd3b8Sopenharmony_ci if (passed !== testNumber) write('\n'); 15023dd3b8Sopenharmony_ci write(' ' + passed + ' of ' + testNumber + ' tests passed in ' + time + ' ms\n'); 16023dd3b8Sopenharmony_ci } 17023dd3b8Sopenharmony_ci 18023dd3b8Sopenharmony_ci if (typeof window != 'undefined') { 19023dd3b8Sopenharmony_ci write = function (str) { 20023dd3b8Sopenharmony_ci document.body.innerHTML += str.replace(/\n/g, '<br>').replace(/ /g, ' '); 21023dd3b8Sopenharmony_ci }; 22023dd3b8Sopenharmony_ci } else { 23023dd3b8Sopenharmony_ci Decimal = require('../decimal'); 24023dd3b8Sopenharmony_ci write = process.stdout.write.bind(process.stdout); 25023dd3b8Sopenharmony_ci } 26023dd3b8Sopenharmony_ci 27023dd3b8Sopenharmony_ci T.assert = function (actual) { 28023dd3b8Sopenharmony_ci ++testNumber; 29023dd3b8Sopenharmony_ci if (actual === true) { 30023dd3b8Sopenharmony_ci ++passed; 31023dd3b8Sopenharmony_ci //write('\n Expected and actual: ' + actual); 32023dd3b8Sopenharmony_ci } else { 33023dd3b8Sopenharmony_ci write( 34023dd3b8Sopenharmony_ci '\n Test number ' + testNumber + ' failed: assert' + 35023dd3b8Sopenharmony_ci '\n Expected: true' + 36023dd3b8Sopenharmony_ci '\n Actual: ' + actual 37023dd3b8Sopenharmony_ci ); 38023dd3b8Sopenharmony_ci //process.exit(); 39023dd3b8Sopenharmony_ci } 40023dd3b8Sopenharmony_ci }; 41023dd3b8Sopenharmony_ci 42023dd3b8Sopenharmony_ci T.assertEqual = function (expected, actual) { 43023dd3b8Sopenharmony_ci ++testNumber; 44023dd3b8Sopenharmony_ci // If expected and actual are both NaN, consider them equal. 45023dd3b8Sopenharmony_ci if (expected === actual || expected !== expected && actual !== actual) { 46023dd3b8Sopenharmony_ci ++passed; 47023dd3b8Sopenharmony_ci } else { 48023dd3b8Sopenharmony_ci write( 49023dd3b8Sopenharmony_ci '\n Test number ' + testNumber + ' failed: assertEqual' + 50023dd3b8Sopenharmony_ci '\n Expected: ' + expected + 51023dd3b8Sopenharmony_ci '\n Actual: ' + actual 52023dd3b8Sopenharmony_ci ); 53023dd3b8Sopenharmony_ci } 54023dd3b8Sopenharmony_ci }; 55023dd3b8Sopenharmony_ci 56023dd3b8Sopenharmony_ci T.assertEqualDecimal = function (x, y) { 57023dd3b8Sopenharmony_ci ++testNumber; 58023dd3b8Sopenharmony_ci if (x.eq(y) || x.isNaN() && y.isNaN()) { 59023dd3b8Sopenharmony_ci ++passed; 60023dd3b8Sopenharmony_ci } else { 61023dd3b8Sopenharmony_ci write( 62023dd3b8Sopenharmony_ci '\n Test number ' + testNumber + ' failed: assertEqualDecimal' + 63023dd3b8Sopenharmony_ci '\n x: ' + x.valueOf() + 64023dd3b8Sopenharmony_ci '\n y: ' + y.valueOf() 65023dd3b8Sopenharmony_ci ); 66023dd3b8Sopenharmony_ci } 67023dd3b8Sopenharmony_ci }; 68023dd3b8Sopenharmony_ci 69023dd3b8Sopenharmony_ci T.assertEqualProps = function (digits, exponent, sign, n) { 70023dd3b8Sopenharmony_ci var i = 0, 71023dd3b8Sopenharmony_ci len = digits.length; 72023dd3b8Sopenharmony_ci ++testNumber; 73023dd3b8Sopenharmony_ci while (i < len && digits[i] === n.d[i]) ++i; 74023dd3b8Sopenharmony_ci if (i === len && i === n.d.length && exponent === n.e && sign === n.s) { 75023dd3b8Sopenharmony_ci ++passed; 76023dd3b8Sopenharmony_ci } else { 77023dd3b8Sopenharmony_ci write( 78023dd3b8Sopenharmony_ci '\n Test number ' + testNumber + ' failed: assertEqualProps' + 79023dd3b8Sopenharmony_ci '\n Expected digits: ' + digits + 80023dd3b8Sopenharmony_ci '\n Expected exponent: ' + exponent + 81023dd3b8Sopenharmony_ci '\n Expected sign: ' + sign + 82023dd3b8Sopenharmony_ci '\n Actual digits: ' + n.d + 83023dd3b8Sopenharmony_ci '\n Actual exponent: ' + n.e + 84023dd3b8Sopenharmony_ci '\n Actual sign: ' + n.s 85023dd3b8Sopenharmony_ci ); 86023dd3b8Sopenharmony_ci } 87023dd3b8Sopenharmony_ci }; 88023dd3b8Sopenharmony_ci 89023dd3b8Sopenharmony_ci T.assertException = function (func, msg) { 90023dd3b8Sopenharmony_ci var actual; 91023dd3b8Sopenharmony_ci ++testNumber; 92023dd3b8Sopenharmony_ci try { 93023dd3b8Sopenharmony_ci func(); 94023dd3b8Sopenharmony_ci } catch (e) { 95023dd3b8Sopenharmony_ci actual = e; 96023dd3b8Sopenharmony_ci } 97023dd3b8Sopenharmony_ci if (actual instanceof Error && /DecimalError/.test(actual.message)) { 98023dd3b8Sopenharmony_ci ++passed; 99023dd3b8Sopenharmony_ci } else { 100023dd3b8Sopenharmony_ci write( 101023dd3b8Sopenharmony_ci '\n Test number ' + testNumber + ' failed: assertException' + 102023dd3b8Sopenharmony_ci '\n Expected: ' + msg + ' to raise a DecimalError.' + 103023dd3b8Sopenharmony_ci '\n Actual: ' + (actual || 'no exception') 104023dd3b8Sopenharmony_ci ); 105023dd3b8Sopenharmony_ci } 106023dd3b8Sopenharmony_ci }; 107023dd3b8Sopenharmony_ci 108023dd3b8Sopenharmony_ci return T; 109023dd3b8Sopenharmony_ci})(); 110