### Question:
FilteredIterable implements Iterable<T> { public static <T> FilteredIterable<T> of(Iterable<T> iterable) { if (iterable == null) { return null; } if (iterable instanceof FilteredIterable<?>) { return (FilteredIterable<T>) iterable; } return new FilteredIterable<T>(iterable); } protected  FilteredIterable(Iterable<? extends T> iterable); Iterator<T> iterator(); @Override String toString(); FilteredIterable<T> retain(Predicate<? super T> filter); FilteredIterable<U> retain(final Class<U> type); FilteredIterable<T> retain(final Class<?>... ofType); static FilteredIterable<T> of(Iterable<T> iterable); @SuppressWarnings("unchecked") static FilteredIterable<T> empty();  }### Answer:
@Test public void testFilterWithNullIteratorReturnsNull() { assertNull(FilteredIterable.of(null)); }
@Test public void testFilterWithFilteredIterableReturnsItself() { FilteredIterable<Integer> filter = FilteredIterable.of(list); assertEquals(filter,FilteredIterable.of(filter)); }