### Question:
Range implements Iterable<E> { public boolean overlaps(Range<E> range) { return overlaps(range.getFirst(), range.getLast()); } Range(E element);  Range(E first, E last);  Range(E first, E last, IEnumerator<E> enumerator);  Range(Range<E> other); E getFirst(); E getLast(); boolean contains(E element); boolean contains(Range<E> range); boolean containedBy(E first, E last); boolean overlaps(Range<E> range); boolean overlaps(E first, E last); boolean canAdd(Range<E> range); void add(Range<E> range); void merge(Range<E> range); Range<E> remove(E element); Range<E> remove(Range<E> range); Range<E> remove(E first, E last); boolean equals(Object object); int hashCode(); String toString(); @Override Iterator<E> iterator();  }### Answer:
@Test public void testOverlaps() { Range<Integer> range = range(-10, 10); assertFalse(range.overlaps(range(-20, -11))); assertTrue(range.overlaps(range(-11, 0))); assertTrue(range.overlaps(range(-10, 0))); assertTrue(range.overlaps(range(-10, 10))); assertTrue(range.overlaps(range(0, 10))); assertTrue(range.overlaps(range(0, 11))); assertFalse(range.overlaps(range(11, 20))); }