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 testNotEqBinary() throws Exception {
    BinaryColumn sharp = binaryColumn("single_value_field");
    BinaryColumn sharpAndNull = binaryColumn("optional_single_value_field");
    BinaryColumn b = binaryColumn("binary_field");

    assertTrue(
        "Should drop block with only the excluded value",
        canDrop(notEq(sharp, Binary.fromString("sharp")), ccmd, dictionaries));

    assertFalse(
        "Should not drop block with any other value",
        canDrop(notEq(sharp, Binary.fromString("applause")), ccmd, dictionaries));

    assertFalse(
        "Should not drop block with only the excluded value and null",
        canDrop(notEq(sharpAndNull, Binary.fromString("sharp")), ccmd, dictionaries));

    assertFalse(
        "Should not drop block with any other value",
        canDrop(notEq(sharpAndNull, Binary.fromString("applause")), ccmd, dictionaries));

    assertFalse(
        "Should not drop block with a known value",
        canDrop(notEq(b, Binary.fromString("x")), ccmd, dictionaries));

    assertFalse(
        "Should not drop block with a known value",
        canDrop(notEq(b, Binary.fromString("B")), ccmd, dictionaries));

    assertFalse("Should not drop block for null", canDrop(notEq(b, null), ccmd, dictionaries));
  }