@Test
 public void countWith() {
   ImmutableCollection<Integer> integers = this.classUnderTest();
   Assert.assertEquals(
       integers.size(), integers.countWith(Predicates2.instanceOf(), Integer.class));
   Assert.assertEquals(0, integers.countWith(Predicates2.instanceOf(), String.class));
 }
  @Test
  public void rejectWith_value() {
    ImmutableMap<String, Integer> map = this.newMapWithKeysValues("1", 1, "2", 2, "3", 3, "4", 4);

    switch (map.size()) {
      case 1:
        Verify.assertEmpty(
            map.rejectWith(Predicates2.<Integer>lessThan(), 2, UnifiedSet.<Integer>newSet()));
        break;
      case 2:
        Verify.assertContainsAll(
            map.rejectWith(Predicates2.<Integer>lessThan(), 2, UnifiedSet.<Integer>newSet()), 2);
        break;
      case 3:
        Verify.assertContainsAll(
            map.rejectWith(Predicates2.<Integer>lessThan(), 2, UnifiedSet.<Integer>newSet()), 2, 3);
        break;
      case 4:
        Verify.assertContainsAll(
            map.rejectWith(Predicates2.<Integer>lessThan(), 2, UnifiedSet.<Integer>newSet()),
            2,
            3,
            4);
        break;
      default:
        Verify.assertEmpty(map);
        break;
    }
  }
 @Test
 public void detectIndexWithSmallList() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.toReverseList(1, 5));
   Assert.assertEquals(4, Iterate.detectIndexWith(list, Predicates2.equal(), 1));
   Assert.assertEquals(0, Iterate.detectIndexWith(list, Predicates2.equal(), 5));
   Assert.assertEquals(-1, Iterate.detectIndexWith(list, Predicates2.equal(), 10));
 }
 @Test
 public void countWith() {
   ArrayList<Integer> list = this.getIntegerList();
   Assert.assertEquals(
       5, ArrayListIterate.countWith(list, Predicates2.instanceOf(), Integer.class));
   Assert.assertEquals(
       0, ArrayListIterate.countWith(list, Predicates2.instanceOf(), Double.class));
 }
 @Test
 public void noneSatisfyWithOver100() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.oneTo(101));
   Assert.assertFalse(
       ArrayListIterate.noneSatisfyWith(list, Predicates2.instanceOf(), Integer.class));
   Predicate2<Integer, Integer> greaterThanPredicate = Predicates2.greaterThan();
   Assert.assertTrue(ArrayListIterate.noneSatisfyWith(list, greaterThanPredicate, 150));
 }
 @Test
 public void allSatisfyWith() {
   ArrayList<Integer> list = this.getIntegerList();
   Assert.assertTrue(
       ArrayListIterate.allSatisfyWith(list, Predicates2.instanceOf(), Integer.class));
   Predicate2<Integer, Integer> greaterThanPredicate = Predicates2.greaterThan();
   Assert.assertFalse(ArrayListIterate.allSatisfyWith(list, greaterThanPredicate, 2));
 }
 @Test
 public void anySatisfyWithOver100() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.oneTo(101));
   Assert.assertTrue(
       ArrayListIterate.anySatisfyWith(list, Predicates2.instanceOf(), Integer.class));
   Assert.assertFalse(
       ArrayListIterate.anySatisfyWith(list, Predicates2.instanceOf(), Double.class));
 }
 @Test
 public void anySatisfyWith() {
   ArrayList<Integer> list = this.getIntegerList();
   Assert.assertTrue(
       ArrayListIterate.anySatisfyWith(list, Predicates2.instanceOf(), Integer.class));
   Assert.assertFalse(
       ArrayListIterate.anySatisfyWith(list, Predicates2.instanceOf(), Double.class));
 }
 @Test
 public void detectWith() {
   ImmutableCollection<Integer> integers = this.classUnderTest();
   Assert.assertEquals(
       Integer.valueOf(1), integers.detectWith(Predicates2.equal(), Integer.valueOf(1)));
   Assert.assertNull(
       integers.detectWith(Predicates2.equal(), Integer.valueOf(integers.size() + 1)));
 }
 @Test
 public void detectWithIfNone() {
   ArrayList<Integer> list = this.getIntegerList();
   Assert.assertEquals(
       Integer.valueOf(7), ArrayListIterate.detectWithIfNone(list, Predicates2.equal(), 6, 7));
   Assert.assertEquals(
       Integer.valueOf(2), ArrayListIterate.detectWithIfNone(list, Predicates2.equal(), 2, 7));
 }
 @Test
 public void countWithOver100() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.oneTo(101));
   Assert.assertEquals(
       101, ArrayListIterate.countWith(list, Predicates2.instanceOf(), Integer.class));
   Assert.assertEquals(
       0, ArrayListIterate.countWith(list, Predicates2.instanceOf(), Double.class));
 }
 @Test
 public void detectWithIfNone() {
   ImmutableCollection<Integer> integers = this.classUnderTest();
   Integer sum = Integer.valueOf(integers.size() + 1);
   Function0<Integer> function = new PassThruFunction0<Integer>(sum);
   Assert.assertEquals(
       Integer.valueOf(1),
       integers.detectWithIfNone(Predicates2.equal(), Integer.valueOf(1), function));
   Assert.assertEquals(sum, integers.detectWithIfNone(Predicates2.equal(), sum, function));
 }
 @Test
 public void detectWith() {
   ArrayList<Integer> list = this.getIntegerList();
   Assert.assertEquals(
       Integer.valueOf(1), ArrayListIterate.detectWith(list, Predicates2.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.detectWith(list2, Predicates2.equal(), 2));
 }
  @Test
  public void partitionWith() {
    ImmutableBag<String> strings = this.newBag();
    PartitionImmutableBag<String> partition =
        strings.partitionWith(Predicates2.<String>greaterThan(), "0");
    Assert.assertEquals(strings, partition.getSelected());
    Verify.assertIterableEmpty(partition.getRejected());

    Verify.assertIterableSize(
        strings.size() - 1,
        strings.partitionWith(Predicates2.<String>greaterThan(), "1").getSelected());
  }
  @Override
  @Test
  public void rejectMap() {
    ImmutableSortedMap<Integer, String> map = this.classUnderTest();
    ImmutableSortedMap<Integer, String> actual = map.reject(Predicates2.alwaysFalse());
    Verify.assertInstanceOf(ImmutableEmptySortedMap.class, actual);
    Assert.assertSame(ImmutableEmptySortedMap.INSTANCE, actual);

    ImmutableSortedMap<Integer, String> revMap =
        this.classUnderTest(Comparators.<Integer>reverseNaturalOrder());
    ImmutableSortedMap<Integer, String> revActual = revMap.reject(Predicates2.alwaysTrue());
    Verify.assertInstanceOf(ImmutableEmptySortedMap.class, revActual);
    Assert.assertSame(revMap.comparator(), revActual.comparator());
  }
 @Test
 public void rejectWith() {
   ImmutableCollection<Integer> integers = this.classUnderTest();
   Assert.assertEquals(
       this.<Integer>newMutable().withAll(integers).reject(IntegerPredicates.isOdd()),
       integers.rejectWith(Predicates2.in(), iList(1, 3, 5, 7, 9)));
 }
 @Test
 public void selectAndRejectWith() {
   Twin<MutableList<String>> twin =
       this.unmodifiableCollection.selectAndRejectWith(Predicates2.equal(), METALLICA);
   Verify.assertSize(1, twin.getOne());
   Verify.assertSize(3, twin.getTwo());
 }
 @Override
 public void partitionWith() {
   PartitionImmutableBag<String> partition =
       this.newBag().partitionWith(Predicates2.<String>lessThan(), "0");
   Verify.assertIterableEmpty(partition.getSelected());
   Verify.assertIterableEmpty(partition.getRejected());
 }
 @Test
 public void rejectWith() {
   ArrayList<Integer> list = this.getIntegerList();
   ArrayList<Integer> results =
       ArrayListIterate.rejectWith(list, Predicates2.instanceOf(), Integer.class);
   Verify.assertEmpty(results);
 }
 @Test
 public void rejectWith() {
   Assert.assertEquals(
       FastList.newListWith(3, 4, 5, 6, 7),
       this.lazyIterable.rejectWith(
           Predicates2.<Integer>lessThan(), 3, FastList.<Integer>newList()));
 }
 @Test
 public void testSelectWith() {
   Verify.assertSize(
       1,
       this.unmodifiableStackString.selectWith(
           Predicates2.equal(), "2", FastList.<String>newList()));
 }
 @Test
 public void rejectWithOver100() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.oneTo(101));
   ArrayList<Integer> results =
       ArrayListIterate.rejectWith(list, Predicates2.instanceOf(), Integer.class);
   Verify.assertEmpty(results);
 }
 @Test
 public void testRejectWith() {
   Verify.assertSize(
       3,
       this.unmodifiableStackString.rejectWith(
           Predicates2.equal(), 3, FastList.<String>newList()));
 }
 @Test
 public void selectWith() {
   Assert.assertEquals(
       FastList.newListWith(1, 2),
       this.lazyIterable.selectWith(
           Predicates2.<Integer>lessThan(), 3, FastList.<Integer>newList()));
 }
 @Test
 public void partitionWith() {
   ImmutableCollection<Integer> integers = this.classUnderTest();
   PartitionImmutableCollection<Integer> partition =
       integers.partitionWith(Predicates2.in(), integers.select(IntegerPredicates.isOdd()));
   Assert.assertEquals(integers.select(IntegerPredicates.isOdd()), partition.getSelected());
   Assert.assertEquals(integers.select(IntegerPredicates.isEven()), partition.getRejected());
 }
 @Test
 public void selectAndRejectWith() {
   ArrayList<Integer> list = this.getIntegerList();
   Twin<MutableList<Integer>> result =
       ArrayListIterate.selectAndRejectWith(list, Predicates2.in(), Lists.immutable.of(1));
   Verify.assertSize(1, result.getOne());
   Verify.assertSize(4, result.getTwo());
 }
  @Test
  public void rejectWithToTarget() {
    ImmutableBag<String> strings = this.newBag();
    Assert.assertEquals(strings, strings.reject(Predicates.lessThan("0")));

    Verify.assertEmpty(
        strings.rejectWith(Predicates2.<String>greaterThan(), "0", FastList.<String>newList()));
  }
 @Test
 public void selectAndRejectWithOver100() {
   ArrayList<Integer> list = new ArrayList<Integer>(Interval.oneTo(101));
   Twin<MutableList<Integer>> result =
       ArrayListIterate.selectAndRejectWith(list, Predicates2.in(), Lists.immutable.of(1));
   Verify.assertSize(1, result.getOne());
   Verify.assertSize(100, result.getTwo());
 }
  @Test
  public void partitionWith_value() {
    MutableMap<String, Integer> map = this.newMapWithKeysValues("1", 1, "2", 2, "3", 3);
    PartitionMutableCollection<Integer> partition =
        map.partitionWith(Predicates2.in(), map.select(IntegerPredicates.isEven()));

    Assert.assertEquals(this.expectSelect(map.size()), partition.getSelected().toSet());
    Assert.assertEquals(this.expectReject(map.size()), partition.getRejected().toSet());
  }
  @Test
  public void selectWithToTarget() {
    ImmutableBag<String> strings = this.newBag();

    Assert.assertEquals(
        strings,
        strings
            .selectWith(Predicates2.<String>greaterThan(), "0", FastList.<String>newList())
            .toBag());
  }