private void basicReject(RichIterable<Integer> iterable) {
   Collection<Integer> actual1 = ParallelIterate.reject(iterable, Predicates.greaterThan(10000));
   Collection<Integer> actual2 =
       ParallelIterate.reject(
           iterable,
           Predicates.greaterThan(10000),
           HashBag.<Integer>newBag(),
           3,
           this.executor,
           true);
   Collection<Integer> actual3 =
       ParallelIterate.reject(iterable, Predicates.greaterThan(10000), true);
   RichIterable<Integer> expected = iterable.reject(Predicates.greaterThan(10000));
   Assert.assertEquals(
       expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(),
       expected,
       actual1);
   Assert.assertEquals(
       expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(),
       expected.toBag(),
       actual2);
   Assert.assertEquals(
       expected.getClass().getSimpleName() + '/' + actual3.getClass().getSimpleName(),
       expected.toBag(),
       HashBag.newBag(actual3));
 }
  @Test
  public void noneSatisfy() {
    ImmutableSortedMap<String, String> map = new ImmutableEmptySortedMap<String, String>();

    Assert.assertTrue(map.noneSatisfy(Predicates.instanceOf(Integer.class)));
    Assert.assertTrue(map.noneSatisfy(Predicates.equal("Monkey")));
  }
  @Test
  public void anySatisfy() {
    ImmutableSortedMap<String, String> map = new ImmutableEmptySortedMap<String, String>();

    Assert.assertFalse(map.anySatisfy(Predicates.instanceOf(String.class)));
    Assert.assertFalse(map.anySatisfy(Predicates.equal("Monkey")));
  }
 @Test
 public void detectIndexSmallList() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.toReverseList(1, 5));
   Assert.assertEquals(4, ArrayListIterate.detectIndex(list, Predicates.equal(1)));
   Assert.assertEquals(0, Iterate.detectIndex(list, Predicates.equal(5)));
   Assert.assertEquals(-1, Iterate.detectIndex(list, Predicates.equal(10)));
 }
 @Test
 public void reject() {
   ImmutableBag<String> strings = this.newBag();
   Verify.assertIterableEmpty(strings.reject(Predicates.greaterThan("0")));
   Assert.assertEquals(strings, strings.reject(Predicates.lessThan("0")));
   Verify.assertIterableSize(strings.size() - 1, strings.reject(Predicates.lessThan("2")));
 }
 @Test
 public void rejectToTarget() {
   ImmutableBag<String> strings = this.newBag();
   Assert.assertEquals(
       strings, strings.reject(Predicates.lessThan("0"), FastList.<String>newList()).toBag());
   Verify.assertEmpty(strings.reject(Predicates.greaterThan("0"), FastList.<String>newList()));
 }
 @Test
 public void detectIndexOver100() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.toReverseList(1, 101));
   Assert.assertEquals(100, ArrayListIterate.detectIndex(list, Predicates.equal(1)));
   Assert.assertEquals(0, Iterate.detectIndex(list, Predicates.equal(101)));
   Assert.assertEquals(-1, Iterate.detectIndex(list, Predicates.equal(200)));
 }
 private void basicCount(RichIterable<Integer> listIterable) {
   int actual1 = ParallelIterate.count(listIterable, Predicates.greaterThan(10000));
   int actual2 =
       ParallelIterate.count(listIterable, Predicates.greaterThan(10000), 11, this.executor);
   Assert.assertEquals(10000, actual1);
   Assert.assertEquals(10000, actual2);
 }
 @Test
 public void detectIfNone() {
   ArrayList<Integer> list = this.getIntegerList();
   Assert.assertEquals(
       Integer.valueOf(7), ArrayListIterate.detectIfNone(list, Predicates.equal(6), 7));
   Assert.assertEquals(
       Integer.valueOf(2), ArrayListIterate.detectIfNone(list, Predicates.equal(2), 7));
 }
 @Test
 public void select() {
   ImmutableBag<String> strings = this.newBag();
   Verify.assertContainsAll(
       FastList.newList(strings.select(Predicates.greaterThan("0"))), strings.toArray());
   Verify.assertIterableEmpty(strings.select(Predicates.lessThan("0")));
   Verify.assertIterableSize(strings.size() - 1, strings.select(Predicates.greaterThan("1")));
 }
 @Test
 public void detectIfNoneWithBlock() {
   Function0<Integer> function = new PassThruFunction0<Integer>(9);
   Assert.assertEquals(
       Integer.valueOf(3), this.lazyIterable.detectIfNone(Predicates.equal(3), function));
   Assert.assertEquals(
       Integer.valueOf(9), this.lazyIterable.detectIfNone(Predicates.equal(8), function));
 }
 @Test
 public void testSelect() {
   Assert.assertEquals(
       ArrayStack.newStackFromTopToBottom(2, 3),
       this.unmodifiableStack.select(Predicates.greaterThan(1)));
   Verify.assertSize(
       3,
       this.unmodifiableStackString.select(Predicates.alwaysTrue(), FastList.<String>newList()));
 }
 @Test
 public void detectIfNone() {
   ImmutableCollection<Integer> integers = this.classUnderTest();
   Function0<Integer> function = new PassThruFunction0<Integer>(integers.size() + 1);
   Assert.assertEquals(Integer.valueOf(1), integers.detectIfNone(Predicates.equal(1), function));
   Assert.assertEquals(
       Integer.valueOf(integers.size() + 1),
       integers.detectIfNone(Predicates.equal(integers.size() + 1), function));
 }
 @Test
 public void detect() {
   ArrayList<Integer> list = this.getIntegerList();
   Assert.assertEquals(Integer.valueOf(1), ArrayListIterate.detect(list, Predicates.equal(1)));
   //noinspection CachedNumberConstructorCall,UnnecessaryBoxing
   ArrayList<Integer> list2 =
       this.newArrayList(1, new Integer(2), 2); // test relies on having a unique instance of "2"
   Assert.assertSame(list2.get(1), ArrayListIterate.detect(list2, Predicates.equal(2)));
 }
 @Test
 public void toArray() {
   Assert.assertArrayEquals(
       FastList.newListWith(1, 2).toArray(),
       this.lazyIterable.select(Predicates.lessThan(3)).toArray());
   Assert.assertArrayEquals(
       FastList.newListWith(1, 2).toArray(),
       this.lazyIterable.select(Predicates.lessThan(3)).toArray(new Object[2]));
 }
  @Test
  public void partition() {
    ImmutableBag<String> strings = this.newBag();
    PartitionImmutableBag<String> partition = strings.partition(Predicates.greaterThan("0"));
    Assert.assertEquals(strings, partition.getSelected());
    Verify.assertIterableEmpty(partition.getRejected());

    Verify.assertIterableSize(
        strings.size() - 1, strings.partition(Predicates.greaterThan("1")).getSelected());
  }
 @Override
 @Test
 public void forEach() {
   super.forEach();
   MutableList<Integer> list = FastList.newList();
   CompositeFastList<Integer> iterables = new CompositeFastList<Integer>();
   iterables.addComposited(Interval.oneTo(5).toList());
   iterables.addComposited(Interval.fromTo(6, 10).toList());
   iterables.forEach(CollectionAddProcedure.on(list));
   Verify.assertSize(10, list);
   Verify.assertAllSatisfy(list, Predicates.greaterThan(0).and(Predicates.lessThan(11)));
 }
 @Override
 @Test
 public void forEachWith() {
   super.forEachWith();
   MutableList<Integer> list = FastList.newList();
   CompositeFastList<Integer> iterables = new CompositeFastList<Integer>();
   iterables.addComposited(Interval.fromTo(6, 10).toList());
   iterables.addComposited(Interval.oneTo(5).toList());
   iterables.forEachWith((each, parameter) -> list.add(parameter.intValue(), each), 0);
   Verify.assertSize(10, list);
   Verify.assertAllSatisfy(list, Predicates.greaterThan(0).and(Predicates.lessThan(11)));
   Verify.assertStartsWith(list, 5, 4, 3, 2, 1, 10, 9, 8, 7, 6);
 }
 @Override
 @Test
 public void forEachWithIndex() {
   super.forEachWithIndex();
   MutableList<Integer> list = FastList.newList();
   CompositeFastList<Integer> iterables = new CompositeFastList<Integer>();
   iterables.addComposited(Interval.fromTo(6, 10).toList());
   iterables.addComposited(Interval.oneTo(5).toList());
   iterables.forEachWithIndex((each, index) -> list.add(index, each));
   Verify.assertSize(10, list);
   Verify.assertAllSatisfy(list, Predicates.greaterThan(0).and(Predicates.lessThan(11)));
   Verify.assertStartsWith(list, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5);
 }
 @Test
 public void select() {
   ArrayList<Integer> list = this.getIntegerList();
   ArrayList<Integer> results =
       ArrayListIterate.select(list, Predicates.instanceOf(Integer.class));
   Verify.assertSize(5, results);
 }
 @Test
 public void collectIf() {
   ImmutableCollection<Integer> integers = this.classUnderTest();
   Assert.assertEquals(
       integers,
       integers.collectIf(Predicates.instanceOf(Integer.class), Functions.getIntegerPassThru()));
 }
 @Test
 public void selectOver100() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.oneTo(101));
   ArrayList<Integer> results =
       ArrayListIterate.select(list, Predicates.instanceOf(Integer.class));
   Verify.assertSize(101, results);
 }
 @Test
 public void reject() {
   ArrayList<Integer> list = this.getIntegerList();
   ArrayList<Integer> results =
       ArrayListIterate.reject(list, Predicates.instanceOf(Integer.class));
   Verify.assertEmpty(results);
 }
 @Test
 public void collectIfOver100() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.oneTo(101));
   ArrayList<Class<?>> result =
       ArrayListIterate.collectIf(list, Predicates.equal(101), Functions.getToClass());
   Assert.assertEquals(FastList.newListWith(Integer.class), result);
 }
  @Test
  public void count() {
    ImmutableMap<String, String> map =
        this.newMapWithKeysValues("1", "One", "2", "Two", "3", "Three", "4", "Four");

    int actual = map.count(Predicates.or("One"::equals, "Three"::equals));

    switch (map.size()) {
      case 1:
        Assert.assertEquals(1, actual);
        break;
      case 2:
        Assert.assertEquals(1, actual);
        break;
      case 3:
        Assert.assertEquals(2, actual);
        break;
      case 4:
        Assert.assertEquals(2, actual);
        break;
      default:
        Assert.assertEquals(0, actual);
        break;
    }
  }
 @Test
 public void testForEachWithIndexToArrayUsingFixedArrayList() {
   Integer[] array = new Integer[10];
   List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
   Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull()));
   ParallelIterate.forEachWithIndex(list, (each, index) -> array[index] = each, 1, 2);
   Assert.assertArrayEquals(array, list.toArray(new Integer[list.size()]));
 }
 @Test
 public void testForEachWithIndexToArrayUsingArrayList() {
   Integer[] array = new Integer[200];
   List<Integer> list = new ArrayList<>(Interval.oneTo(200));
   Assert.assertTrue(ArrayIterate.allSatisfy(array, Predicates.isNull()));
   ParallelIterate.forEachWithIndex(list, (each, index) -> array[index] = each, 10, 10);
   Assert.assertArrayEquals(array, list.toArray(new Integer[] {}));
 }
 @Test
 public void partitionOver100() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.oneTo(101));
   PartitionMutableList<Integer> result =
       ArrayListIterate.partition(list, Predicates.in(Lists.immutable.of(1)));
   Verify.assertSize(1, result.getSelected());
   Verify.assertSize(100, result.getRejected());
 }
 @Test
 public void collectIf() {
   Assert.assertEquals(
       FastList.newListWith("1", "2", "3"),
       this.newWith(1, 2, 3)
           .collectIf(Predicates.instanceOf(Integer.class), Functions.getToString())
           .toList());
 }
 @Test
 public void selectSortedSet() {
   RichIterable<Integer> iterable = Interval.oneTo(20000).toSortedSet();
   Collection<Integer> actual1 = ParallelIterate.select(iterable, Predicates.greaterThan(10000));
   Collection<Integer> actual2 =
       ParallelIterate.select(iterable, Predicates.greaterThan(10000), true);
   RichIterable<Integer> expected = iterable.select(Predicates.greaterThan(10000));
   Assert.assertSame(expected.getClass(), actual1.getClass());
   Assert.assertSame(expected.getClass(), actual2.getClass());
   Assert.assertEquals(
       expected.getClass().getSimpleName() + '/' + actual1.getClass().getSimpleName(),
       expected,
       actual1);
   Assert.assertEquals(
       expected.getClass().getSimpleName() + '/' + actual2.getClass().getSimpleName(),
       expected,
       actual2);
 }