Как я могу использовать Hamcrest, чтобы проверить, близок ли каждый элемент в массиве двойников к каждому элементу в другом массиве?

Я хотел бы сравнить два массива двойников. Используя ванильный JUnit, я могу сделать:

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);

Я хотел бы знать, как это сделать с помощью Hamcrest, желательно без создания пользовательских Matchers (если это возможно). Что-то похожее на использование "близкого" сопоставления для каждого элемента в массиве.


person rhaertel80    schedule 16.05.2012    source источник


Ответы (1)


Если вы измените a на Double[], вы можете сделать assertThat(a, arrayCloseTo(b, .2)); с помощью этого вспомогательного метода:

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);
}

Вы также можете сделать это с примитивным массивом, но для этого вам понадобится специальный сопоставитель.

person Garrett Hall    schedule 16.05.2012