function assert_between_inclusive(actual, lower, upper, description)
    {
        /*
         * Test if a primitive number (or bigint) is between to two others or equal to either of them
         */
        assert(typeof lower === typeof upper,
               "assert_between_inclusive", description,
               "expected lower (${type_lower}) and upper (${type_upper}) types to match (test error)",
               {type_lower:typeof lower, type_upper:typeof upper});

        assert(typeof actual === "number" || typeof actual === "bigint",
               "assert_between_inclusive", description,
               "expected a number but got a ${type_actual}",
               {type_actual:typeof actual});

        assert(typeof actual === typeof lower,
               "assert_between_inclusive", description,
               "expected a ${type_lower} but got a ${type_actual}",
               {type_lower:typeof lower, type_actual:typeof actual});

        assert(actual >= lower && actual <= upper,
               "assert_between_inclusive", description,
               "expected a number greater than or equal to ${lower} " +
               "and less than or equal to ${upper} but got ${actual}",
               {lower:lower, upper:upper, actual:actual});
    }
Assert that ``actual`` is a number greater than or equal to ``lower`` and less
than or equal to ``upper``.

@param {number|bigint} actual - Test value.
@param {number|bigint} lower - Value that ``actual`` must be greater than or equal to.
@param {number|bigint} upper - Value that ``actual`` must be less than or equal to.
@param {string} [description] - Description of the condition being tested.