Home Reference Source Test

src/Predicate/index.js

import * as PcLib from '../Predicate-Combinator';

/**
 * @desc Saves number1 and returns predicate function that will be checking
 * if number2 is less then number1.
 * @param {number} number1 First number.
 * @return {Function} Predicate Function.
 */
export function lt(number1) {
  return number2 => number2 < number1;
};

/**
 * @desc Saves number1 and returns predicate function that will be checking
 * if number2 is greater then number1.
 * @param {number} number1 First number.
 * @return {Function} Predicate Function.
 */
export function gt(number1) {
  return number2 => number2 > number1;
};

/**
 * @desc Saves number1, number2 and returns predicate function that will be checking
 * if future passed number is in range of number1 and number2.
 * @param {number} number1 Min range number.
 * @param {number} number2 Max range number.
 * @return {Function} Predicate Function.
 */
export function range(number1, number2) {
  return number => PcLib.and(
    gt(number1), lt(number2))(number);
};

/**
 * @desc Saves number1 and returns predicate function that will be checking
 * if number2 is less then or equal to number1.
 * @param {number} number1 First number.
 * @return {Function} Predicate Function.
 */
export function lte(number1) {
  return number2 => number2 <= number1;
};

/**
 * @desc Saves number1 and returns predicate function that will be checking
 * if number2 is greater then or equal to number1.
 * @param {number} number1 First number.
 * @return {Function} Predicate Function.
 */
export function gte(number1) {
  return number2 => number2 >= number1;
};

/**
 * @desc Saves number1, number2 and returns predicate function that will be checking
 * if future passed number is in range of number1 and number2 or equal to number1/number2.
 * @param {number} number1 Min range number.
 * @param {number} number2 Max range number.
 * @return {Function} Predicate Function.
 */
export function rangeEqual(number1, number2) {
  return number => PcLib.and(
    gte(number1), lte(number2))(number);
};

/**
 * @desc Checks if two elements are the same
 * @example
 * eq(1)(1) // true
 * eq(1)(2) // false
 *
 * eq('hello')('hello') // true
 * eq('hello')('hello2') // false
 *
 * eq({ greeting: 'hello' })({ greeting: 'hello' }) // false
 *
 * @param {T} elem1 Element which will be compared with other.
 * @returns {Function} Function which take second element for comparation.
 */
export function eq(elem1) {
  return elem2 => elem1 === elem2;
}

/**
 * @desc Checks if two elements are not the same.
 * @example
 * eq(1)(1) // false
 * eq(1)(2) // true
 *
 * eq('hello')('hello') // false
 * eq('hello')('hello2') // true
 *
 * eq({ greeting: 'hello' })({ greeting: 'hello' }) // true
 *
 * @param {T} elem1 Element which will be compared with other.
 * @returns {Function} Function which take second element for comparation.
 */
export function notEq(elem1) {
  return elem2 => elem1 !== elem2;
}