generate method

  1. @override
List<T> generate()
override

Generates _n unique items from the generator _generator

Implementation

@override
List<T> generate() {
  final Set<T> uniqueItems = {};
  int tempSeed = _seed;
  int counter = 0;

  while (uniqueItems.length < _n) {
    _generator.seed(tempSeed % SeedGenerator.maxSeed);

    final item = _generator.generate();
    // Returns false if the item is already inside the set
    if (uniqueItems.add(item)) {
      counter = 0;
    } else {
      counter++;
    }

    if (counter == _maxTries) {
      throw GeneratorException(
        "Unique generator could not generate $_n unique values from generator ${_generator.runtimeType}, "
        "probably due to lack of unique values.",
      );
    }

    tempSeed = (tempSeed * tempSeed) + 1;
    counter += 1;
  }
  return uniqueItems.toList();
}