public void calcLeastCostTree(Node fromNode, double startTime) { augmentIterationId(); PseudoRemovePriorityQueue<Node> pendingNodes = new PseudoRemovePriorityQueue<Node>(500); // initFromNode DijkstraNodeData data = getData(fromNode); visitNode(fromNode, data, pendingNodes, this.estimatedStartTime, 0, null); while (true) { Node outNode = pendingNodes.poll(); if (outNode == null) return; relaxNode(outNode, null, pendingNodes); } }
public void calcLeastCostPathTree(Node fromNode, double startTime) { this.fromNode = fromNode; this.startTime = startTime; augmentIterationId(); PseudoRemovePriorityQueue<Node> pendingNodes = new PseudoRemovePriorityQueue<Node>(500);// TODO other options?? initFromNode(fromNode, null, startTime, pendingNodes); while (!pendingNodes.isEmpty()) { relaxNode(pendingNodes.poll(), null, pendingNodes); } }
public void testRemoveAndAdd_HigherPriority() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); pq.add(Integer.valueOf(5), 5.0); pq.add(Integer.valueOf(3), 3.0); pq.add(Integer.valueOf(6), 6.0); assertEquals(3, pq.size()); // test removing an element and adding it with higher priority (=lower value) pq.remove(Integer.valueOf(5)); assertEquals(2, pq.size()); pq.add(Integer.valueOf(5), 2.5); assertEquals(3, pq.size()); assertEquals(Integer.valueOf(5), pq.poll()); assertEquals(Integer.valueOf(3), pq.poll()); assertEquals(Integer.valueOf(6), pq.poll()); assertNull(pq.poll()); }
public void testIterator_RemoveUnsupported() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); pq.add(Integer.valueOf(5), 5.0); pq.add(Integer.valueOf(3), 3.0); pq.add(Integer.valueOf(6), 6.0); Iterator<Integer> iter = pq.iterator(); assertTrue(iter.hasNext()); assertNotNull(iter.next()); try { iter.remove(); fail("missing UnsupportedOperationException"); } catch (UnsupportedOperationException e) { log.info("catched expected exception.", e); } }
public void testIterator_ConcurrentModification_poll() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); pq.add(Integer.valueOf(5), 5.0); pq.add(Integer.valueOf(3), 3.0); pq.add(Integer.valueOf(6), 6.0); Iterator<Integer> iter = pq.iterator(); assertTrue(iter.hasNext()); assertNotNull(iter.next()); pq.poll(); assertTrue(iter.hasNext()); try { iter.next(); fail("missing ConcurrentModificationException"); } catch (ConcurrentModificationException e) { log.info("catched expected exception.", e); } iter = pq.iterator(); // but a new iterator must work again assertTrue(iter.hasNext()); assertNotNull(iter.next()); }
public void testAdd() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); assertEquals(0, pq.size()); pq.add(Integer.valueOf(1), 1.0); assertEquals(1, pq.size()); pq.add(Integer.valueOf(2), 2.0); assertEquals(2, pq.size()); pq.add(Integer.valueOf(3), 2.0); // different element with same priority assertEquals(3, pq.size()); pq.add(Integer.valueOf(3), 3.0); // same element with different priority assertEquals(3, pq.size()); // should not be added! assertEquals(3, iteratorElementCount(pq.iterator())); }
public void testIterator_ConcurrentModification_remove() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); pq.add(Integer.valueOf(5), 5.0); pq.add(Integer.valueOf(3), 3.0); pq.add(Integer.valueOf(6), 6.0); Iterator<Integer> iter = pq.iterator(); assertTrue(iter.hasNext()); assertNotNull(iter.next()); assertTrue(pq.remove(Integer.valueOf(5))); assertTrue(iter.hasNext()); try { iter.next(); fail("missing ConcurrentModificationException"); } catch (ConcurrentModificationException e) { log.info("catched expected exception.", e); } iter = pq.iterator(); // but a new iterator must work again assertTrue(iter.hasNext()); assertNotNull(iter.next()); assertFalse(pq.remove(Integer.valueOf(5))); // cannot be removed, so it's no change assertTrue(iter.hasNext()); assertNotNull(iter.next()); }
/** * Allow replacing the RouterPriorityQueue. */ @SuppressWarnings("static-method") /*package*/ RouterPriorityQueue<? extends Node> createRouterPriorityQueue() { return new PseudoRemovePriorityQueue<>(500); }
/** * Inserts the given Node n into the pendingNodes queue and updates its time * and cost information. * * @param n * The Node that is revisited. * @param data * The data for n. * @param pendingNodes * The nodes visited and not processed yet. * @param time * The time of the visit of n. * @param cost * The accumulated cost at the time of the visit of n. * @param outLink * The node from which we came visiting n. */ protected void visitNode(final Node n, final DijkstraNodeData data, final PseudoRemovePriorityQueue<Node> pendingNodes, final double time, final double cost, final Link outLink) { data.visit(outLink, cost, time, getIterationId()); pendingNodes.add(n, getPriority(data)); }
public void testRemoveAndAdd_LowerPriority() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); pq.add(Integer.valueOf(5), 5.0); pq.add(Integer.valueOf(3), 3.0); pq.add(Integer.valueOf(6), 6.0); assertEquals(3, pq.size()); // test removing an element and adding it with lower priority (=higher value) pq.remove(Integer.valueOf(5)); assertEquals(2, pq.size()); pq.add(Integer.valueOf(5), 7.0); assertEquals(3, pq.size()); assertEquals(Integer.valueOf(3), pq.poll()); assertEquals(Integer.valueOf(6), pq.poll()); assertEquals(Integer.valueOf(5), pq.poll()); assertNull(pq.poll()); }
public void testIterator() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); pq.add(Integer.valueOf(5), 5.0); pq.add(Integer.valueOf(3), 3.0); pq.add(Integer.valueOf(6), 6.0); Collection<Integer> coll = getIteratorCollection(pq.iterator()); assertEquals(3, coll.size()); assertTrue(coll.contains(Integer.valueOf(5))); assertTrue(coll.contains(Integer.valueOf(3))); assertTrue(coll.contains(Integer.valueOf(6))); assertFalse(coll.contains(Integer.valueOf(4))); }
public void testAdd_Null() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); try { pq.add(null, 1.0); fail("missing NullPointerException."); } catch (NullPointerException e) { log.info("catched expected exception. ", e); } assertEquals(0, pq.size()); assertEquals(0, iteratorElementCount(pq.iterator())); }
public void testPoll() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); pq.add(Integer.valueOf(5), 5.0); pq.add(Integer.valueOf(3), 3.0); pq.add(Integer.valueOf(6), 6.0); assertEquals(3, pq.size()); assertEquals(Integer.valueOf(3), pq.poll()); assertEquals(2, pq.size()); pq.add(Integer.valueOf(1), 1.0); pq.add(Integer.valueOf(4), 4.0); pq.add(Integer.valueOf(9), 9.0); assertEquals(5, pq.size()); assertEquals(Integer.valueOf(1), pq.poll()); assertEquals(Integer.valueOf(4), pq.poll()); assertEquals(Integer.valueOf(5), pq.poll()); assertEquals(Integer.valueOf(6), pq.poll()); assertEquals(Integer.valueOf(9), pq.poll()); assertEquals(0, pq.size()); assertNull(pq.poll()); }
public void calcLeastCostTree(Node fromNode, double startTime) { augmentIterationId(); PseudoRemovePriorityQueue<Node> pendingNodes = new PseudoRemovePriorityQueue<Node>(500); //initFromNode DijkstraNodeData data = getData(fromNode); visitNode(fromNode, data, pendingNodes, startTime, 0, null); while (true) { Node outNode = pendingNodes.poll(); if (outNode == null) return; relaxNode(outNode, null, pendingNodes); } } }
public void testIterator_ConcurrentModification_add() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); pq.add(Integer.valueOf(5), 5.0); pq.add(Integer.valueOf(3), 3.0); pq.add(Integer.valueOf(6), 6.0); Iterator<Integer> iter = pq.iterator(); assertTrue(iter.hasNext()); assertNotNull(iter.next()); pq.add(Integer.valueOf(4), 4.0); assertTrue(iter.hasNext()); try { iter.next(); fail("missing ConcurrentModificationException"); } catch (ConcurrentModificationException e) { log.info("catched expected exception.", e); } iter = pq.iterator(); // but a new iterator must work again assertTrue(iter.hasNext()); assertNotNull(iter.next()); }
/** * Changes the position of the given Node n in the pendingNodes queue and * updates its time and cost information. * * @param n * The Node that is revisited. * @param data * The data for n. * @param pendingNodes * The nodes visited and not processed yet. * @param time * The time of the visit of n. * @param cost * The accumulated cost at the time of the visit of n. * @param outLink * The link from which we came visiting n. */ void revisitNode(final Node n, final DijkstraNodeData data, final PseudoRemovePriorityQueue<Node> pendingNodes, final double time, final double cost, final Link outLink) { pendingNodes.remove(n); data.visit(outLink, cost, time, getIterationId()); pendingNodes.add(n, getPriority(data)); }
PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); Integer entry0 = new Integer(5); Integer entry1 = new Integer(3); Integer entry2 = new Integer(6); pq.add(entry0, 5.0); pq.add(entry1, 3.0); pq.add(entry2, 6.0); assertEquals(3, pq.size()); pq.decreaseKey(entry0, 2); assertEquals(3, pq.size()); assertEquals(entry0, pq.poll()); assertEquals(entry1, pq.poll()); assertEquals(entry2, pq.poll()); assertNull(pq.poll()); pq.add(entry0, 5.0); pq.add(entry1, 5.0); pq.add(entry2, 6.0); assertEquals(3, pq.size()); pq.decreaseKey(entry2, 4.0); assertEquals(3, pq.size()); assertEquals(entry2, pq.poll()); assertEquals(entry1, pq.poll()); assertEquals(entry0, pq.poll()); assertNull(pq.poll());
PseudoRemovePriorityQueue<Node> pendingNodes = new PseudoRemovePriorityQueue<Node>(500); initFromNode(fromNode, startTime, pendingNodes); Node outNode = pendingNodes.poll();
public void testRemove() { PseudoRemovePriorityQueue<Integer> pq = new PseudoRemovePriorityQueue<Integer>(10); pq.add(Integer.valueOf(5), 5.0); pq.add(Integer.valueOf(3), 3.0); pq.add(Integer.valueOf(6), 6.0); Collection<Integer> coll = getIteratorCollection(pq.iterator()); assertEquals(3, coll.size()); assertTrue(coll.contains(Integer.valueOf(5))); assertTrue(pq.remove(Integer.valueOf(5))); assertEquals(2, pq.size()); coll = getIteratorCollection(pq.iterator()); assertEquals(2, coll.size()); assertFalse(coll.contains(Integer.valueOf(5))); assertFalse(pq.remove(Integer.valueOf(5))); assertEquals(2, pq.size()); coll = getIteratorCollection(pq.iterator()); assertEquals(2, coll.size()); assertFalse(pq.remove(null)); assertEquals(2, pq.size()); coll = getIteratorCollection(pq.iterator()); assertEquals(2, coll.size()); assertTrue(coll.contains(Integer.valueOf(3))); assertEquals(Integer.valueOf(3), pq.poll()); assertEquals(Integer.valueOf(6), pq.poll()); assertNull(pq.poll());