public static boolean canDrop(
      FilterPredicate pred, List<ColumnChunkMetaData> columns, DictionaryPageReadStore dictionaries) {
    Objects.requireNonNull(pred, "pred cannnot be null");
    Objects.requireNonNull(columns, "columns cannnot be null");
    return pred.accept(new DictionaryFilter(columns, dictionaries));
  }
@Test
  public void testInInt96() throws Exception {
    // INT96 ordering is undefined => no filtering shall be done
    BinaryColumn b = binaryColumn("int96_field");

    Set<Binary> set1 = new HashSet<>();
    set1.add(toBinary("-2", 12));
    set1.add(toBinary("-0", 12));
    set1.add(toBinary("12345", 12));
    FilterPredicate predIn1 = in(b, set1);
    FilterPredicate predNotIn1 = notIn(b, set1);
    assertFalse("Should not drop block for in (-2, -0, 12345)", canDrop(predIn1, ccmd, dictionaries));
    assertFalse("Should not drop block for notIn (-2, -0, 12345)", canDrop(predNotIn1, ccmd, dictionaries));

    Set<Binary> set2 = new HashSet<>();
    set2.add(toBinary("-2", 17));
    set2.add(toBinary("12345", 17));
    set2.add(toBinary("-789", 17));
    FilterPredicate predIn2 = in(b, set2);
    FilterPredicate predNotIn2 = notIn(b, set2);
    assertFalse("Should not drop block for in (-2, 12345, -789)", canDrop(predIn2, ccmd, dictionaries));
    assertFalse("Should not drop block for notIn (-2, 12345, -789)", canDrop(predNotIn2, ccmd, dictionaries));

    Set<Binary> set3 = new HashSet<>();
    set3.add(null);
    FilterPredicate predIn3 = in(b, set3);
    FilterPredicate predNotIn3 = notIn(b, set3);
    assertFalse("Should not drop block for null", canDrop(predIn3, ccmd, dictionaries));
    assertFalse("Should not drop block for null", canDrop(predNotIn3, ccmd, dictionaries));
  }