Source: math/intervalUtils.js

const intervalSigns = {
    "(": false,
    ")": false,
    "[": true,
    "]": true
};

/**
 * Функция, выполняющая парсинг математического выражения (интервала)
 * @param data
 * @return {{includeMin: *, includeMax: *, min: *, max: *}}
 */
function parseInterval(data) {
    let includeMin = intervalSigns[data[0]];
    let includeMax = intervalSigns[data[data.length - 1]];
    let values = data
        .substring(1, data.length - 1)
        .split("~").map((item) => {
            return Number(item)
        });
    return {
        includeMin: includeMin,
        includeMax: includeMax,
        min: values[0],
        max: values[1]
    }
}

/**
 * Функция, выполняющая проверку нахождения числа в интервале
 * @param params
 * @return {boolean}
 */
function inInterval(params) {
    let value = params.value;
    let min = params.min;
    let max = params.max;
    let includeMin = params.includeMin;
    let includeMax = params.includeMax;

    if (includeMin === true && includeMax === true) {
        return (value >= min && value <= max);
    }
    if (includeMin === true && includeMax === false) {
        return (value >= min && value < max);
    }
    if (includeMin === false && includeMax === true) {
        return (value > min && value <= max);
    }
    return (value > min && value < max);
}

function selectEdgeValue(interval) {
    if (interval.includeMin) return interval.min;
    if (interval.includeMax) return interval.max;
    return interval.min;
}

module.exports = {
    parseInterval: parseInterval,
    inInterval: inInterval,
    selectEdgeValue: selectEdgeValue
};