Regra { @Override public final int hashCode() { return variavel.hashCode(); } Regra(final String resultado,
                 final String detalhes,
                 final float maximo,
                 final float minimo); final String getDescricao(); final float getValorMaximo(); final float getValorMinimo(); final String getVariavel(); final List<String> getDependeDe(); final void setDependeDe(final List<String> dependencias); @Override final boolean equals(final Object outro); @Override final int hashCode(); final float ajustaLimites(final float valor); void preparacao(final Parser parser); abstract Valor avalie(List<Avaliavel> avaliaveis,
                                 Map<String, Valor> contexto);  }
@Test public void igualdadeEntreRegras() { RegraParaTeste r1 = new RegraParaTeste("v", "d", 1, 0); RegraParaTeste r2 = new RegraParaTeste("v", "x", 6, 5); RegraParaTeste r3 = new RegraParaTeste("u", "d", 1, 0); assertEquals(r1, r1); assertNotEquals(r1, "impossivel igualdade"); assertEquals(r1, r2); assertEquals(r1.hashCode(), r2.hashCode()); assertNotEquals(r1, r3); assertNotEquals(r2, r3); }