function assert_between_exclusive(actual, lower, upper, description)
    {
        /*
         * Test if a primitive number (or bigint) is between two others
         */
        assert(typeof lower === typeof upper,
               "assert_between_exclusive", 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_exclusive", description,
               "expected a number but got a ${type_actual}",
               {type_actual:typeof actual});

        assert(typeof actual === typeof lower,
               "assert_between_exclusive", 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_exclusive", description,
               "expected a number greater than ${lower} " +
               "and less than ${upper} but got ${actual}",
               {lower:lower, upper:upper, actual:actual});
    }
Assert that ``actual`` is a number greater than ``lower`` and less
than ``upper`` but not equal to either.

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