1bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver/* 2bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * Copyright 2012, Google Inc. 3bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * All rights reserved. 4bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * 5bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * Redistribution and use in source and binary forms, with or without 6bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * modification, are permitted provided that the following conditions are 7bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * met: 8bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * 9bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * * Redistributions of source code must retain the above copyright 10bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * notice, this list of conditions and the following disclaimer. 11bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * * Redistributions in binary form must reproduce the above 12bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * copyright notice, this list of conditions and the following disclaimer 13bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * in the documentation and/or other materials provided with the 14bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * distribution. 15bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * * Neither the name of Google Inc. nor the names of its 16bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * contributors may be used to endorse or promote products derived from 17bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * this software without specific prior written permission. 18bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * 19bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver */ 31bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 32bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruverpackage org.jf.util; 33bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 34bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruverimport junit.framework.Assert; 35bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruverimport org.junit.Before; 36bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruverimport org.junit.Test; 37bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 38bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruverimport javax.annotation.Nonnull; 39bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruverimport java.util.Iterator; 40bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruverimport java.util.List; 41bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruverimport java.util.ListIterator; 42bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruverimport java.util.NoSuchElementException; 43bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 44bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruverpublic class AbstractForwardSequentialListTest { 45bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver private List<Integer> list; 46bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 47bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Before 48bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void setup() { 49bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver list = new AbstractForwardSequentialList<Integer>() { 50bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Nonnull @Override public Iterator<Integer> iterator() { 51bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver return new Iterator<Integer>() { 52bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver private int index = 0; 53bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 54bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Override public boolean hasNext() { 55bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver return index < 100; 56bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 57bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 58bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Override public Integer next() { 59bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver if (!hasNext()) { 60bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver throw new NoSuchElementException(); 61bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 62bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver return index++; 63bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 64bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 65bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Override public void remove() { 66bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver throw new UnsupportedOperationException(); 67bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 68bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver }; 69bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 70bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 71bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Override public int size() { 72bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver return 100; 73bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 74bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver }; 75bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 76bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 77bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver private void testForwardIterationImpl(ListIterator<Integer> iter) { 78bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertFalse(iter.hasPrevious()); 79bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 80bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver for (int i=0; i<100; i++) { 81bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(i, iter.nextIndex()); 82bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(i-1, iter.previousIndex()); 83bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 84bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertTrue(iter.hasNext()); 85bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 86bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(i, iter.next().intValue()); 87bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertTrue(iter.hasPrevious()); 88bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 89bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 90bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertFalse(iter.hasNext()); 91bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(iter.nextIndex(), 100); 92bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(iter.previousIndex(), 99); 93bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 94bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 95bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test 96bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testForwardIteration() { 97bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver testForwardIterationImpl(list.listIterator()); 98bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 99bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 100bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver private void testReverseIterationImpl(ListIterator<Integer> iter) { 101bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertFalse(iter.hasNext()); 102bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 103bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver for (int i=99; i>=0; i--) { 104bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(i+1, iter.nextIndex()); 105bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(i, iter.previousIndex()); 106bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 107bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertTrue(iter.hasPrevious()); 108bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 109bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(i, iter.previous().intValue()); 110bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertTrue(iter.hasNext()); 111bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 112bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 113bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertFalse(iter.hasPrevious()); 114bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(0, iter.nextIndex()); 115bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(-1, iter.previousIndex()); 116bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 117bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 118bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test 119bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testReverseIteration() { 120bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver testReverseIterationImpl(list.listIterator(100)); 121bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 122bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 123bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test 124bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testAlternatingIteration() { 125bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver ListIterator<Integer> iter = list.listIterator(50); 126bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 127bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver for (int i=0; i<10; i++) { 128bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertTrue(iter.hasNext()); 129bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertTrue(iter.hasPrevious()); 130bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(50, iter.nextIndex()); 131bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(49, iter.previousIndex()); 132bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 133bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(50, iter.next().intValue()); 134bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 135bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertTrue(iter.hasNext()); 136bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertTrue(iter.hasPrevious()); 137bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(51, iter.nextIndex()); 138bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(50, iter.previousIndex()); 139bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 140bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.assertEquals(50, iter.previous().intValue()); 141bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 142bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 143bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 144bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test 145bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testAlternatingIteration2() { 146bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver ListIterator<Integer> iter = list.listIterator(0); 147bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 148bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver for (int i=0; i<10; i++) { 149bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver testForwardIterationImpl(iter); 150bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver testReverseIterationImpl(iter); 151bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 152bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 153bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 154bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test(expected = IndexOutOfBoundsException.class) 155bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testNegativeIndex() { 156bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver list.listIterator(-1); 157bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 158bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 159bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test(expected = IndexOutOfBoundsException.class) 160bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testLargeIndex() { 161bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver list.listIterator(101); 162bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 163bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 164bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test(expected = IndexOutOfBoundsException.class) 165bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testLargeIndex2() { 166bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver list.listIterator(1000000); 167bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 168bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 169bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test 170bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testForwardIterationException() { 171bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver // note: no "expected = NoSuchElementException", because we want to make sure the exception occurs only during 172bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver // the last call to next() 173bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 174bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver ListIterator<Integer> iter = list.listIterator(0); 175bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver for (int i=0; i<100; i++) { 176bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver iter.next(); 177bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 178bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver try { 179bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver iter.next(); 180bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } catch (NoSuchElementException ex) { 181bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver return; 182bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 183bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.fail(); 184bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 185bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 186bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test(expected = NoSuchElementException.class) 187bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testForwardIterationException2() { 188bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver ListIterator<Integer> iter = list.listIterator(100); 189bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver iter.next(); 190bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 191bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 192bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test 193bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testReverseIterationException() { 194bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver // note: no "expected = NoSuchElementException", because we want to make sure the exception occurs only during 195bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver // the last call to previous() 196bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 197bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver ListIterator<Integer> iter = list.listIterator(100); 198bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver for (int i=0; i<100; i++) { 199bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver iter.previous(); 200bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 201bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver try { 202bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver iter.previous(); 203bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } catch (NoSuchElementException ex) { 204bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver return; 205bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 206bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver Assert.fail(); 207bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 208bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver 209bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver @Test(expected = NoSuchElementException.class) 210bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver public void testReverseIterationException2() { 211bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver ListIterator<Integer> iter = list.listIterator(0); 212bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver iter.previous(); 213bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver } 214bfd74a869ebf4c0f5c1e76bcaa87e09d85b4bedeBen Gruver} 215