### Question:
Range implements Iterable<E> { public Range<E> remove(E element) { return remove(element, element); } 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 testRemove() { Range<Integer> range, rest; rest = (range = range(-10, 10)).remove(range(-20, -10)); assertEquals(range(-9, 10), range); rest = (range = range(-10, 10)).remove(range(-20, 0)); assertEquals(range(1, 10), range); rest = (range = range(-10, 10)).remove(range(-10, 0)); assertEquals(range(1, 10), range); rest = (range = range(-10, 10)).remove(range(-1, 1)); assertEquals(range(-10, -2), range); assertEquals(range(2, 10), rest); rest = (range = range(-10, 10)).remove(range(0, 10)); assertEquals(range(-10, -1), range); rest = (range = range(-10, 10)).remove(range(0, 20)); assertEquals(range(-10, -1), range); rest = (range = range(-10, 10)).remove(range(10, 20)); assertEquals(range(-10, 9), range); }