// Path: src/main/java/io/usethesource/criterion/api/JmhValueFactory.java
// public interface JmhValueFactory {
// 
//   static RuntimeException FACTORY_NOT_YET_IMPLEMENTED_EXCEPTION =
//       new UnsupportedOperationException("Not yet implemented.");
// 
//   // default JmhSet set() {
//   // return setBuilder().done();
//   // }
// 
//   default JmhSet.Builder setBuilder() {
//     throw FACTORY_NOT_YET_IMPLEMENTED_EXCEPTION;
//   }
// 
//   // default JmhMap map() {
//   // return mapBuilder().done();
//   // }
// 
//   default JmhMap.Builder mapBuilder() {
//     throw FACTORY_NOT_YET_IMPLEMENTED_EXCEPTION;
//   }
// 
//   // default JmhSetMultimap setMulimap() {
//   // return setMultimapBuilder().done();
//   // }
// 
//   default JmhSetMultimap.Builder setMultimapBuilder() {
//     throw FACTORY_NOT_YET_IMPLEMENTED_EXCEPTION;
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/impl/immutable/guava/ImmutableGuavaValueFactory.java
// public class ImmutableGuavaValueFactory implements JmhValueFactory {
// 
//   public ImmutableGuavaValueFactory() {
//   }
// 
//   @Override
//   public JmhSet.Builder setBuilder() {
//     return new ImmutableGuavaSetBuilder();
//   }
// 
//   @Override
//   public JmhMap.Builder mapBuilder() {
//     return new ImmutableGuavaMapBuilder();
//   }
// 
//   @Override
//   public JmhSetMultimap.Builder setMultimapBuilder() {
//     return new ImmutableGuavaSetMultimapBuilder();
//   }
// 
//   @Override
//   public String toString() {
//     return "VF_GUAVA_IMMUTABLE";
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/impl/persistent/paguro/PaguroValueFactory.java
// public class PaguroValueFactory implements JmhValueFactory {
// 
//   @Override
//   public JmhSet.Builder setBuilder() {
//     return new PaguroSetBuilder();
//   }
// 
//   @Override
//   public JmhMap.Builder mapBuilder() {
//     return new PaguroMapBuilder();
//   }
// 
//   @Override
//   public String toString() {
//     return "VF_PAGURO";
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/impl/persistent/vavr/VavrValueFactory.java
// public class VavrValueFactory implements JmhValueFactory {
// 
//   @Override
//   public JmhSet.Builder setBuilder() {
//     return new VavrSetBuilder();
//   }
// 
//   @Override
//   public JmhMap.Builder mapBuilder() {
//     return new VavrMapBuilder();
//   }
// 
//   @Override
//   public String toString() {
//     return "VF_VAVR";
//   }
// 
// }


import java.util.Arrays;
import java.util.Random;
import io.usethesource.capsule.core.PersistentBidirectionalTrieSetMultimap;
import io.usethesource.capsule.core.PersistentTrieMap;
import io.usethesource.capsule.core.PersistentTrieSet;
import io.usethesource.capsule.core.PersistentTrieSetMultimap;
import io.usethesource.capsule.experimental.heterogeneous.TrieMap_5Bits_Heterogeneous_BleedingEdge;
import io.usethesource.capsule.experimental.memoized.TrieMap_5Bits_Memoized_LazyHashCode;
import io.usethesource.capsule.experimental.memoized.TrieSet_5Bits_Memoized_LazyHashCode;
import io.usethesource.capsule.experimental.multimap.TrieSetMultimap_HHAMT;
import io.usethesource.capsule.experimental.multimap.TrieSetMultimap_HHAMT_Specialized;
import io.usethesource.capsule.experimental.specialized.TrieMap_5Bits_Spec0To8;
import io.usethesource.capsule.experimental.specialized.TrieSet_5Bits_Spec0To8;
import io.usethesource.criterion.api.JmhValueFactory;
import io.usethesource.criterion.impl.immutable.guava.ImmutableGuavaValueFactory;
import io.usethesource.criterion.impl.persistent.paguro.PaguroValueFactory;
import io.usethesource.criterion.impl.persistent.vavr.VavrValueFactory;
    },
    VF_SCALA {
      @Override
      public JmhValueFactory getInstance() {
        return new io.usethesource.criterion.impl.persistent.scala.ScalaValueFactory();
      }
    },
    VF_CHAMP {
      @Override
      public JmhValueFactory getInstance() {
        return new io.usethesource.criterion.impl.persistent.champ.ChampValueFactory(
            PersistentTrieSet.class, PersistentTrieMap.class, PersistentTrieSetMultimap.class);
      }
    },
    VF_CHAMP_SPECIALIZED {
      @Override
      public JmhValueFactory getInstance() {
        return new io.usethesource.criterion.impl.persistent.champ.ChampValueFactory(
            TrieSet_5Bits_Spec0To8.class, TrieMap_5Bits_Spec0To8.class, null);
      }
    },
    VF_VAVR {
      @Override
      public JmhValueFactory getInstance() {
        return new VavrValueFactory();
      }
    },
    VF_PAGURO {
      @Override
      public JmhValueFactory getInstance() {
// Path: src/main/java/io/usethesource/criterion/api/JmhValueFactory.java
// public interface JmhValueFactory {
// 
//   static RuntimeException FACTORY_NOT_YET_IMPLEMENTED_EXCEPTION =
//       new UnsupportedOperationException("Not yet implemented.");
// 
//   // default JmhSet set() {
//   // return setBuilder().done();
//   // }
// 
//   default JmhSet.Builder setBuilder() {
//     throw FACTORY_NOT_YET_IMPLEMENTED_EXCEPTION;
//   }
// 
//   // default JmhMap map() {
//   // return mapBuilder().done();
//   // }
// 
//   default JmhMap.Builder mapBuilder() {
//     throw FACTORY_NOT_YET_IMPLEMENTED_EXCEPTION;
//   }
// 
//   // default JmhSetMultimap setMulimap() {
//   // return setMultimapBuilder().done();
//   // }
// 
//   default JmhSetMultimap.Builder setMultimapBuilder() {
//     throw FACTORY_NOT_YET_IMPLEMENTED_EXCEPTION;
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/impl/immutable/guava/ImmutableGuavaValueFactory.java
// public class ImmutableGuavaValueFactory implements JmhValueFactory {
// 
//   public ImmutableGuavaValueFactory() {
//   }
// 
//   @Override
//   public JmhSet.Builder setBuilder() {
//     return new ImmutableGuavaSetBuilder();
//   }
// 
//   @Override
//   public JmhMap.Builder mapBuilder() {
//     return new ImmutableGuavaMapBuilder();
//   }
// 
//   @Override
//   public JmhSetMultimap.Builder setMultimapBuilder() {
//     return new ImmutableGuavaSetMultimapBuilder();
//   }
// 
//   @Override
//   public String toString() {
//     return "VF_GUAVA_IMMUTABLE";
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/impl/persistent/paguro/PaguroValueFactory.java
// public class PaguroValueFactory implements JmhValueFactory {
// 
//   @Override
//   public JmhSet.Builder setBuilder() {
//     return new PaguroSetBuilder();
//   }
// 
//   @Override
//   public JmhMap.Builder mapBuilder() {
//     return new PaguroMapBuilder();
//   }
// 
//   @Override
//   public String toString() {
//     return "VF_PAGURO";
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/impl/persistent/vavr/VavrValueFactory.java
// public class VavrValueFactory implements JmhValueFactory {
// 
//   @Override
//   public JmhSet.Builder setBuilder() {
//     return new VavrSetBuilder();
//   }
// 
//   @Override
//   public JmhMap.Builder mapBuilder() {
//     return new VavrMapBuilder();
//   }
// 
//   @Override
//   public String toString() {
//     return "VF_VAVR";
//   }
// 
// }


// Path: src/main/java/io/usethesource/criterion/BenchmarkUtils.java
import java.util.Arrays;
import java.util.Random;
import io.usethesource.capsule.core.PersistentBidirectionalTrieSetMultimap;
import io.usethesource.capsule.core.PersistentTrieMap;
import io.usethesource.capsule.core.PersistentTrieSet;
import io.usethesource.capsule.core.PersistentTrieSetMultimap;
import io.usethesource.capsule.experimental.heterogeneous.TrieMap_5Bits_Heterogeneous_BleedingEdge;
import io.usethesource.capsule.experimental.memoized.TrieMap_5Bits_Memoized_LazyHashCode;
import io.usethesource.capsule.experimental.memoized.TrieSet_5Bits_Memoized_LazyHashCode;
import io.usethesource.capsule.experimental.multimap.TrieSetMultimap_HHAMT;
import io.usethesource.capsule.experimental.multimap.TrieSetMultimap_HHAMT_Specialized;
import io.usethesource.capsule.experimental.specialized.TrieMap_5Bits_Spec0To8;
import io.usethesource.capsule.experimental.specialized.TrieSet_5Bits_Spec0To8;
import io.usethesource.criterion.api.JmhValueFactory;
import io.usethesource.criterion.impl.immutable.guava.ImmutableGuavaValueFactory;
import io.usethesource.criterion.impl.persistent.paguro.PaguroValueFactory;
import io.usethesource.criterion.impl.persistent.vavr.VavrValueFactory;

    },
    VF_SCALA {
      @Override
      public JmhValueFactory getInstance() {
        return new io.usethesource.criterion.impl.persistent.scala.ScalaValueFactory();
      }
    },
    VF_CHAMP {
      @Override
      public JmhValueFactory getInstance() {
        return new io.usethesource.criterion.impl.persistent.champ.ChampValueFactory(
            PersistentTrieSet.class, PersistentTrieMap.class, PersistentTrieSetMultimap.class);
      }
    },
    VF_CHAMP_SPECIALIZED {
      @Override
      public JmhValueFactory getInstance() {
        return new io.usethesource.criterion.impl.persistent.champ.ChampValueFactory(
            TrieSet_5Bits_Spec0To8.class, TrieMap_5Bits_Spec0To8.class, null);
      }
    },
    VF_VAVR {
      @Override
      public JmhValueFactory getInstance() {
        return new VavrValueFactory();
      }
    },
    VF_PAGURO {
      @Override
      public JmhValueFactory getInstance() {
        return new PaguroValueFactory();