1if (typeof T === 'undefined') require('../setup'); 2 3T('config', function () { 4 5 var MAX_DIGITS = 1e9; 6 var EXP_LIMIT = 9e15; 7 8 var t = function (actual) { 9 T.assert(actual); 10 } 11 12 var tx = function (fn, msg) { 13 T.assertException(fn, msg); 14 } 15 16 /* 17 precision {number} [1, MAX_DIGITS] 18 rounding {number} [0, 8] 19 toExpNeg {number} [-EXP_LIMIT, 0] 20 toExpPos {number} [0, EXP_LIMIT] 21 maxE {number} [0, EXP_LIMIT] 22 minE {number} [-EXP_LIMIT, 0] 23 modulo {number} [0, 9] 24 crypto {boolean|number} {true, false, 1, 0} 25 */ 26 27 t(Decimal.config({}) === Decimal); 28 29 tx(function () {Decimal.config()}, "config()"); 30 tx(function () {Decimal.config(null)}, "config(null)"); 31 tx(function () {Decimal.config(undefined)}, "config(undefined)"); 32 tx(function () {Decimal.config(0)}, "config(0)"); 33 tx(function () {Decimal.config('')}, "config('')"); 34 tx(function () {Decimal.config('hi')}, "config('hi')"); 35 tx(function () {Decimal.config('123')}, "config('123')"); 36 37 Decimal.config({ 38 precision: 20, 39 rounding: 4, 40 toExpNeg: -7, 41 toExpPos: 21, 42 minE: -9e15, 43 maxE: 9e15, 44 crypto: false, 45 modulo: 1 46 }); 47 48 t(Decimal.precision === 20); 49 t(Decimal.rounding === 4); 50 t(Decimal.toExpNeg === -7); 51 t(Decimal.toExpPos === 21); 52 t(Decimal.minE === -9e15); 53 t(Decimal.maxE === 9e15); 54 t(Decimal.crypto === false); 55 t(Decimal.modulo === 1); 56 57 Decimal.config({ 58 precision: 40, 59 rounding : 4, 60 toExpNeg: -1000, 61 toExpPos: 1000, 62 minE: -1e9, 63 maxE: 1e9, 64 //crypto: true, // requires crypto object 65 modulo: 4 66 }); 67 68 t(Decimal.precision === 40); 69 t(Decimal.rounding === 4); 70 t(Decimal.toExpNeg === -1000); 71 t(Decimal.toExpPos === 1000); 72 t(Decimal.minE === -1e9); 73 t(Decimal.maxE === 1e9); 74 //t(Decimal.crypto === true); // requires crypto object 75 t(Decimal.modulo === 4); 76 77 Decimal.config({ 78 toExpNeg: -7, 79 toExpPos: 21, 80 minE: -324, 81 maxE: 308 82 }); 83 84 t(Decimal.toExpNeg === -7); 85 t(Decimal.toExpPos === 21); 86 t(Decimal.minE === -324); 87 t(Decimal.maxE === 308); 88 89 // precision 90 91 t = function (expected, obj) { 92 Decimal.config(obj); 93 T.assertEqual(expected, Decimal.precision); 94 } 95 96 t(1, {precision: 1}); 97 t(1, {precision: void 0}); 98 t(20, {precision: 20}); 99 t(300000,{precision: 300000}); 100 t(4e+8, {precision: 4e8}); 101 t(1e9, {precision: 1e9}); 102 t(MAX_DIGITS, {precision: MAX_DIGITS}); 103 104 tx(function () {Decimal.config({precision: 0})}, "precision: 0"); 105 tx(function () {Decimal.config({precision: MAX_DIGITS + 1})}, "precision: MAX_DIGITS + 1"); 106 tx(function () {Decimal.config({precision: MAX_DIGITS + 0.1})}, "precision: MAX_DIGITS + 0.1"); 107 tx(function () {Decimal.config({precision: '0'})}, "precision: '0'"); 108 tx(function () {Decimal.config({precision: '1'})}, "precision: '1'"); 109 tx(function () {Decimal.config({precision: '123456789'})}, "precision: '123456789'"); 110 tx(function () {Decimal.config({precision: -1})}, "precision: -1"); 111 tx(function () {Decimal.config({precision: 0.1})}, "precision: 0.1"); 112 tx(function () {Decimal.config({precision: 1.1})}, "precision: 1.1"); 113 tx(function () {Decimal.config({precision: -1.1})}, "precision: -1.1"); 114 tx(function () {Decimal.config({precision: 8.1})}, "precision: 8.1"); 115 tx(function () {Decimal.config({precision: 1e+9 + 1})}, "precision: 1e9 + 1"); 116 tx(function () {Decimal.config({precision: []})}, "precision: []"); 117 tx(function () {Decimal.config({precision: {}})}, "precision: {}"); 118 tx(function () {Decimal.config({precision: ''})}, "precision: ''"); 119 tx(function () {Decimal.config({precision: 'hi'})}, "precision: 'hi'"); 120 tx(function () {Decimal.config({precision: '1e+9'})}, "precision: '1e+9'"); 121 tx(function () {Decimal.config({precision: null})}, "precision: null"); 122 tx(function () {Decimal.config({precision: NaN})}, "precision: NaN"); 123 tx(function () {Decimal.config({precision: Infinity})}, "precision: Infinity"); 124 125 t(MAX_DIGITS, {precision: void 0}); 126 127 // rounding 128 129 t = function (expected, obj) { 130 Decimal.config(obj); 131 T.assertEqual(expected, Decimal.rounding); 132 } 133 134 t(4, {rounding: void 0}); 135 t(0, {rounding: 0}); 136 t(1, {rounding: 1}); 137 t(2, {rounding: 2}); 138 t(3, {rounding: 3}); 139 t(4, {rounding: 4}); 140 t(5, {rounding: 5}); 141 t(6, {rounding: 6}); 142 t(7, {rounding: 7}); 143 t(8, {rounding: 8}); 144 145 tx(function () {Decimal.config({rounding: -1})}, "rounding : -1"); 146 tx(function () {Decimal.config({rounding: 0.1})}, "rounding : 0.1"); 147 tx(function () {Decimal.config({rounding: 8.1})}, "rounding : 8.1"); 148 tx(function () {Decimal.config({rounding: 9})}, "rounding : 9"); 149 tx(function () {Decimal.config({rounding: '0'})}, "rounding: '0'"); 150 tx(function () {Decimal.config({rounding: '1'})}, "rounding: '1'"); 151 tx(function () {Decimal.config({rounding: '123456789'})}, "rounding: '123456789'"); 152 tx(function () {Decimal.config({rounding: 1.1})}, "rounding : 1.1"); 153 tx(function () {Decimal.config({rounding: -1.1})}, "rounding : -1.1"); 154 tx(function () {Decimal.config({rounding: 11})}, "rounding : 11"); 155 tx(function () {Decimal.config({rounding: []})}, "rounding : []"); 156 tx(function () {Decimal.config({rounding: {}})}, "rounding : {}"); 157 tx(function () {Decimal.config({rounding: ''})}, "rounding : ''"); 158 tx(function () {Decimal.config({rounding: 'hi'})}, "rounding : 'hi'"); 159 tx(function () {Decimal.config({rounding: null})}, "rounding : null"); 160 tx(function () {Decimal.config({rounding: NaN})}, "rounding : NaN"); 161 tx(function () {Decimal.config({rounding: Infinity})}, "rounding : Infinity"); 162 163 t(8, {rounding: void 0}); 164 165 // toExpNeg 166 167 t = function (expected, obj) { 168 Decimal.config(obj); 169 T.assertEqual(expected, Decimal.toExpNeg); 170 } 171 172 t(-7, {toExpNeg: void 0}); 173 t(0, {toExpNeg: 0}); 174 t(-1, {toExpNeg: -1}); 175 t(-999, {toExpNeg: -999}); 176 t(-5675367, {toExpNeg: -5675367}); 177 t(-98770170790791, {toExpNeg: -98770170790791}); 178 t(-EXP_LIMIT, {toExpNeg: -EXP_LIMIT}); 179 180 tx(function () {Decimal.config({toExpNeg: -EXP_LIMIT - 1})}, "-EXP_LIMIT - 1"); 181 tx(function () {Decimal.config({toExpNeg: '-7'})}, "toExpNeg: '-7'"); 182 tx(function () {Decimal.config({toExpNeg: -0.1})}, "toExpNeg: -0.1"); 183 tx(function () {Decimal.config({toExpNeg: 0.1})}, "toExpNeg: 0.1"); 184 tx(function () {Decimal.config({toExpNeg: 1})}, "toExpNeg: 1"); 185 tx(function () {Decimal.config({toExpNeg: -Infinity})}, "toExpNeg: -Infinity"); 186 tx(function () {Decimal.config({toExpNeg: NaN})}, "toExpNeg: NaN"); 187 tx(function () {Decimal.config({toExpNeg: null})}, "toExpNeg: null"); 188 tx(function () {Decimal.config({toExpNeg: {}})}, "toExpNeg: {}"); 189 190 t(-EXP_LIMIT, {toExpNeg: void 0}); 191 192 // toExpPos 193 194 t = function (expected, obj) { 195 Decimal.config(obj); 196 T.assertEqual(expected, Decimal.toExpPos); 197 } 198 199 t(21, {toExpPos: void 0}); 200 t(0, {toExpPos: 0}); 201 t(1, {toExpPos: 1}); 202 t(999, {toExpPos: 999}); 203 t(5675367, {toExpPos: 5675367}); 204 t(98770170790791, {toExpPos: 98770170790791}); 205 t(EXP_LIMIT, {toExpPos: EXP_LIMIT}); 206 207 tx(function () {Decimal.config({toExpPos: EXP_LIMIT + 1})}, "EXP_LIMIT + 1"); 208 tx(function () {Decimal.config({toExpPos: '21'})}, "toExpPos: '21'"); 209 tx(function () {Decimal.config({toExpPos: -0.1})}, "toExpPos: -0.1"); 210 tx(function () {Decimal.config({toExpPos: 0.1})}, "toExpPos: 0.1"); 211 tx(function () {Decimal.config({toExpPos: -1})}, "toExpPos: -1"); 212 tx(function () {Decimal.config({toExpPos: Infinity})}, "toExpPos: Infinity"); 213 tx(function () {Decimal.config({toExpPos: NaN})}, "toExpPos: NaN"); 214 tx(function () {Decimal.config({toExpPos: null})}, "toExpPos: null"); 215 tx(function () {Decimal.config({toExpPos: {}})}, "toExpPos: {}"); 216 217 t(EXP_LIMIT, {toExpPos: void 0}); 218 219 // maxE 220 221 t = function (expected, obj) { 222 Decimal.config(obj); 223 T.assertEqual(expected, Decimal.maxE); 224 } 225 226 t(308, {maxE: void 0}); 227 t(0, {maxE: 0}); 228 t(1, {maxE: 1}); 229 t(999, {maxE: 999}); 230 t(5675367, {maxE: 5675367}); 231 t(98770170790791, {maxE: 98770170790791}); 232 t(EXP_LIMIT, {maxE: EXP_LIMIT}); 233 234 tx(function () {Decimal.config({maxE: EXP_LIMIT + 1})}, "EXP_LIMIT + 1"); 235 tx(function () {Decimal.config({maxE: '308'})}, "maxE: '308'"); 236 tx(function () {Decimal.config({maxE: -0.1})}, "maxE: -0.1"); 237 tx(function () {Decimal.config({maxE: 0.1})}, "maxE: 0.1"); 238 tx(function () {Decimal.config({maxE: -1})}, "maxE: -1"); 239 tx(function () {Decimal.config({maxE: Infinity})}, "maxE: Infinity"); 240 tx(function () {Decimal.config({maxE: NaN})}, "maxE: NaN"); 241 tx(function () {Decimal.config({maxE: null})}, "maxE: null"); 242 tx(function () {Decimal.config({maxE: {}})}, "maxE: {}"); 243 244 t(EXP_LIMIT, {maxE: void 0}); 245 246 // minE 247 248 t = function (expected, obj) { 249 Decimal.config(obj); 250 T.assertEqual(expected, Decimal.minE); 251 } 252 253 t(-324, {minE: void 0}); 254 t(0, {minE: 0}); 255 t(-1, {minE: -1}); 256 t(-999, {minE: -999}); 257 t(-5675367, {minE: -5675367}); 258 t(-98770170790791, {minE: -98770170790791}); 259 t(-EXP_LIMIT, {minE: -EXP_LIMIT}); 260 261 tx(function () {Decimal.config({minE: -EXP_LIMIT - 1})}, "-EXP_LIMIT - 1"); 262 tx(function () {Decimal.config({minE: '-324'})}, "minE: '-324'"); 263 tx(function () {Decimal.config({minE: -0.1})}, "minE: -0.1"); 264 tx(function () {Decimal.config({minE: 0.1})}, "minE: 0.1"); 265 tx(function () {Decimal.config({minE: 1})}, "minE: 1"); 266 tx(function () {Decimal.config({minE: -Infinity})}, "minE: -Infinity"); 267 tx(function () {Decimal.config({minE: NaN})}, "minE: NaN"); 268 tx(function () {Decimal.config({minE: null})}, "minE: null"); 269 tx(function () {Decimal.config({minE: {}})}, "minE: {}"); 270 271 t(-EXP_LIMIT, {minE: void 0}); 272 273 // crypto 274 275 t = function (expected, obj) { 276 Decimal.config(obj); 277 T.assertEqual(expected, Decimal.crypto); 278 } 279 280 t(false, {crypto: void 0}); 281 t(false, {crypto: 0}); 282 //t(true, {crypto: 1}); // requires crypto object 283 t(false, {crypto: false}); 284 //t(true, {crypto: true}); // requires crypto object 285 286 tx(function () {Decimal.config({crypto: 'hiya'})}, "crypto: 'hiya'"); 287 tx(function () {Decimal.config({crypto: 'true'})}, "crypto: 'true'"); 288 tx(function () {Decimal.config({crypto: 'false'})}, "crypto: 'false'"); 289 tx(function () {Decimal.config({crypto: '0'})}, "crypto: '0'"); 290 tx(function () {Decimal.config({crypto: '1'})}, "crypto: '1'"); 291 tx(function () {Decimal.config({crypto: -1})}, "crypto: -1"); 292 tx(function () {Decimal.config({crypto: 0.1})}, "crypto: 0.1"); 293 tx(function () {Decimal.config({crypto: 1.1})}, "crypto: 1.1"); 294 tx(function () {Decimal.config({crypto: []})}, "crypto: []"); 295 tx(function () {Decimal.config({crypto: {}})}, "crypto: {}"); 296 tx(function () {Decimal.config({crypto: ''})}, "crypto: ''"); 297 tx(function () {Decimal.config({crypto: NaN})}, "crypto: NaN"); 298 tx(function () {Decimal.config({crypto: Infinity})}, "crypto: Infinity"); 299 300 T.assertEqual(false, Decimal.crypto); 301 302 // modulo 303 304 t = function (expected, obj) { 305 Decimal.config(obj); 306 T.assertEqual(expected, Decimal.modulo); 307 } 308 309 t(4, {modulo: void 0}); 310 t(0, {modulo: 0}); 311 t(1, {modulo: 1}); 312 t(2, {modulo: 2}); 313 t(3, {modulo: 3}); 314 t(4, {modulo: 4}); 315 t(5, {modulo: 5}); 316 t(6, {modulo: 6}); 317 t(7, {modulo: 7}); 318 t(8, {modulo: 8}); 319 t(9, {modulo: 9}); 320 321 tx(function () {Decimal.config({modulo: -1})}, "modulo: -1"); 322 tx(function () {Decimal.config({modulo: 0.1})}, "modulo: 0.1"); 323 tx(function () {Decimal.config({modulo: 9.1})}, "modulo: 9.1"); 324 tx(function () {Decimal.config({modulo: '0'})}, "modulo: '0'"); 325 tx(function () {Decimal.config({modulo: '1'})}, "modulo: '1'"); 326 tx(function () {Decimal.config({modulo: 1.1})}, "modulo: 1.1"); 327 tx(function () {Decimal.config({modulo: -1.1})}, "modulo: -1.1"); 328 tx(function () {Decimal.config({modulo: 10})}, "modulo: 10"); 329 tx(function () {Decimal.config({modulo: -11})}, "modulo: -11"); 330 tx(function () {Decimal.config({modulo: []})}, "modulo: []"); 331 tx(function () {Decimal.config({modulo: {}})}, "modulo: {}"); 332 tx(function () {Decimal.config({modulo: ''})}, "modulo: ''"); 333 tx(function () {Decimal.config({modulo: ' '})}, "modulo: ' '"); 334 tx(function () {Decimal.config({modulo: 'hi'})}, "modulo: 'hi'"); 335 tx(function () {Decimal.config({modulo: null})}, "modulo: null"); 336 tx(function () {Decimal.config({modulo: NaN})}, "modulo: NaN"); 337 tx(function () {Decimal.config({modulo: Infinity})}, "modulo: Infinity"); 338 339 t(9, {modulo: void 0}); 340 341 // defaults 342 343 t = function (actual) { 344 T.assert(actual); 345 } 346 347 Decimal.config({ 348 precision: 100, 349 rounding: 2, 350 toExpNeg: -100, 351 toExpPos: 200, 352 }); 353 354 t(Decimal.precision === 100); 355 356 Decimal.config({ defaults: true }); 357 358 t(Decimal.precision === 20); 359 t(Decimal.rounding === 4); 360 t(Decimal.toExpNeg === -7); 361 t(Decimal.toExpPos === 21); 362 t(Decimal.defaults === undefined); 363 364 Decimal.rounding = 3; 365 366 Decimal.config({ precision: 50, defaults: true }); 367 368 t(Decimal.precision === 50); 369 t(Decimal.rounding === 4); 370 371 // Decimal.set is an alias for Decimal.config 372 T.assertEqual(Decimal.set, Decimal.config); 373}); 374