@SuppressWarnings("unchecked")
    public void replaceAllInt(final IntObjectToObjectFunction<? super V, ? extends V> function)
    {
        requireNonNull(function);
        final int[] keys = this.keys;
        final Object[] values = this.values;
        @DoNotSub final int length = values.length;
        @DoNotSub int remaining = size;

        for (@DoNotSub int index = 0; remaining > 0 && index < length; index++)
        {
            final Object oldValue = values[index];
            if (null != oldValue)
            {
                final V newValue = function.apply(keys[index], (V)oldValue);
                requireNonNull(newValue, "null values are not supported");
                values[index] = newValue;
                --remaining;
            }
        }
    }
@Test
    void replaceAllIntThrowsNullPointerExceptionIfFunctionIsNull()
    {
        assertThrowsExactly(NullPointerException.class, () -> cache.replaceAllInt(null));
    }