All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mockit.internal.expectations.argumentMatching.NumericEqualityMatcher Maven / Gradle / Ivy

/*
 * Copyright (c) 2006 JMockit developers
 * This file is subject to the terms of the MIT license (see LICENSE.txt).
 */
package mockit.internal.expectations.argumentMatching;

import edu.umd.cs.findbugs.annotations.NonNull;
import edu.umd.cs.findbugs.annotations.Nullable;

/**
 * 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;
    }

    @Override
    @SuppressWarnings("FloatingPointEquality")
    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);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy