@Test
  public void testTextMultiValuedNoDV() {

    SchemaField field = new SchemaField("field", new StrField(), MULTIVALUED, null);

    // default is FC, can't use FCS for multivalued fields, UIF rewrites to FC for mincount = 0

    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 0));
    assertEquals(
        SimpleFacets.FacetMethod.ENUM,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 0));
    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 1));
    assertEquals(
        SimpleFacets.FacetMethod.ENUM,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 1));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 1));
  }
  @Test
  public void testNumericSingleValuedDV() {

    SchemaField field = new SchemaField("field", new TrieIntField(), DOC_VALUES, null);

    // default is FCS, can't use ENUM due to trie-field terms, FC rewrites to FCS for efficiency

    assertEquals(SimpleFacets.FacetMethod.FCS, SimpleFacets.selectFacetMethod(field, null, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 0));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 0));
    assertEquals(SimpleFacets.FacetMethod.FCS, SimpleFacets.selectFacetMethod(field, null, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 1));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 1));
  }
  @Test
  public void testTextSingleValuedNoDV() {

    SchemaField field = new SchemaField("field", new StrField(), 0, null);

    // default is FC, UIF rewrites to FCS for mincount = 0
    // TODO should it rewrite to FC instead?

    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 0));
    assertEquals(
        SimpleFacets.FacetMethod.ENUM,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 0));
    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 1));
    assertEquals(
        SimpleFacets.FacetMethod.ENUM,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 1));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 1));
  }
  @Test
  public void testTextMultiValuedDV() {

    SchemaField field = new SchemaField("field", new StrField(), DOC_VALUES ^ MULTIVALUED, null);

    // default is FC, can't use FCS because of multivalues

    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 0));
    assertEquals(
        SimpleFacets.FacetMethod.ENUM,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 0));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 0));
    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 1));
    assertEquals(
        SimpleFacets.FacetMethod.ENUM,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 1));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 1));
  }
  @Test
  public void testTextSingleValuedDV() {

    SchemaField field = new SchemaField("field", new StrField(), DOC_VALUES, null);

    // default is FC, otherwise just uses the passed-in method

    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 0));
    assertEquals(
        SimpleFacets.FacetMethod.ENUM,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 0));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 0));
    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 1));
    assertEquals(
        SimpleFacets.FacetMethod.ENUM,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 1));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FCS,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 1));
  }
  @Test
  public void testNumericMultiValuedNoDV() {

    SchemaField field = new SchemaField("field", new TrieIntField(), MULTIVALUED, null);

    // only works with FC for mincount = 0, UIF for count > 1 is fine

    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 0));
    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 1));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 1));
  }
  @Test
  public void testBooleanDefaults() {

    // BoolField defaults to ENUM

    SchemaField field = new SchemaField("field", new BoolField(), 0, null);
    assertEquals(SimpleFacets.FacetMethod.ENUM, SimpleFacets.selectFacetMethod(field, null, 0));
    assertEquals(SimpleFacets.FacetMethod.ENUM, SimpleFacets.selectFacetMethod(field, null, 1));
  }
  @Test
  public void testNumericMultiValuedDV() {

    SchemaField field =
        new SchemaField("field", new TrieIntField(), DOC_VALUES ^ MULTIVALUED, null);

    // default is FC, can't use ENUM due to trie-field terms, can't use FCS because of multivalues

    // default value is FC
    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 0));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 0));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 0));
    assertEquals(SimpleFacets.FacetMethod.FC, SimpleFacets.selectFacetMethod(field, null, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.ENUM, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FCS, 1));
    assertEquals(
        SimpleFacets.FacetMethod.UIF,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.UIF, 1));
    assertEquals(
        SimpleFacets.FacetMethod.FC,
        SimpleFacets.selectFacetMethod(field, SimpleFacets.FacetMethod.FC, 1));
  }