/** Test int to type. */
  @Test(dataProvider = "persistentSearchChangeTypeData")
  public void checkIntToTypeTest(Map<Integer, String> exceptedValues) throws Exception {
    Set<Integer> keys = exceptedValues.keySet();

    Set<PersistentSearchChangeType> expectedTypes = new HashSet<>(4);

    for (int i = 1; i <= 15; i++) {
      expectedTypes.clear();
      for (int key : keys) {
        if ((i & key) != 0) {
          expectedTypes.add(PersistentSearchChangeType.valueOf(key));
        }
      }
      Set<PersistentSearchChangeType> returnTypes = PersistentSearchChangeType.intToTypes(i);
      assertEquals(expectedTypes.size(), returnTypes.size());
      for (PersistentSearchChangeType type : expectedTypes) {
        assertTrue(returnTypes.contains(type));
      }
    }

    // We should have an exception
    try {
      PersistentSearchChangeType.intToTypes(0);
      fail();
    } catch (LDAPException expected) {
      assertEquals(
          expected.getMessage(),
          "The provided integer value indicated that there were no persistent search change types, which is not allowed");
    }

    // We should have an exception
    int i = 16;
    try {
      PersistentSearchChangeType.intToTypes(i);
      fail();
    } catch (LDAPException expected) {
      assertEquals(
          expected.getMessage(),
          "The provided integer value "
              + i
              + " was outside the range of acceptable values for an encoded change type set");
    }
  }
 /** Test invalid int values. */
 @Test(dataProvider = "persistentSearchChangeTypeData")
 public void checkInvalidIntTest(Map<Integer, String> exceptedValues) throws Exception {
   Set<Integer> keys = exceptedValues.keySet();
   for (int i = -10; i < 10; i++) {
     if (keys.contains(i)) {
       continue;
     }
     try {
       PersistentSearchChangeType.valueOf(i);
       fail();
     } catch (LDAPException e) {
       assertThat(e.getMessage())
           .contains(
               "The provided integer value "
                   + i
                   + " does not correspond to any persistent search change type");
     }
   }
 }