private void testRemoveAndAdd_HigherPriority(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(5); DummyHeapEntry entry1 = new DummyHeapEntry(3); DummyHeapEntry entry2 = new DummyHeapEntry(6); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Assert.assertEquals(3, pq.size()); // test removing an element and adding it with higher priority (=lower value) pq.remove(entry0); Assert.assertEquals(2, pq.size()); pq.add(entry0, 2.5); Assert.assertEquals(3, pq.size()); assertEqualsHE(entry0, pq.poll()); assertEqualsHE(entry1, pq.poll()); assertEqualsHE(entry2, pq.poll()); Assert.assertNull(pq.poll()); }
private void testAdd(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(5); DummyHeapEntry entry1 = new DummyHeapEntry(3); DummyHeapEntry entry2 = new DummyHeapEntry(6); Assert.assertEquals(0, pq.size()); pq.add(entry0, 1.0); Assert.assertEquals(1, pq.size()); pq.add(entry1, 2.0); Assert.assertEquals(2, pq.size()); pq.add(entry2, 2.0); // different element with same priority Assert.assertEquals(3, pq.size()); pq.add(entry2, 3.0); // same element with different priority Assert.assertEquals(3, pq.size()); // should not be added! Assert.assertEquals(3, iteratorElementCount(pq.iterator())); }
pq.add(entry0, Double.MAX_VALUE); pq.add(entry1, Double.MAX_VALUE); pq.add(entry2, Double.MAX_VALUE); pq.add(entry3, Double.MAX_VALUE); while(!pq.isEmpty()) pq.poll(); pq.add(entry2, 5.0); pq.add(entry3, 5.0); pq.add(entry1, 5.0); pq.add(entry0, 5.0); Assert.assertEquals(4, pq.size()); assertEqualsHE(entry0, pq.poll()); Assert.assertEquals(3, pq.size()); assertEqualsHE(entry1, pq.poll()); Assert.assertEquals(2, pq.size()); assertEqualsHE(entry2, pq.poll()); Assert.assertEquals(1, pq.size()); assertEqualsHE(entry3, pq.poll()); Assert.assertEquals(0, pq.size()); Assert.assertNull(pq.poll());
private void testPoll2(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(0); DummyHeapEntry entry1 = new DummyHeapEntry(1); DummyHeapEntry entry2 = new DummyHeapEntry(2); DummyHeapEntry entry3 = new DummyHeapEntry(3); DummyHeapEntry entry4 = new DummyHeapEntry(4); DummyHeapEntry entry5 = new DummyHeapEntry(5); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Assert.assertEquals(3, pq.size()); assertEqualsHE(entry1, pq.poll()); Assert.assertEquals(2, pq.size()); pq.add(entry3, 1.0); pq.add(entry4, 4.0); pq.add(entry5, 9.0); Assert.assertEquals(5, pq.size()); assertEqualsHE(entry3, pq.poll()); assertEqualsHE(entry4, pq.poll()); assertEqualsHE(entry0, pq.poll()); assertEqualsHE(entry2, pq.poll()); assertEqualsHE(entry5, pq.poll()); Assert.assertEquals(0, pq.size()); Assert.assertNull(pq.poll()); }
pq.add(entry0, Double.MAX_VALUE); pq.add(entry1, Double.MAX_VALUE); pq.add(entry2, Double.MAX_VALUE); pq.add(entry3, Double.MAX_VALUE); pq.add(entry4, Double.MAX_VALUE); pq.add(entry5, Double.MAX_VALUE); pq.add(entry6, Double.MAX_VALUE); pq.add(entry7, Double.MAX_VALUE); pq.add(entry8, Double.MAX_VALUE); pq.add(entry9, Double.MAX_VALUE); while(!pq.isEmpty()) pq.poll(); pq.add(entry3, 5.0); pq.add(entry7, 5.0); pq.add(entry2, 5.0); pq.add(entry4, 5.0); pq.add(entry1, 5.0); pq.add(entry9, 5.0); pq.add(entry6, 5.0); pq.add(entry5, 5.0); pq.add(entry0, 5.0); pq.add(entry8, 5.0); assertEqualsHE(entry0, pq.poll()); assertEqualsHE(entry1, pq.poll()); assertEqualsHE(entry2, pq.poll()); assertEqualsHE(entry3, pq.poll()); assertEqualsHE(entry4, pq.poll()); assertEqualsHE(entry5, pq.poll()); assertEqualsHE(entry6, pq.poll());
private void testIterator_ConcurrentModification_poll(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(5); DummyHeapEntry entry1 = new DummyHeapEntry(3); DummyHeapEntry entry2 = new DummyHeapEntry(6); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Iterator<?> iter = pq.iterator(); Assert.assertTrue(iter.hasNext()); Assert.assertNotNull(iter.next()); pq.poll(); Assert.assertTrue(iter.hasNext()); try { iter.next(); Assert.fail("missing ConcurrentModificationException"); } catch (ConcurrentModificationException e) { log.info("catched expected exception.", e); } iter = pq.iterator(); // but a new iterator must work again Assert.assertTrue(iter.hasNext()); Assert.assertNotNull(iter.next()); }
private void testIterator_RemoveUnsupported(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(5); DummyHeapEntry entry1 = new DummyHeapEntry(3); DummyHeapEntry entry2 = new DummyHeapEntry(6); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Iterator<?> iter = pq.iterator(); Assert.assertTrue(iter.hasNext()); Assert.assertNotNull(iter.next()); try { iter.remove(); Assert.fail("missing UnsupportedOperationException"); } catch (UnsupportedOperationException e) { log.info("catched expected exception.", e); } }
private void testOddOrder(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(0); DummyHeapEntry entry1 = new DummyHeapEntry(1); DummyHeapEntry entry2 = new DummyHeapEntry(2); DummyHeapEntry entry3 = new DummyHeapEntry(3); pq.add(entry0, 0.0); pq.add(entry3, 3.0); pq.add(entry1, 1.0); pq.add(entry2, 2.0); assertEqualsHE(entry0, pq.poll()); assertEqualsHE(entry1, pq.poll()); assertEqualsHE(entry2, pq.poll()); assertEqualsHE(entry3, pq.poll()); Assert.assertNull(pq.poll()); }
private void testIterator_ConcurrentModification_remove(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(5); DummyHeapEntry entry1 = new DummyHeapEntry(3); DummyHeapEntry entry2 = new DummyHeapEntry(6); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Iterator<?> iter = pq.iterator(); Assert.assertTrue(iter.hasNext()); Assert.assertNotNull(iter.next()); Assert.assertTrue(pq.remove(entry0)); Assert.assertTrue(iter.hasNext()); try { iter.next(); Assert.fail("missing ConcurrentModificationException"); } catch (ConcurrentModificationException e) { log.info("catched expected exception.", e); } iter = pq.iterator(); // but a new iterator must work again Assert.assertTrue(iter.hasNext()); Assert.assertNotNull(iter.next()); Assert.assertFalse(pq.remove(entry0)); // cannot be removed, so it's no change Assert.assertTrue(iter.hasNext()); Assert.assertNotNull(iter.next()); }
DummyHeapEntry entry9 = new DummyHeapEntry(9); DummyHeapEntry entry10 = new DummyHeapEntry(10); pq.add(entry0, 5.0); pq.add(entry1, 5.0); pq.add(entry2, 5.0); pq.add(entry3, 5.0); pq.add(entry4, 5.0); pq.add(entry5, 5.0); pq.add(entry6, 5.0); pq.add(entry7, 5.0); pq.add(entry8, 5.0); pq.add(entry9, 5.0); pq.add(entry10, 5.0); Assert.fail("missing NullPointerException.");
pq.add(entry1, Double.MAX_VALUE); pq.add(entry0, Double.MAX_VALUE); pq.add(entry2, Double.MAX_VALUE); while(!pq.isEmpty()) pq.poll(); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Assert.assertEquals(3, pq.size()); pq.decreaseKey(entry0, 2); Assert.assertEquals(3, pq.size()); assertEqualsHE(entry0, pq.poll()); assertEqualsHE(entry1, pq.poll()); assertEqualsHE(entry2, pq.poll()); Assert.assertNull(pq.poll()); pq.add(entry0, 5.0); pq.add(entry1, 5.0); pq.add(entry2, 6.0); Assert.assertEquals(3, pq.size()); pq.decreaseKey(entry2, 4.0); Assert.assertEquals(3, pq.size()); assertEqualsHE(entry2, pq.poll()); assertEqualsHE(entry1, pq.poll()); assertEqualsHE(entry0, pq.poll()); Assert.assertNull(pq.poll());
private void testPoll(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(5); DummyHeapEntry entry1 = new DummyHeapEntry(3); DummyHeapEntry entry2 = new DummyHeapEntry(6); DummyHeapEntry entry3 = new DummyHeapEntry(1); DummyHeapEntry entry4 = new DummyHeapEntry(4); DummyHeapEntry entry5 = new DummyHeapEntry(9); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Assert.assertEquals(3, pq.size()); assertEqualsHE(entry1, pq.poll()); Assert.assertEquals(2, pq.size()); pq.add(entry3, 1.0); pq.add(entry4, 4.0); pq.add(entry5, 9.0); Assert.assertEquals(5, pq.size()); assertEqualsHE(entry3, pq.poll()); assertEqualsHE(entry4, pq.poll()); assertEqualsHE(entry0, pq.poll()); assertEqualsHE(entry2, pq.poll()); assertEqualsHE(entry5, pq.poll()); Assert.assertEquals(0, pq.size()); Assert.assertNull(pq.poll()); }
private void testIterator_ConcurrentModification_add(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(5); DummyHeapEntry entry1 = new DummyHeapEntry(3); DummyHeapEntry entry2 = new DummyHeapEntry(6); DummyHeapEntry entry3 = new DummyHeapEntry(4); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Iterator<?> iter = pq.iterator(); Assert.assertTrue(iter.hasNext()); Assert.assertNotNull(iter.next()); pq.add(entry3, 4.0); Assert.assertTrue(iter.hasNext()); try { iter.next(); Assert.fail("missing ConcurrentModificationException"); } catch (ConcurrentModificationException e) { log.info("catched expected exception.", e); } iter = pq.iterator(); // but a new iterator must work again Assert.assertTrue(iter.hasNext()); Assert.assertNotNull(iter.next()); }
public PointingAgent( final Person person, final ReplanningGroup group, final WeightCalculator weight) { this.id = person.getId(); this.records = new PlanRecord[ person.getPlans().size() ]; this.heap = new BinaryMinHeap<>( records.length ); int i = 0; for ( Plan p : person.getPlans() ) { records[ i ] = new PlanRecord( this, p, weight.getWeight( p, group ), // this is used by the binary heap to be efficient: // it asks the user to set the index of the element in the // internal array by himself. i); final boolean added = this.heap.add( records[ i ], // inverse priority: we want decreasing order -records[ i ].getWeight() ); if ( !added ) throw new RuntimeException(); i++; } }
private void testRemoveAndAdd_LowerPriority(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(5); DummyHeapEntry entry1 = new DummyHeapEntry(3); DummyHeapEntry entry2 = new DummyHeapEntry(6); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Assert.assertEquals(3, pq.size()); // test removing an element and adding it with lower priority (=higher value) pq.remove(entry0); Assert.assertEquals(2, pq.size()); pq.add(entry0, 7.0); Assert.assertEquals(3, pq.size()); assertEqualsHE(entry1, pq.poll()); assertEqualsHE(entry2, pq.poll()); assertEqualsHE(entry0, pq.poll()); Assert.assertNull(pq.poll()); }
private void testAdd_Null(MinHeap<HasIndex> pq) { try { pq.add(null, 1.0); Assert.fail("missing NullPointerException."); } catch (NullPointerException e) { log.info("catched expected exception. ", e); } Assert.assertEquals(0, pq.size()); Assert.assertEquals(0, iteratorElementCount(pq.iterator())); }
private void testIterator(MinHeap<HasIndex> pq) { DummyHeapEntry entry0 = new DummyHeapEntry(5); DummyHeapEntry entry1 = new DummyHeapEntry(3); DummyHeapEntry entry2 = new DummyHeapEntry(6); DummyHeapEntry entry3 = new DummyHeapEntry(4); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Collection<?> coll = getIteratorCollection(pq.iterator()); Assert.assertEquals(3, coll.size()); Assert.assertTrue(coll.contains(entry0)); Assert.assertTrue(coll.contains(entry1)); Assert.assertTrue(coll.contains(entry2)); Assert.assertFalse(coll.contains(entry3)); }
DummyHeapEntry entry2 = new DummyHeapEntry(6); DummyHeapEntry entry3 = new DummyHeapEntry(4); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); Collection<?> coll = getIteratorCollection(pq.iterator()); Assert.assertEquals(3, coll.size()); Assert.assertTrue(coll.contains(entry0)); Assert.assertTrue(pq.remove(entry0)); Assert.assertEquals(2, pq.size()); coll = getIteratorCollection(pq.iterator()); Assert.assertEquals(2, coll.size()); Assert.assertFalse(coll.contains(entry0)); Assert.assertFalse(pq.remove(entry0)); Assert.assertEquals(2, pq.size()); coll = getIteratorCollection(pq.iterator()); Assert.assertEquals(2, coll.size()); Assert.assertFalse(pq.remove(null)); Assert.assertEquals(2, pq.size()); coll = getIteratorCollection(pq.iterator()); Assert.assertEquals(2, coll.size()); Assert.assertTrue(coll.contains(entry1)); assertEqualsHE(entry1, pq.poll()); assertEqualsHE(entry2, pq.poll());