1f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot/* Copyright (c) 2000-2006 hamcrest.org 2f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot */ 3f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotpackage org.hamcrest.number; 4f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot 5f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotimport org.hamcrest.Description; 6f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotimport org.hamcrest.Matcher; 7f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotimport org.hamcrest.Factory; 8f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotimport org.hamcrest.TypeSafeMatcher; 9f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot 10f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot 11f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot/** 12f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot * Is the value a number equal to a value within some range of 13f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot * acceptable error? 14f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot */ 15f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabotpublic class IsCloseTo extends TypeSafeMatcher<Double> { 16f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot private final double error; 17f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot private final double value; 18f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot 19f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot public IsCloseTo(double value, double error) { 20f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot this.error = error; 21f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot this.value = value; 22f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot } 23f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot 24f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot public boolean matchesSafely(Double item) { 25f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot return Math.abs((item - value)) <= error; 26f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot } 27f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot 28f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot public void describeTo(Description description) { 29f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot description.appendText("a numeric value within ") 30f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot .appendValue(error) 31f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot .appendText(" of ") 32f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot .appendValue(value); 33f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot } 34f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot 35f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot @Factory 36f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot public static Matcher<Double> closeTo(double operand, double error) { 37f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot return new IsCloseTo(operand, error); 38f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot } 39f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot 40f5e9a2415ec42c425c2bb17db46f2a9649992d80Brett Chabot} 41