2012-05-16 14 views
11

Me gustaría comparar dos matrices de dobles. El uso de JUnit vainilla, que puedo hacer:¿Cómo puedo usar Hamcrest para verificar si cada elemento en una matriz de dobles está "cerca" de cada elemento en otra matriz?

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

Me gustaría saber cómo hacer esto utilizando Hamcrest, preferiblemente sin crear comparadores personalizados (si es posible). Algo similar a usar el matcher "cercano" para cada elemento en una matriz.

Respuesta

9

Si cambia a una aDouble[] entonces puede hacer assertThat(a, arrayCloseTo(b, .2)); con este método de ayuda:

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

Usted puede hacerlo con una matriz primitiva también, pero se necesita un matcher personalizado para eso.

Cuestiones relacionadas