private void shouldIterateCorrectlyOver( Labels... data ) throws Exception { // GIVEN try ( AllEntriesLabelScanReader reader = new NativeAllEntriesLabelScanReader( store( data ), highestLabelId( data ) ) ) { // WHEN/THEN assertRanges( reader, data ); } }
@Test public void shouldSeeOverlappingRanges() throws Exception { int rangeSize = 4; // new ranges at: 0, 4, 8, 12 ... shouldIterateCorrectlyOver( labels( 0, rangeSize, 0, 1, 3, 55 ), labels( 3, rangeSize, 1, 2, 5, 6, 43 ), labels( 5, rangeSize, 8, 9, 15, 42 ), labels( 6, rangeSize, 4, 8, 12 ) ); }
@Test public void shouldSeeRangesFromRandomData() throws Exception { List<Labels> labels = randomData(); shouldIterateCorrectlyOver( labels.toArray( new Labels[labels.size()] ) ); }
private static void assertRanges( AllEntriesLabelScanReader reader, Labels[] data ) { Iterator<NodeLabelRange> iterator = reader.iterator(); long highestRangeId = highestRangeId( data ); for ( long rangeId = 0; rangeId <= highestRangeId; rangeId++ ) { SortedMap<Long/*nodeId*/,List<Long>/*labelIds*/> expected = rangeOf( data, rangeId ); if ( expected != null ) { assertTrue( "Was expecting range " + expected, iterator.hasNext() ); NodeLabelRange range = iterator.next(); assertEquals( rangeId, range.id() ); for ( Map.Entry<Long,List<Long>> expectedEntry : expected.entrySet() ) { long[] labels = range.labels( expectedEntry.getKey() ); assertArrayEquals( asArray( expectedEntry.getValue().iterator() ), labels ); } } // else there was nothing in this range } assertFalse( iterator.hasNext() ); }
private List<Labels> randomData() { List<Labels> labels = new ArrayList<>(); int labelCount = random.intBetween( 30, 100 ); int labelId = 0; for ( int i = 0; i < labelCount; i++ ) { labelId += random.intBetween( 1, 20 ); int nodeCount = random.intBetween( 20, 100 ); long[] nodeIds = new long[nodeCount]; long nodeId = 0; for ( int j = 0; j < nodeCount; j++ ) { nodeId += random.intBetween( 1, 100 ); nodeIds[j] = nodeId; } labels.add( labels( labelId, nodeIds ) ); } return labels; }
@Test public void shouldSeeNonOverlappingRanges() throws Exception { int rangeSize = 4; // new ranges at: 0, 4, 8, 12 ... shouldIterateCorrectlyOver( labels( 0, rangeSize, 0, 1, 2, 3 ), labels( 1, rangeSize, 4, 6 ), labels( 2, rangeSize, 12 ), labels( 3, rangeSize, 17, 18 ) ); }