### Question:
CollectionFunctionals { public static <K> Function<Map<K, ?>, Integer> mapSize() { return mapSize(null); }  static Supplier<Integer> sizeSupplier(final Iterable<?> collection); static Function<Iterable<?>, Integer> sizeFunction(); static Function<Iterable<?>, Integer> sizeFunction(final Integer valueIfInputNull); static Function<Iterable<? extends T>, T> firstElement(); static Function<Map<K,?>,Set<K>> keys(); static Function<Map<K, ?>, Integer> mapSize(); static Function<Map<K, ?>, Integer> mapSize(Integer valueIfNull); static Predicate<Iterable<?>> equalsSetOf(Object... target); static Predicate<Iterable<?>> equalsSet(final Iterable<?> target); static Predicate<Iterable<?>> sizeEquals(int targetSize); static Predicate<Iterable<?>> empty(); static Predicate<Iterable<?>> notEmpty(); static Predicate<Map<K,?>> mapSizeEquals(int targetSize); static Function<I, List<T>> limit(final int max); static Predicate<T> contains(I item); static Predicate<TT> all(Predicate<T> attributeSatisfies); static Predicate<TT> any(Predicate<T> attributeSatisfies); static Predicate<TT> quorum(QuorumCheck quorumCheck, Predicate<T> attributeSatisfies);  }### Answer:
@Test public void testMapSize() { Assert.assertTrue(CollectionFunctionals.<String>mapSizeEquals(2).apply(ImmutableMap.of("x", "1", "y", "2"))); Assert.assertFalse(CollectionFunctionals.<String>mapSizeEquals(2).apply(null)); Assert.assertTrue(CollectionFunctionals.mapSizeEquals(0).apply(ImmutableMap.of())); Assert.assertFalse(CollectionFunctionals.mapSizeEquals(0).apply(null)); }
@Test public void testMapSizeOfNull() { Assert.assertEquals(CollectionFunctionals.mapSize().apply(null), null); Assert.assertEquals(CollectionFunctionals.mapSize(-1).apply(null), (Integer)(-1)); }