LUCENE-8402: Remove invalid identityHashCode assertions in TestPriorityQueue.

This commit is contained in:
Jim Ferenczi 2018-07-20 10:13:19 +02:00
parent f6e9d00b90
commit a19bc5ecb6
1 changed files with 84 additions and 94 deletions

View File

@ -32,13 +32,6 @@ public class TestPriorityQueue extends LuceneTestCase {
@Override
protected boolean lessThan(Integer a, Integer b) {
if (a.equals(b)) {
assert (a != b);
int hashA = System.identityHashCode(a);
int hashB = System.identityHashCode(b);
assert (hashA != hashB);
return hashA < hashB;
}
return (a < b);
}
@ -47,93 +40,91 @@ public class TestPriorityQueue extends LuceneTestCase {
for (int i = 1; i <= size(); i++) {
int parent = i >>> 1;
if (parent > 1) {
assertTrue(lessThan((Integer) heapArray[parent],
(Integer) heapArray[i]));
if (lessThan((Integer) heapArray[parent], (Integer) heapArray[i]) == false) {
assertEquals(heapArray[parent], heapArray[i]);
}
}
}
}
}
public void testPQ() throws Exception {
testPQ(atLeast(10000), random());
public void testPQ() throws Exception {
testPQ(atLeast(10000), random());
}
public static void testPQ(int count, Random gen) {
PriorityQueue<Integer> pq = new IntegerQueue(count);
int sum = 0, sum2 = 0;
for (int i = 0; i < count; i++) {
int next = gen.nextInt();
sum += next;
pq.add(next);
}
public static void testPQ(int count, Random gen) {
PriorityQueue<Integer> pq = new IntegerQueue(count);
int sum = 0, sum2 = 0;
// Date end = new Date();
for (int i = 0; i < count; i++)
{
int next = gen.nextInt();
sum += next;
pq.add(next);
}
// System.out.print(((float)(end.getTime()-start.getTime()) / count) * 1000);
// System.out.println(" microseconds/put");
// Date end = new Date();
// start = new Date();
// System.out.print(((float)(end.getTime()-start.getTime()) / count) * 1000);
// System.out.println(" microseconds/put");
// start = new Date();
int last = Integer.MIN_VALUE;
for (int i = 0; i < count; i++)
{
Integer next = pq.pop();
assertTrue(next.intValue() >= last);
last = next.intValue();
sum2 += last;
}
assertEquals(sum, sum2);
// end = new Date();
// System.out.print(((float)(end.getTime()-start.getTime()) / count) * 1000);
// System.out.println(" microseconds/pop");
int last = Integer.MIN_VALUE;
for (int i = 0; i < count; i++) {
Integer next = pq.pop();
assertTrue(next.intValue() >= last);
last = next.intValue();
sum2 += last;
}
public void testClear() {
PriorityQueue<Integer> pq = new IntegerQueue(3);
pq.add(2);
pq.add(3);
pq.add(1);
assertEquals(3, pq.size());
pq.clear();
assertEquals(0, pq.size());
}
public void testFixedSize() {
PriorityQueue<Integer> pq = new IntegerQueue(3);
pq.insertWithOverflow(2);
pq.insertWithOverflow(3);
pq.insertWithOverflow(1);
pq.insertWithOverflow(5);
pq.insertWithOverflow(7);
pq.insertWithOverflow(1);
assertEquals(3, pq.size());
assertEquals((Integer) 3, pq.top());
}
public void testInsertWithOverflow() {
int size = 4;
PriorityQueue<Integer> pq = new IntegerQueue(size);
Integer i1 = 2;
Integer i2 = 3;
Integer i3 = 1;
Integer i4 = 5;
Integer i5 = 7;
Integer i6 = 1;
assertNull(pq.insertWithOverflow(i1));
assertNull(pq.insertWithOverflow(i2));
assertNull(pq.insertWithOverflow(i3));
assertNull(pq.insertWithOverflow(i4));
assertTrue(pq.insertWithOverflow(i5) == i3); // i3 should have been dropped
assertTrue(pq.insertWithOverflow(i6) == i6); // i6 should not have been inserted
assertEquals(size, pq.size());
assertEquals((Integer) 2, pq.top());
}
assertEquals(sum, sum2);
// end = new Date();
// System.out.print(((float)(end.getTime()-start.getTime()) / count) * 1000);
// System.out.println(" microseconds/pop");
}
public void testClear() {
PriorityQueue<Integer> pq = new IntegerQueue(3);
pq.add(2);
pq.add(3);
pq.add(1);
assertEquals(3, pq.size());
pq.clear();
assertEquals(0, pq.size());
}
public void testFixedSize() {
PriorityQueue<Integer> pq = new IntegerQueue(3);
pq.insertWithOverflow(2);
pq.insertWithOverflow(3);
pq.insertWithOverflow(1);
pq.insertWithOverflow(5);
pq.insertWithOverflow(7);
pq.insertWithOverflow(1);
assertEquals(3, pq.size());
assertEquals((Integer) 3, pq.top());
}
public void testInsertWithOverflow() {
int size = 4;
PriorityQueue<Integer> pq = new IntegerQueue(size);
Integer i1 = 2;
Integer i2 = 3;
Integer i3 = 1;
Integer i4 = 5;
Integer i5 = 7;
Integer i6 = 1;
assertNull(pq.insertWithOverflow(i1));
assertNull(pq.insertWithOverflow(i2));
assertNull(pq.insertWithOverflow(i3));
assertNull(pq.insertWithOverflow(i4));
assertTrue(pq.insertWithOverflow(i5) == i3); // i3 should have been dropped
assertTrue(pq.insertWithOverflow(i6) == i6); // i6 should not have been inserted
assertEquals(size, pq.size());
assertEquals((Integer) 2, pq.top());
}
public void testRemovalsAndInsertions() {
Random random = random();
@ -193,14 +184,14 @@ public class TestPriorityQueue extends LuceneTestCase {
public void testIteratorEmpty() {
IntegerQueue queue = new IntegerQueue(3);
Iterator<Integer> it = queue.iterator();
assertFalse(it.hasNext());
expectThrows(NoSuchElementException.class, () -> {
it.next();
});
}
public void testIteratorOne() {
IntegerQueue queue = new IntegerQueue(3);
@ -213,7 +204,7 @@ public class TestPriorityQueue extends LuceneTestCase {
it.next();
});
}
public void testIteratorTwo() {
IntegerQueue queue = new IntegerQueue(3);
@ -230,7 +221,6 @@ public class TestPriorityQueue extends LuceneTestCase {
});
}
@AwaitsFix(bugUrl="https://issues.apache.org/jira/browse/LUCENE-8402")
public void testIteratorRandom() {
final int maxSize = TestUtil.nextInt(random(), 1, 20);
IntegerQueue queue = new IntegerQueue(maxSize);
@ -256,13 +246,13 @@ public class TestPriorityQueue extends LuceneTestCase {
public void testMaxIntSize() {
expectThrows(IllegalArgumentException.class, () -> {
new PriorityQueue<Boolean>(Integer.MAX_VALUE) {
@Override
public boolean lessThan(Boolean a, Boolean b) {
// uncalled
return true;
}
};
});
new PriorityQueue<Boolean>(Integer.MAX_VALUE) {
@Override
public boolean lessThan(Boolean a, Boolean b) {
// uncalled
return true;
}
};
});
}
}