private TolerantNumericEquality(double tolerance) { checkTolerance(tolerance); this.tolerance = tolerance; }
@Override public void ofElementsIn(Iterable<? extends Number> expected) { checkTolerance(tolerance); double[] actual = checkNotNull(actual()); int expectedCount = 0; for (Number expectedValue : expected) { // if expected is longer than actual, we can skip the excess values: this case is covered // by the length check below if (expectedCount < actual.length && notEqualWithinTolerance( actual[expectedCount], expectedValue.doubleValue(), tolerance)) { return; } expectedCount++; } // By the method contract, the assertion passes if the lengths are different. This is so // that hasValuesNotWithin behaves like isNotEqualTo with a tolerance (and different // handling of non-finite values). if (actual.length == expectedCount) { fail("has values not within " + tolerance + " of", Iterables.toString(expected)); } } };
@Override public void ofElementsIn(Iterable<? extends Number> expected) { checkTolerance(tolerance); double[] actual = checkNotNull(actual()); List<Integer> mismatches = new ArrayList<>();
@Override public void of(double expected) { Double actual = actual(); checkNotNull( actual, "actual value cannot be null. tolerance=%s expected=%s", tolerance, expected); checkTolerance(tolerance); if (!notEqualWithinTolerance(actual, expected, tolerance)) { failWithoutActual( fact("expected not to be", doubleToString(expected)), butWas(), fact("within tolerance", doubleToString(tolerance))); } } };
@Override public void of(double expected) { Double actual = actual(); checkNotNull( actual, "actual value cannot be null. tolerance=%s expected=%s", tolerance, expected); checkTolerance(tolerance); if (!equalWithinTolerance(actual, expected, tolerance)) { failWithoutActual( fact("expected", doubleToString(expected)), butWas(), fact("outside tolerance", doubleToString(tolerance))); } } };