var count = (function floor(Decimal) { var start = +new Date(), log, error, passed = 0, total = 0; if (typeof window === 'undefined') { log = console.log; error = console.error; } else { log = function (str) { document.body.innerHTML += str.replace('\n', '
') }; error = function (str) { document.body.innerHTML += '
' + str.replace('\n', '
') + '
' }; } if (!Decimal && typeof require === 'function') Decimal = require('../decimal'); function assert(expected, actual) { total++; if (expected !== actual) { error('\n Test number: ' + total + ' failed'); error(' Expected: ' + expected); error(' Actual: ' + actual); //process.exit(); } else { passed++; //log('\n Expected and actual: ' + actual); } } function assertException(func, message) { var actual; total++; try { func(); } catch (e) { actual = e; } if (actual && actual.name == 'Decimal Error') { passed++; //log('\n Expected and actual: ' + actual); } else { error('\n Test number: ' + total + ' failed'); error('\n Expected: ' + message + ' to raise a Decimal Error.'); error(' Actual: ' + (actual || 'no exception')); //process.exit(); } } function T(expected, value, n) { assert(String(expected), new Decimal(String(value)).floor(n).toString()); } log('\n Testing floor...'); Decimal.config({ precision: 20, rounding: 4, toExpNeg: -9e15, toExpPos: 9e15, minE: -9e15, maxE: 9e15, errors: true }); T('-2075365', '-2075364.364286541923'); T('60593539780450631', '60593539780450631'); T('65937898671515', '65937898671515'); T('-39719494751819198566799', '-39719494751819198566798.578'); T('92627382695288166556', '92627382695288166556.8683774524284866028260448205069'); T('-881574', '-881574'); T('-3633239210', '-3633239209.654526163275621746013315304191073405508491056'); T('-23970335459820625362', '-23970335459820625362'); T('131869457416154038', '131869457416154038'); T('-2685', '-2685'); T('-4542227861', '-4542227860.9511298545226'); T('-834103872107533086', '-834103872107533086'); T('-1501493189970436', '-1501493189970435.74866616700317'); T('70591', '70591.2244675522123484658978887'); T('4446128540401735117', '4446128540401735117.435836700611264749985822486641350492901'); T('-597273', '-597273'); T('729117', '729117'); T('4803729546823170064608098091', '4803729546823170064608098091'); T('-6581532150677269472830', '-6581532150677269472829.38194951340848938896000325718062365494'); T('2949426983040959', '2949426983040959.8911208825380208568451907'); T('25166', '25166.125888418871654557352055849116604612621573251770362'); T('4560569286495', '4560569286495.98300685103599898554605198'); T('13', '13.763105480576616251068323541559825687'); T('9050999219306', '9050999219306.7846946346757664893036971777'); T('39900924', '39900924'); T('115911043168452445', '115911043168452445'); T('20962819101135667464733349383', '20962819101135667464733349383.8959025798517496777183'); T('4125789711001606948191', '4125789711001606948191.4707575965791242737346836'); T('-6935502', '-6935501.294727166142750626019282'); T('-2', '-1.518418076611593764852321765899'); T('-35416', '-35416'); T('6912783515683955988122411164548', '6912783515683955988122411164548.393'); T('657', '657.0353902852'); T('0', '0.00000000000000000000000017921822306362413915'); T('1483059355427939255846407887', '1483059355427939255846407887.011361095342689876'); T('7722', '7722'); T('0', '0.00000005'); T('8551283060956479352', '8551283060956479352.5707396'); T('0', '0.000000000000000000000000019904267'); T('321978830777554620127500539', '321978830777554620127500539.339278568133088682532238002577'); T('2073', '2073.532654804291079327244387978249477171032485250998396'); T('677676305591', '677676305591.2'); T('39181479479778357', '39181479479778357'); T('0', '0.00000000000000000087964700066672916651'); T('115083055948552475', '115083055948552475'); T('9105942082143427451223', '9105942082143427451223'); T('0', '0.00000000000000000000004'); T('0', '0.000250427721966583680168028884692015623739'); T('0', '0.000000000001585613219016120158734661293405081934'); T('0', '0.00009'); T('0', '0.000000090358252973411013592234'); T('276312604693909858427', '276312604693909858427.21965306055697011390137926559'); T('0', '0.0000252'); // ---------------------------------------------------------------- v8 start T(0, 0); T(0, '0.000'); T(-0, -0); T(Infinity, Infinity); T(-Infinity, -Infinity); T(NaN, NaN); T(0, 0.1); T(0, 0.49999999999999994); T(0, 0.5); T(0, 0.7); T(-1, -0.1); T(-1, -0.49999999999999994); T(-1, -0.5); T(-1, -0.7); T(1, 1); T(1, 1.1); T(1, 1.5); T(1, 1.7); T(-1, -1); T(-2, -1.1); T(-2, -1.5); T(-2, -1.7); Decimal.toExpNeg = -100; Decimal.toExpPos = 100; T(-1, -1e-308); T(-1e308, -1e308); T('2.1e+308', '2.1e308'); T(-1, '-1e-999'); T(0, '1e-999'); T(0, Number.MIN_VALUE); T(-1, -Number.MIN_VALUE); T(Number.MAX_VALUE, Number.MAX_VALUE); T(-Number.MAX_VALUE, -Number.MAX_VALUE); T(Infinity, Infinity); T(-Infinity, -Infinity); var two_30 = 1 << 30; T(two_30, two_30); T(two_30, two_30 + 0.1); T(two_30, two_30 + 0.5); T(two_30, two_30 + 0.7); T(two_30 - 1, two_30 - 1); T(two_30 - 1, two_30 - 1 + 0.1); T(two_30 - 1, two_30 - 1 + 0.5); T(two_30 - 1, two_30 - 1 + 0.7); T(-two_30, -two_30); T(-two_30, -two_30 + 0.1); T(-two_30, -two_30 + 0.5); T(-two_30, -two_30 + 0.7); T(-two_30 + 1, -two_30 + 1); T(-two_30 + 1, -two_30 + 1 + 0.1); T(-two_30 + 1, -two_30 + 1 + 0.5); T(-two_30 + 1, -two_30 + 1 + 0.7); var two_52 = (1 << 30) * (1 << 22); T(two_52, two_52); T(two_52, two_52 + 0.1); T(two_52, two_52 + 0.5); T(two_52 + 1, two_52 + 0.7); T(two_52 - 1, two_52 - 1); T(two_52 - 1, two_52 - 1 + 0.1); T(two_52 - 1, two_52 - 1 + 0.5); T(two_52 - 1, two_52 - 1 + 0.7); T(-two_52, -two_52); T(-two_52, -two_52 + 0.1); T(-two_52, -two_52 + 0.5); T(-two_52, -two_52 + 0.7); T(-two_52 + 1, -two_52 + 1); T(-two_52 + 1, -two_52 + 1 + 0.1); T(-two_52 + 1, -two_52 + 1 + 0.5); T(-two_52 + 1, -two_52 + 1 + 0.7); // ------------------------------------------------------------------ v8 end assertException(function () {new Decimal('0.6').floor(0)}, "floor(0)"); assertException(function () {new Decimal('1.6').floor(0)}, "floor(0)"); T('0.6', '0.66', 1); T('1', '1.66', 1); T('0.6666', '0.66666', 4); T('1.666', '1.66666', 4); T('0.6', '0.6', 1); T('1', '1.6', 1); T('0.66', '0.666', 2); T('1.6', '1.66', 2); T('0.66666', '0.666666', 5); T('1.6666', '1.66666', 5); assert('1', new Decimal('1.9999999999').floor().toString()); T('-1', '-1.0', 1); T('-2', '-1.00001', 1); T('-1.1', '-1.010203', 2); T('-3', '-2.999', 3); T('-0.0002', '-0.000123', 1); T('-0.000123', '-0.000123', 4); T('0.010203', '0.010203', 5); T('0.010203', '0.01020301', 6); T('-9.999', '-9.999', 6); T('-9.99991', '-9.999900000001', 6); T('0', '1e-9000000000000000'); T('-1', '-1e-9000000000000000'); T('0', '-9.9e-9000000000000001'); T('9.999999e+9000000000000000', '9.999999e+9000000000000000'); T('-9.999999e+9000000000000000', '-9.999999e+9000000000000000'); T('Infinity', '1E9000000000000001'); T('-Infinity', '-1e+9000000000000001'); T('5.5879983320336874473209567979e+287894365', '5.5879983320336874473209567979e+287894365'); T('-5.5879983320336874473209567979e+287894365', '-5.5879983320336874473209567979e+287894365'); log('\n ' + passed + ' of ' + total + ' tests passed in ' + (+new Date() - start) + ' ms \n'); return [passed, total]; })(this.Decimal); if (typeof module !== 'undefined' && module.exports) module.exports = count;