/** * Transforms the content of the heap into an index. * * <p> * The heap contents are flushed as a result, so is left ready for another use. * </p> * * @return a valid likelihood index. */ private int alleleHeapToIndex() { if (alleleHeap.size() != ploidy) throw new IllegalArgumentException("the sum of allele counts must be equal to the ploidy of the calculator"); if (alleleHeap.peek() >= alleleCount) throw new IllegalArgumentException("invalid allele " + alleleHeap.peek() + " more than the maximum " + (alleleCount - 1)); int result = 0; for (int p = ploidy; p > 0; p--) { final int allele = alleleHeap.remove(); if (allele < 0) throw new IllegalArgumentException("invalid allele " + allele + " must be equal or greater than 0 "); result += alleleFirstGenotypeOffsetByPloidy[p][allele]; } return result; }
@Test(dataProvider = "capacityData", dependsOnMethods = {"testEmptynessAndSize"}) public void testRemove(final int initialCapacity, final int elementCount) { final IntMaxHeap heap = new IntMaxHeap(initialCapacity); final Random rnd = Utils.getRandomGenerator(); final List<Integer> values = new ArrayList<>(elementCount); for (int i = 0; i < elementCount; i++) { final int v = rnd.nextInt(); values.add(v); heap.add(v); } Collections.sort(values, Collections.reverseOrder()); for (int i = 0; i < elementCount; i++) { Assert.assertEquals(heap.remove(),(int)values.get(i), "element-count = " + elementCount + ", initial-capacity = " + initialCapacity); Assert.assertEquals(heap.size(),elementCount - i - 1); } }
@Test(dataProvider = "capacityData", dependsOnMethods = {"testCapacity"}) public void testAddArray(final int initialCapacity, final int elementCount) { final IntMaxHeap addHeap = new IntMaxHeap(initialCapacity); final IntMaxHeap arrayAddHeap = new IntMaxHeap(initialCapacity); final Random rnd = Utils.getRandomGenerator(); final int[] values = new int[elementCount]; for (int i = 0; i < elementCount; i++) { final int v = rnd.nextInt(); values[i] = v; addHeap.add(v); } arrayAddHeap.add(values); Assert.assertEquals(arrayAddHeap.size(),addHeap.size()); while (!arrayAddHeap.isEmpty()) Assert.assertEquals(arrayAddHeap.remove(),addHeap.remove()); }