1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5
6package org.mockito.internal.matchers;
7
8import org.hamcrest.Description;
9import org.mockito.ArgumentMatcher;
10
11import java.io.Serializable;
12
13
14public class EqualsWithDelta extends ArgumentMatcher<Number> implements Serializable {
15    private static final long serialVersionUID = 5066980489920383664L;
16
17    private final Number wanted;
18
19    private final Number delta;
20
21    public EqualsWithDelta(Number value, Number delta) {
22        this.wanted = value;
23        this.delta = delta;
24    }
25
26    public boolean matches(Object actual) {
27        Number actualNumber = (Number) actual;
28        if (wanted == null ^ actual == null) {
29            return false;
30        }
31
32        if (wanted == null && actual == null) {
33            return true;
34        }
35
36        return wanted.doubleValue() - delta.doubleValue() <= actualNumber.doubleValue()
37                && actualNumber.doubleValue() <= wanted.doubleValue()
38                        + delta.doubleValue();
39    }
40
41    public void describeTo(Description description) {
42        description.appendText("eq(" + wanted + ", " + delta + ")");
43    }
44}
45