/* * test/13_drhtz-drhfz.js - drhtz and drhfz tests * * @licstart The following is the entire license notice for the * JavaScript code in this file. * * Copyright (C) 2017 Libiquity LLC * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * As additional permission under GNU GPL version 3 section 7, you * may distribute non-source (e.g. minimized or compacted) forms of * this program without the copy of the GNU GPL normally required by * section 4, provided you include this license notice and a URL * through which recipients can access the Corresponding Source. * * @licend The above is the entire license notice * for the JavaScript code in this file. */ var assert = require("assert"); require("../lib/decmath.js"); describe("drhtz() and drhfz()", function() { context("without tie-breaking", function() { var tests = [ /* a p r functions */ [ 23.1 , 0, "23." , drhtz, drhfz], [ 23.9 , 0, "24." , drhtz, drhfz], [ 2.31, 1, "2.3", drhtz, drhfz], [ 2.39, 1, "2.4", drhtz, drhfz], [-23.1 , 0, "-23." , drhtz, drhfz], [-23.9 , 0, "-24." , drhtz, drhfz], [ -2.31, 1, "-2.3", drhtz, drhfz], [ -2.39, 1, "-2.4", drhtz, drhfz], ]; tests.forEach(function(test) { test.slice(3).forEach(function(f) { var rule; switch (f) { case drhtz: rule = "toward zero"; break; case drhfz: rule = "away from zero"; break; } it("correctly round " + rule + " " + test[0] + " with precision " + test[1] + " to " + test[2], function() { assert.equal( f(test[0], test[1]), test[2]); }); }); }); }); context("with tie-breaking", function() { var tests = [ /* a p r functions */ [ 23.5 , 0, "23." , drhtz ], [ 23.5 , 0, "24." , drhfz], [ 2.35, 1, "2.3", drhtz ], [ 2.35, 1, "2.4", drhfz], [-23.5 , 0, "-23." , drhtz ], [-23.5 , 0, "-24." , drhfz], [ -2.35, 1, "-2.3", drhtz ], [ -2.35, 1, "-2.4", drhfz], ]; tests.forEach(function(test) { test.slice(3).forEach(function(f) { var rule; switch (f) { case drhtz: rule = "toward zero"; break; case drhfz: rule = "away from zero"; break; } it("correctly round " + rule + " " + test[0] + " with precision " + test[1] + " to " + test[2], function() { assert.equal( f(test[0], test[1]), test[2]); }); }); }); }); context("with invalid precision", function() { var tests = [ /* a p r functions */ [ 23 , 1, null, drhtz, drhfz], ]; tests.forEach(function(test) { test.slice(3).forEach(function(f) { var rule; switch (f) { case drhtz: rule = "toward zero"; break; case drhfz: rule = "away from zero"; break; } it("correctly round " + rule + " " + test[0] + " with precision " + test[1] + " to " + test[2], function() { assert.equal( f(test[0], test[1]), test[2]); }); }); }); }); });