// Path: src/main/java/io/usethesource/criterion/api/JmhSet.java
// public interface JmhSet extends JmhValue, Iterable<JmhValue> {
// 
//   boolean isEmpty();
// 
//   int size();
// 
//   boolean contains(JmhValue element);
// 
//   JmhSet insert(JmhValue element);
// 
//   JmhSet delete(JmhValue elem);
// 
//   default boolean subsetOf(JmhSet other) {
//      throw new UnsupportedOperationException();
//   }
// 
//   default JmhSet union(JmhSet other) {
//     throw new UnsupportedOperationException();
//   }
// 
//   default JmhSet subtract(JmhSet other) {
//     throw new UnsupportedOperationException();
//   }
// 
//   default JmhSet intersect(JmhSet other) {
//     throw new UnsupportedOperationException();
//   }
// 
//   @Override
//   Iterator<JmhValue> iterator();
// 
//   @Deprecated
//   java.util.Set<JmhValue> asJavaSet();
// 
//   interface Builder extends JmhBuilder {
// 
//     @Deprecated
//     default void insert(JmhValue value) {
//       insert(new JmhValue[]{value});
//     }
// 
//     void insert(JmhValue... v);
// 
//     void insertAll(Iterable<? extends JmhValue> collection);
// 
//     @Override
//     JmhSet done();
// 
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/api/JmhValue.java
// @CompilerControl(Mode.DONT_INLINE)
// public interface JmhValue {
// 
//   /**
//    * Removes the JmhValue delegation object to reveal its internal representation.
//    *
//    * @return internal representation
//    */
//   Object unwrap();
// 
// }


import clojure.lang.APersistentSet;
import clojure.lang.IPersistentSet;
import clojure.lang.PersistentHashSet;
import io.usethesource.criterion.api.JmhSet;
import io.usethesource.criterion.api.JmhValue;
import java.util.Iterator;
import java.util.Set;
/**
 * Copyright (c) Michael Steindorfer <Centrum Wiskunde & Informatica> and Contributors.
 * All rights reserved.
 *
 * This file is licensed under the BSD 2-Clause License, which accompanies this project
 * and is available under https://opensource.org/licenses/BSD-2-Clause.
 */
package io.usethesource.criterion.impl.persistent.clojure;



class ClojureSet implements JmhSet {

  protected final IPersistentSet xs;

  protected ClojureSet(IPersistentSet xs) {
    this.xs = xs;
  }

  protected ClojureSet() {
    this(PersistentHashSet.EMPTY);
  }

// Path: src/main/java/io/usethesource/criterion/api/JmhSet.java
// public interface JmhSet extends JmhValue, Iterable<JmhValue> {
// 
//   boolean isEmpty();
// 
//   int size();
// 
//   boolean contains(JmhValue element);
// 
//   JmhSet insert(JmhValue element);
// 
//   JmhSet delete(JmhValue elem);
// 
//   default boolean subsetOf(JmhSet other) {
//      throw new UnsupportedOperationException();
//   }
// 
//   default JmhSet union(JmhSet other) {
//     throw new UnsupportedOperationException();
//   }
// 
//   default JmhSet subtract(JmhSet other) {
//     throw new UnsupportedOperationException();
//   }
// 
//   default JmhSet intersect(JmhSet other) {
//     throw new UnsupportedOperationException();
//   }
// 
//   @Override
//   Iterator<JmhValue> iterator();
// 
//   @Deprecated
//   java.util.Set<JmhValue> asJavaSet();
// 
//   interface Builder extends JmhBuilder {
// 
//     @Deprecated
//     default void insert(JmhValue value) {
//       insert(new JmhValue[]{value});
//     }
// 
//     void insert(JmhValue... v);
// 
//     void insertAll(Iterable<? extends JmhValue> collection);
// 
//     @Override
//     JmhSet done();
// 
//   }
// 
// }
// 
// Path: src/main/java/io/usethesource/criterion/api/JmhValue.java
// @CompilerControl(Mode.DONT_INLINE)
// public interface JmhValue {
// 
//   /**
//    * Removes the JmhValue delegation object to reveal its internal representation.
//    *
//    * @return internal representation
//    */
//   Object unwrap();
// 
// }


// Path: src/main/java/io/usethesource/criterion/impl/persistent/clojure/ClojureSet.java
import clojure.lang.APersistentSet;
import clojure.lang.IPersistentSet;
import clojure.lang.PersistentHashSet;
import io.usethesource.criterion.api.JmhSet;
import io.usethesource.criterion.api.JmhValue;
import java.util.Iterator;
import java.util.Set;

/**
 * Copyright (c) Michael Steindorfer <Centrum Wiskunde & Informatica> and Contributors.
 * All rights reserved.
 *
 * This file is licensed under the BSD 2-Clause License, which accompanies this project
 * and is available under https://opensource.org/licenses/BSD-2-Clause.
 */
package io.usethesource.criterion.impl.persistent.clojure;



class ClojureSet implements JmhSet {

  protected final IPersistentSet xs;

  protected ClojureSet(IPersistentSet xs) {
    this.xs = xs;
  }

  protected ClojureSet() {
    this(PersistentHashSet.EMPTY);
  }

  protected ClojureSet(JmhValue... values) {