mod.mjs


const getMod = ZERO => {
  return (dividend, divisor) => {
    if ((dividend < ZERO) ^ (divisor < ZERO)) {
      const res = -dividend % divisor;
      return res === ZERO ? ZERO : divisor - res;
    }
    return dividend % divisor;
  };
};

/**
 * Python like modulo implementation.
 * It behaves different than JavaScript %
 * with negative values
 * @method
 * @param {Number} Dividend
 * @param {Number} Divisor
 * @return {Number} Modulus
 */
export const mod = getMod(0);

/**
 * Python like modulo implementation.
 * It behaves different than JavaScript %
 * with negative values
 * @method
 * @param {BigInt} Dividend
 * @param {BigInt} Divisor
 * @return {BigInt} Modulus
 */
export const modBI = getMod(0n);