/**
   * Tests to see if the sequentialMint method will print the desired prefix
   *
   * @param prefix A sequence of characters that appear in the beginning of PIDs
   * @param sansVowel Dictates whether or not vowels are allowed
   * @param tokenType An enum used to configure PIDS
   * @param rootLength Designates the length of the id's root
   * @param amount The number of PIDs to be created
   */
  @Test(dataProvider = "prefix")
  public void testSequentialMintPrefix(
      String prefix, boolean sansVowel, Token tokenType, int rootLength, int amount) {
    // store parameters in a setting object
    Setting setting = new Setting(prefix, tokenType, null, rootLength, sansVowel);
    IdGenerator generator = new AutoIdGenerator(prefix, tokenType, rootLength);
    Set<Pid> sequentialSet = generator.sequentialMint(amount);

    Pid prev = null;
    Iterator<Pid> iter = sequentialSet.iterator();
    while (iter.hasNext()) {
      // fail if the length does not match
      Pid current = iter.next();
      PID_TEST.testPrefix(current.getName(), setting);

      if (prev != null) {
        PID_TEST.testOrder(prev, current);
      }

      prev = current;
    }

    // test to see if the amount matches the size of the generated set
    Assert.assertEquals(sequentialSet.size(), amount);
  }
  /**
   * Tests sequentialMint to see if it will produce the correct length of Pids at an arbitrary
   * starting value.
   *
   * @param prefix A sequence of characters that appear in the beginning of PIDs
   * @param sansVowel Dictates whether or not vowels are allowed
   * @param tokenType An enum used to configure PIDS
   * @param rootLength Designates the length of the id's root
   * @param amount The number of PIDs to be created
   */
  @Test(dataProvider = "rootLength")
  public void testSequentialRootLengthWithStartingValue(
      String prefix, boolean sansVowel, Token tokenType, int rootLength, int amount) {

    // store parameters in a setting object
    Setting setting = new Setting(prefix, tokenType, null, rootLength, sansVowel);

    // create a new minter and create a set
    AutoIdGenerator generator = new AutoIdGenerator(prefix, tokenType, rootLength);
    int startingValue = amount / 2;
    Set<Pid> sequentialSet = generator.sequentialMint(amount, startingValue);

    int counter = 0;
    Pid prev = null;
    Iterator<Pid> iter = sequentialSet.iterator();
    while (iter.hasNext()) {
      // fail if the length does not match
      Pid current = iter.next();
      PID_TEST.testRootLength(current.getName(), setting);

      if (prev != null && counter != startingValue) {
        PID_TEST.testOrder(prev, current);
      }

      counter++;
      prev = current;
    }

    // test to see if the amount matches the size of the generated set
    Assert.assertEquals(sequentialSet.size(), amount);
  }
  /**
   * Tests AutoIdGenerator for the presence of vowels through the randomMint method
   *
   * @param prefix A sequence of characters that appear in the beginning of PIDs
   * @param sansVowel Dictates whether or not vowels are allowed
   * @param tokenType An enum used to configure PIDS
   * @param rootLength Designates the length of the id's root
   * @param amount The number of PIDs to be created
   */
  @Test(dataProvider = "sansVowel")
  public void testRandomMintSansVowels(
      String prefix, boolean sansVowel, Token tokenType, int rootLength, int amount) {
    // store parameters in a setting object
    Setting setting = new Setting(prefix, tokenType, null, rootLength, sansVowel);
    IdGenerator generator = new AutoIdGenerator(prefix, tokenType, rootLength);
    Set<Pid> randomSet = generator.randomMint(amount);

    for (Pid id : randomSet) {
      PID_TEST.testTokenType(id.getName(), setting);
    }
    // test to see if the amount matches the size of the generated set
    Assert.assertEquals(randomSet.size(), amount);
  }