📄 testfilterlistiterator.java
字号:
public void testOdds() {
FilterListIterator filtered = new FilterListIterator(list.listIterator(),oddPred);
walkLists(odds,filtered);
}
public void testThrees() {
FilterListIterator filtered = new FilterListIterator(list.listIterator(),threePred);
walkLists(threes,filtered);
}
public void testFours() {
FilterListIterator filtered = new FilterListIterator(list.listIterator(),fourPred);
walkLists(fours,filtered);
}
public void testNestedSixes() {
FilterListIterator filtered = new FilterListIterator(
new FilterListIterator(list.listIterator(),threePred),
evenPred
);
walkLists(sixes,filtered);
}
public void testNestedSixes2() {
FilterListIterator filtered = new FilterListIterator(
new FilterListIterator(list.listIterator(),evenPred),
threePred
);
walkLists(sixes,filtered);
}
public void testNestedSixes3() {
FilterListIterator filtered = new FilterListIterator(
new FilterListIterator(list.listIterator(),threePred),
evenPred
);
walkLists(sixes,new FilterListIterator(filtered,truePred));
}
public void testNextChangesPrevious() {
{
FilterListIterator filtered = new FilterListIterator(list.listIterator(),threePred);
nextNextPrevious(threes.listIterator(),filtered);
}
{
FilterListIterator filtered = new FilterListIterator(list.listIterator(),truePred);
nextNextPrevious(list.listIterator(),filtered);
}
}
public void testPreviousChangesNext() {
{
FilterListIterator filtered = new FilterListIterator(list.listIterator(),threePred);
ListIterator expected = threes.listIterator();
walkForward(expected,filtered);
previousPreviousNext(expected,filtered);
}
{
FilterListIterator filtered = new FilterListIterator(list.listIterator(),truePred);
ListIterator expected = list.listIterator();
walkForward(expected,filtered);
previousPreviousNext(expected,filtered);
}
}
public void testFailingHasNextBug() {
FilterListIterator filtered = new FilterListIterator(list.listIterator(),fourPred);
ListIterator expected = fours.listIterator();
while(expected.hasNext()) {
expected.next();
filtered.next();
}
assertTrue(filtered.hasPrevious());
assertTrue(!filtered.hasNext());
assertEquals(expected.previous(),filtered.previous());
}
// Utilities
private void walkForward(ListIterator expected, ListIterator testing) {
while(expected.hasNext()) {
assertEquals(expected.nextIndex(),testing.nextIndex());
assertEquals(expected.previousIndex(),testing.previousIndex());
assertTrue(testing.hasNext());
assertEquals(expected.next(),testing.next());
}
}
private void walkBackward(ListIterator expected, ListIterator testing) {
while(expected.hasPrevious()) {
assertEquals(expected.nextIndex(),testing.nextIndex());
assertEquals(expected.previousIndex(),testing.previousIndex());
assertTrue(testing.hasPrevious());
assertEquals(expected.previous(),testing.previous());
}
}
private void nextNextPrevious(ListIterator expected, ListIterator testing) {
// calls to next() should change the value returned by previous()
// even after previous() has been set by a call to hasPrevious()
assertEquals(expected.next(),testing.next());
assertEquals(expected.hasPrevious(),testing.hasPrevious());
Object expecteda = expected.next();
Object testinga = testing.next();
assertEquals(expecteda,testinga);
Object expectedb = expected.previous();
Object testingb = testing.previous();
assertEquals(expecteda,expectedb);
assertEquals(testinga,testingb);
}
private void previousPreviousNext(ListIterator expected, ListIterator testing) {
// calls to previous() should change the value returned by next()
// even after next() has been set by a call to hasNext()
assertEquals(expected.previous(),testing.previous());
assertEquals(expected.hasNext(),testing.hasNext());
Object expecteda = expected.previous();
Object testinga = testing.previous();
assertEquals(expecteda,testinga);
Object expectedb = expected.next();
Object testingb = testing.next();
assertEquals(expecteda,testingb);
assertEquals(expecteda,expectedb);
assertEquals(testinga,testingb);
}
private void walkLists(List list, ListIterator testing) {
ListIterator expected = list.listIterator();
// walk all the way forward
walkForward(expected,testing);
// walk all the way back
walkBackward(expected,testing);
// forward,back,forward
while(expected.hasNext()) {
assertEquals(expected.nextIndex(),testing.nextIndex());
assertEquals(expected.previousIndex(),testing.previousIndex());
assertTrue(testing.hasNext());
assertEquals(expected.next(),testing.next());
assertTrue(testing.hasPrevious());
assertEquals(expected.previous(),testing.previous());
assertTrue(testing.hasNext());
assertEquals(expected.next(),testing.next());
}
// walk all the way back
walkBackward(expected,testing);
for(int i=0;i<list.size();i++) {
// walk forward i
for(int j=0;j<i;j++) {
assertEquals(expected.nextIndex(),testing.nextIndex());
assertEquals(expected.previousIndex(),testing.previousIndex());
assertTrue(expected.hasNext()); // if this one fails we've got a logic error in the test
assertTrue(testing.hasNext());
assertEquals(expected.next(),testing.next());
}
// walk back i/2
for(int j=0;j<i/2;j++) {
assertEquals(expected.nextIndex(),testing.nextIndex());
assertEquals(expected.previousIndex(),testing.previousIndex());
assertTrue(expected.hasPrevious()); // if this one fails we've got a logic error in the test
assertTrue(testing.hasPrevious());
assertEquals(expected.previous(),testing.previous());
}
// walk forward i/2
for(int j=0;j<i/2;j++) {
assertEquals(expected.nextIndex(),testing.nextIndex());
assertEquals(expected.previousIndex(),testing.previousIndex());
assertTrue(expected.hasNext()); // if this one fails we've got a logic error in the test
assertTrue(testing.hasNext());
assertEquals(expected.next(),testing.next());
}
// walk back i
for(int j=0;j<i;j++) {
assertEquals(expected.nextIndex(),testing.nextIndex());
assertEquals(expected.previousIndex(),testing.previousIndex());
assertTrue(expected.hasPrevious()); // if this one fails we've got a logic error in the test
assertTrue(testing.hasPrevious());
assertEquals(expected.previous(),testing.previous());
}
}
// random walk
StringBuffer walkdescr = new StringBuffer(500);
for(int i=0;i<500;i++) {
if(random.nextBoolean()) {
// step forward
walkdescr.append("+");
if(expected.hasNext()) {
assertEquals(walkdescr.toString(),expected.next(),testing.next());
}
} else {
// step backward
walkdescr.append("-");
if(expected.hasPrevious()) {
assertEquals(walkdescr.toString(),expected.previous(),testing.previous());
}
}
assertEquals(walkdescr.toString(),expected.nextIndex(),testing.nextIndex());
assertEquals(walkdescr.toString(),expected.previousIndex(),testing.previousIndex());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -