Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I use Hamcrest to check if each element in an array of doubles is "close" to each element in another array?

I would like to compare two arrays of doubles. Using vanilla JUnit, I can do:

double[] a = new double[]{1.0, 2.0, 3.0};
double[] b = new double[]{1.0, 2.0, 3.0};
assertEquals(a, b, 1e-10);

I would like to know how to do this using Hamcrest, preferably without creating custom Matchers (if possible). Something akin to using the "close" matcher for each element in an array.

like image 629
rhaertel80 Avatar asked May 16 '12 17:05

rhaertel80


1 Answers

If you change a to a Double[] then you can do assertThat(a, arrayCloseTo(b, .2)); with this helper method:

public static Matcher<Double[]> arrayCloseTo(double[] array, double error) {
    List<Matcher<? super Double>> matchers = new ArrayList<Matcher<? super Double>>();
    for (double d : array)
        matchers.add(closeTo(d, error));
    return arrayContaining(matchers);
}

You can do it with a primitive array as well, but you will need a custom matcher for that.

like image 167
Garrett Hall Avatar answered Sep 20 '22 08:09

Garrett Hall