@Test public void testSort() throws Exception { final int NUM_RECORDS = 559273; final int numSegments = MEMORY_SIZE / MEMORY_PAGE_SIZE; final List<MemorySegment> memory = this.memoryManager.allocatePages(new DummyInvokable(), numSegments); FixedLengthRecordSorter<IntPair> sorter = newSortBuffer(memory); RandomIntPairGenerator generator = new RandomIntPairGenerator(SEED); // write the records IntPair record = new IntPair(); int num = -1; do { generator.next(record); num++; } while (sorter.write(record) && num < NUM_RECORDS); QuickSort qs = new QuickSort(); qs.sort(sorter); MutableObjectIterator<IntPair> iter = sorter.getIterator(); IntPair readTarget = new IntPair(); int current = 0; int last = 0; iter.next(readTarget); // readTarget.getFieldInto(0, last); last = readTarget.getKey(); while ((readTarget = iter.next(readTarget)) != null) { current = readTarget.getKey(); final int cmp = last - current; if (cmp > 0) { Assert.fail("Next key is not larger or equal to previous key."); } int tmp = current; current = last; last = tmp; } // release the memory occupied by the buffers this.memoryManager.release(sorter.dispose()); }
@Test public void testWriteAndIterator() throws Exception { final int numSegments = MEMORY_SIZE / MEMORY_PAGE_SIZE; final List<MemorySegment> memory = this.memoryManager.allocatePages(new DummyInvokable(), numSegments); FixedLengthRecordSorter<IntPair> sorter = newSortBuffer(memory); RandomIntPairGenerator generator = new RandomIntPairGenerator(SEED); // write the records IntPair record = new IntPair(); int num = -1; do { generator.next(record); num++; } while (sorter.write(record)); // re-read the records generator.reset(); MutableObjectIterator<IntPair> iter = sorter.getIterator(); IntPair readTarget = new IntPair(); int count = 0; while ((readTarget = iter.next(readTarget)) != null) { count++; generator.next(record); int rk = readTarget.getKey(); int gk = record.getKey(); int rv = readTarget.getValue(); int gv = record.getValue(); Assert.assertEquals("The re-read key is wrong", gk, rk); Assert.assertEquals("The re-read value is wrong", gv, rv); } Assert.assertEquals("Incorrect number of records", num, count); // release the memory occupied by the buffers this.memoryManager.release(sorter.dispose()); }