@Test
    public void testRemove() {
        Iterator<Integer> it = new TryIterator<Integer>() {

            private boolean called = false;

            @Override
            public Integer tryNext() {
                if (called) {
                    return done();
                }
                called = true;
                return 0;
            }
        };

        assertEquals("should be 0", 0, (int) it.next());

        try {
            it.remove();
        } catch (UnsupportedOperationException expected) {
            expected.getCause();
        }
    }