### Question:
ASTFunctionCall extends EvaluatedNode { @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; ASTFunctionCall that = (ASTFunctionCall) o; return functionName.equals(that.functionName); } ASTFunctionCall(int id, String functionName);  ASTFunctionCall(int id, String functionName, Object... nodes); @Override int getType(); boolean needParenthesis(); String getFunctionName(); @Override boolean equals(Object o); @Override int hashCode(); @Override void appendAsString(Appendable out); @Override void appendAsEJBQL(List<Object> parameterAccumulator, Appendable out, String rootId);  }### Answer:
@Test public void testEquals() throws Exception { ASTCount count1 = new ASTCount(); ASTCount count2 = new ASTCount(); ASTCount count3 = new ASTCount(new ASTDbPath("y")); ASTSum sum1 = new ASTSum(new ASTDbPath("x")); ASTSum sum2 = new ASTSum(new ASTDbPath("x")); ASTSum sum3 = new ASTSum(null); ASTSum sum4 = new ASTSum(new ASTDbPath("y")); assertEquals(count1, count2); assertEquals(sum1, sum2); assertNotEquals(count1, count3); assertNotEquals(count1, sum1); assertNotEquals(count3, sum4); assertNotEquals(sum1, sum3); assertNotEquals(sum1, sum4); assertNotEquals(sum3, sum4); }