/** * Support {@code clear()}, {@code removeAll()}, and {@code retainAll()} when filtering a filtered * map. */ private static <K, V> Map<K, V> filterFiltered( AbstractFilteredMap<K, V> map, Predicate<? super Entry<K, V>> entryPredicate) { return new FilteredEntryMap<>( map.unfiltered, Predicates.<Entry<K, V>>and(map.predicate, entryPredicate)); }
/** * Support {@code clear()}, {@code removeAll()}, and {@code retainAll()} when filtering a filtered * sorted map. */ private static <K, V> SortedMap<K, V> filterFiltered( FilteredEntrySortedMap<K, V> map, Predicate<? super Entry<K, V>> entryPredicate) { Predicate<Entry<K, V>> predicate = Predicates.<Entry<K, V>>and(map.predicate, entryPredicate); return new FilteredEntrySortedMap<>(map.sortedMap(), predicate); }
/** * Support {@code clear()}, {@code removeAll()}, and {@code retainAll()} when filtering a filtered * map. */ private static <K, V> BiMap<K, V> filterFiltered( FilteredEntryBiMap<K, V> map, Predicate<? super Entry<K, V>> entryPredicate) { Predicate<Entry<K, V>> predicate = Predicates.<Entry<K, V>>and(map.predicate, entryPredicate); return new FilteredEntryBiMap<>(map.unfiltered(), predicate); }
@Override public boolean removeAll(Collection<?> c) { return Iterables.removeIf( multimap.unfiltered().entries(), // explicit <Entry<K, V>> is required to build with JDK6 Predicates.<Entry<K, V>>and( multimap.entryPredicate(), Maps.<V>valuePredicateOnEntries(Predicates.in(c)))); }
/** * Support removal operations when filtering a filtered multimap. Since a filtered multimap has * iterators that don't support remove, passing one to the FilteredEntryMultimap constructor would * lead to a multimap whose removal operations would fail. This method combines the predicates to * avoid that problem. */ private static <K, V> Multimap<K, V> filterFiltered( FilteredMultimap<K, V> multimap, Predicate<? super Entry<K, V>> entryPredicate) { Predicate<Entry<K, V>> predicate = Predicates.<Entry<K, V>>and(multimap.entryPredicate(), entryPredicate); return new FilteredEntryMultimap<>(multimap.unfiltered(), predicate); }
@SuppressWarnings("unchecked") // varargs public void testAnd_applyIterable() { Collection<Predicate<Integer>> empty = Arrays.asList(); assertEvalsToTrue(Predicates.and(empty)); assertEvalsLikeOdd(Predicates.and(Arrays.asList(isOdd()))); assertEvalsLikeOdd(Predicates.and(Arrays.asList(TRUE, isOdd()))); assertEvalsToFalse(Predicates.and(Arrays.asList(FALSE, NEVER_REACHED))); }
@SuppressWarnings("unchecked") // varargs public void testAnd_equalityIterable() { new EqualsTester() .addEqualityGroup( Predicates.and(Arrays.asList(TRUE, NEVER_REACHED)), Predicates.and(Arrays.asList(TRUE, NEVER_REACHED)), Predicates.and(TRUE, NEVER_REACHED)) .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED)) .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED)) .testEquals(); }
@GwtIncompatible // SerializableTester @SuppressWarnings("unchecked") // varargs public void testAnd_serializationIterable() { checkSerialization(Predicates.and(Arrays.asList(TRUE, FALSE))); }
public void testAnd_listDefensivelyCopied() { List<Predicate<Object>> list = newArrayList(); Predicate<Object> predicate = Predicates.and(list); assertTrue(predicate.apply(1)); list.add(Predicates.alwaysFalse()); assertTrue(predicate.apply(1)); }
@SuppressWarnings("unchecked") // varargs public void testAnd_applyTernary() { assertEvalsLikeOdd(Predicates.and(isOdd(), TRUE, TRUE)); assertEvalsLikeOdd(Predicates.and(TRUE, isOdd(), TRUE)); assertEvalsLikeOdd(Predicates.and(TRUE, TRUE, isOdd())); assertEvalsToFalse(Predicates.and(TRUE, FALSE, NEVER_REACHED)); }
@SuppressWarnings("unchecked") // varargs public void testAnd_equalityOneArg() { Object[] notEqualObjects = {Predicates.and(NEVER_REACHED, FALSE)}; new EqualsTester() .addEqualityGroup(Predicates.and(NEVER_REACHED), Predicates.and(NEVER_REACHED)) .addEqualityGroup(notEqualObjects) .addEqualityGroup(Predicates.and(isOdd())) .addEqualityGroup(Predicates.and()) .addEqualityGroup(Predicates.or(NEVER_REACHED)) .testEquals(); }
@SuppressWarnings("unchecked") // varargs public void testAnd_arrayDefensivelyCopied() { Predicate[] array = {Predicates.alwaysFalse()}; Predicate<Object> predicate = Predicates.and(array); assertFalse(predicate.apply(1)); array[0] = Predicates.alwaysTrue(); assertFalse(predicate.apply(1)); }
@GwtIncompatible // SerializableTester @SuppressWarnings("unchecked") // varargs public void testAnd_serializationNoArgs() { checkSerialization(Predicates.and()); }
public void testHashCodeForBooleanOperations() { Predicate<Integer> p1 = Predicates.isNull(); Predicate<Integer> p2 = isOdd(); // Make sure that hash codes are not computed per-instance. assertEqualHashCode(Predicates.not(p1), Predicates.not(p1)); assertEqualHashCode(Predicates.and(p1, p2), Predicates.and(p1, p2)); assertEqualHashCode(Predicates.or(p1, p2), Predicates.or(p1, p2)); // While not a contractual requirement, we'd like the hash codes for ands // & ors of the same predicates to not collide. assertTrue(Predicates.and(p1, p2).hashCode() != Predicates.or(p1, p2).hashCode()); }
@GwtIncompatible // SerializableTester @SuppressWarnings("unchecked") // varargs public void testAnd_serializationTernary() { checkSerialization(Predicates.and(TRUE, isOdd(), FALSE)); }
@SuppressWarnings("unchecked") // varargs public void testOr_equalityIterable() { new EqualsTester() .addEqualityGroup( Predicates.or(Arrays.asList(FALSE, NEVER_REACHED)), Predicates.or(Arrays.asList(FALSE, NEVER_REACHED)), Predicates.or(FALSE, NEVER_REACHED)) .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED)) .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED)) .testEquals(); }
@SuppressWarnings("unchecked") // varargs public void testOr_equalityNoArgs() { new EqualsTester() .addEqualityGroup(Predicates.or(), Predicates.or()) .addEqualityGroup(Predicates.or(TRUE)) .addEqualityGroup(Predicates.and()) .testEquals(); }
@SuppressWarnings("unchecked") // varargs public void testOr_equalityTernary() { new EqualsTester() .addEqualityGroup( Predicates.or(FALSE, NEVER_REACHED, TRUE), Predicates.or(FALSE, NEVER_REACHED, TRUE)) .addEqualityGroup(Predicates.or(TRUE, NEVER_REACHED, FALSE)) .addEqualityGroup(Predicates.or(TRUE)) .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED, TRUE)) .testEquals(); }
@SuppressWarnings("unchecked") // varargs public void testOr_equalityBinary() { new EqualsTester() .addEqualityGroup(Predicates.or(FALSE, NEVER_REACHED), Predicates.or(FALSE, NEVER_REACHED)) .addEqualityGroup(Predicates.or(NEVER_REACHED, FALSE)) .addEqualityGroup(Predicates.or(TRUE)) .addEqualityGroup(Predicates.and(FALSE, NEVER_REACHED)) .testEquals(); }
@SuppressWarnings("unchecked") // varargs public void testOr_equalityOneArg() { new EqualsTester() .addEqualityGroup(Predicates.or(NEVER_REACHED), Predicates.or(NEVER_REACHED)) .addEqualityGroup(Predicates.or(NEVER_REACHED, TRUE)) .addEqualityGroup(Predicates.or(TRUE)) .addEqualityGroup(Predicates.or()) .addEqualityGroup(Predicates.and(NEVER_REACHED)) .testEquals(); }