@Test
public void testFilter() {

  assertThat(FormatOptions.getDefault().filter(ALL_FLAGS, true, true)).isDefault();
  FormatOptions options = parse("+- #0,123.456", true);
  assertThat(options.filter(0, false, false)).isDefault();
  assertThat(options.filter(ALL_FLAGS, true, true)).isSameInstanceAs(options);
  int flags = FLAG_LEFT_ALIGN | FLAG_SHOW_ALT_FORM | FLAG_SHOW_GROUPING | FLAG_SHOW_LEADING_ZEROS;
  FormatOptions filtered = options.filter(flags, true, false);
  assertThat(filtered).shouldLeftAlign();
  assertThat(filtered).shouldShowAltForm();
  assertThat(filtered).shouldShowGrouping();
  assertThat(filtered).shouldShowLeadingZeros();
  assertThat(filtered).shouldntPrefixSpaceForPositiveValues();
  assertThat(filtered).shouldntPrefixPlusForPositiveValues();
  assertThat(filtered).hasWidth(123);
  assertThat(filtered).hasPrecision(UNSET);
  assertThat(filtered).shouldntUpperCase();
  // Flags incompatible with the first set.
  int otherFlags = FLAG_PREFIX_PLUS_FOR_POSITIVE_VALUES
      | FLAG_PREFIX_SPACE_FOR_POSITIVE_VALUES
      | FLAG_UPPER_CASE;
  filtered = options.filter(otherFlags, false, true);
  assertThat(filtered).shouldntLeftAlign();
  assertThat(filtered).shouldntShowAltForm();
  assertThat(filtered).shouldntShowGrouping();
  assertThat(filtered).shouldntShowLeadingZeros();
  assertThat(filtered).shouldPrefixSpaceForPositiveValues();
  assertThat(filtered).shouldPrefixPlusForPositiveValues();
  assertThat(filtered).hasWidth(UNSET);
  assertThat(filtered).hasPrecision(456);
  assertThat(filtered).shouldUpperCase();
}