public static Expression generateFilterExpression(SearchArgument sarg) {
    return translate(sarg.getExpression(), sarg.getLeaves());
  }
@Test
  public void testNotEqualsOperand() {
    SearchArgument.Builder builder = SearchArgumentFactory.newBuilder();
    SearchArgument arg =
        builder.startNot().equals("salary", PredicateLeaf.Type.LONG, 3000L).end().build();

    Not expected = (Not) Expressions.not(Expressions.equal("salary", 3000L));
    Not actual = (Not) HiveIcebergFilterFactory.generateFilterExpression(arg);

    UnboundPredicate childExpressionActual = (UnboundPredicate) actual.child();
    UnboundPredicate childExpressionExpected = Expressions.equal("salary", 3000L);

    assertThat(expected.op()).isEqualTo(actual.op());
    assertThat(expected.child().op()).isEqualTo(actual.child().op());
    assertThat(childExpressionExpected.ref().name()).isEqualTo(childExpressionActual.ref().name());
    assertThat(childExpressionExpected.literal()).isEqualTo(childExpressionActual.literal());
  }