forceOptionsToValidOptions tests
by joplomacedo
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
JavaScript
function getPrecisionFromNum(num) {
const decimalPart = ("" + num).split(".")[1];
return decimalPart ? decimalPart.length : 0;
}
function getPrecisionFromNumStr(numStr) {
const decimalPart = numStr.split(".")[1];
return decimalPart ? decimalPart.length : 0;
}
function toPrecision({num, precision}) {
const [naturalPart, decimalPart] = (''+num).split('.');
if ( decimalPart ) {
if ( precision === 0 ) {
return +naturalPart;
} else {
return +`${naturalPart}.${decimalPart.substr(0, precision)}`;
}
} else {
return num;
}
}
function forceNumToRespectUserOptions({
num,
options: {
min,
max,
precision
}
}) {
if (num > max) {
return max;
}
if (num < min) {
return min;
}
if (getPrecisionFromNum(num) > precision) {
return toPrecision({num, precision});
}
return num;
}
function multiplyText(text, times) {
let result = '';
for (let i = 0; i < times; i++) {
result += text;
}
return result;
}
function test(name, fn, tests) {
let title = `Testing: ${name}`;
let delimiter = multiplyText('#', title.length);
console.log(delimiter);
console.log('Test: ' + name);
tests.forEach((test, i) => {
const {
args,
expected
} = test;
const result = fn(...args);
const passed = _.isEqual(expected, result);
if (passed) {
console.log('passed: ', passed)
} else {
console.log(delimiter);
console.log('arguments: ', ...args);
console.log('result: ', result);
console.log('expected: ', expected);
console.error('passed: ', passed)
console.log(delimiter);
}
});
}
console.clear();
test('forceNumToRespectUserOptions', forceNumToRespectUserOptions, [
{
args: [{
num: 2.3,
options: {
min: 3,
max: 4,
precision: 1
}
}],
expected: 3
},
{
args: [{
num: 4.3,
options: {
min: 3,
max: 4.1,
...