mockit.internal.expectations.argumentMatching.NumericEqualityMatcher Maven / Gradle / Ivy
/*
* Copyright (c) 2006 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.internal.expectations.argumentMatching;
import javax.annotation.*;
/**
* Matches a decimal argument against another within a given margin of error.
*/
public final class NumericEqualityMatcher implements ArgumentMatcher
{
private final double value;
private final double delta;
public NumericEqualityMatcher(double value, double delta)
{
this.value = value;
this.delta = delta;
}
@SuppressWarnings("FloatingPointEquality")
@Override
public boolean same(@Nonnull NumericEqualityMatcher other) { return value == other.value && delta == other.delta; }
@Override @SuppressWarnings("ParameterNameDiffersFromOverriddenParameter")
public boolean matches(@Nullable Object decimalValue)
{
return decimalValue instanceof Number && actualDelta((Number) decimalValue) <= delta;
}
private double actualDelta(@Nonnull Number decimalValue)
{
return Math.abs(decimalValue.doubleValue() - value);
}
@Override
public void writeMismatchPhrase(@Nonnull ArgumentMismatch argumentMismatch)
{
argumentMismatch.append("a numeric value within ").append(delta).append(" of ").append(value);
}
}