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