private int bucket(long longBits, int depthIndex) { final int byteN = byteN(longBits, depthIndex); final int maxBuckets = CanonicalNodeNameOrder.maxBucketsForLevel(depthIndex); final int bucket = (byteN * maxBuckets) / 256; return bucket; }
private int bucket(long longBits, int depthIndex) { final int byteN = byteN(longBits, depthIndex); final int maxBuckets = CanonicalNodeNameOrder.maxBucketsForLevel(depthIndex); final int bucket = (byteN * maxBuckets) / 256; return bucket; }
@Test public void testMaxBucketsForLevel() { assertEquals(32, CanonicalNodeNameOrder.maxBucketsForLevel(0)); assertEquals(32, CanonicalNodeNameOrder.maxBucketsForLevel(1)); assertEquals(32, CanonicalNodeNameOrder.maxBucketsForLevel(2)); assertEquals(8, CanonicalNodeNameOrder.maxBucketsForLevel(3)); assertEquals(8, CanonicalNodeNameOrder.maxBucketsForLevel(4)); assertEquals(4, CanonicalNodeNameOrder.maxBucketsForLevel(5)); assertEquals(4, CanonicalNodeNameOrder.maxBucketsForLevel(6)); assertEquals(2, CanonicalNodeNameOrder.maxBucketsForLevel(7)); assertEquals(2, CanonicalNodeNameOrder.maxBucketsForLevel(8)); assertEquals(2, CanonicalNodeNameOrder.maxBucketsForLevel(9)); assertEquals(2, CanonicalNodeNameOrder.maxBucketsForLevel(10)); exception.expect(IllegalArgumentException.class); CanonicalNodeNameOrder.maxBucketsForLevel(-1); } }
@Test public void testBucketBucketFlatMoreDepth() { RevTree left = createFeaturesTree(leftSource, "f", CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0)); RevTree right = createFeaturesTree(rightSource, "f", CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0) + 1); PreOrderDiffWalk visitor = newVisitor(left, right); when(consumer.tree(any(NodeRef.class), any(NodeRef.class))).thenReturn(true); when(consumer.bucket(any(NodeRef.class), any(NodeRef.class), any(BucketIndex.class), any(Bucket.class), any(Bucket.class))).thenReturn(true); visitor.walk(consumer); verify(consumer, times(1)).tree(any(NodeRef.class), any(NodeRef.class)); // consumer.bucket should be called for depth 0 and then 1 verify(consumer, times(1)).bucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(0)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).bucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(1)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).feature((NodeRef) isNull(), any(NodeRef.class)); verify(consumer, times(1)).endBucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(0)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).endBucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(1)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).endTree(any(NodeRef.class), any(NodeRef.class)); verifyNoMoreInteractions(consumer); }
@Test public void testBucketBucketFlatMoreDepth() { RevTree left = testSupport.createFeaturesTree(leftSource, "f", CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0)); RevTree right = testSupport.createFeaturesTree(rightSource, "f", CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0) + 1); PreOrderDiffWalk visitor = newVisitor(left, right); when(consumer.tree(any(NodeRef.class), any(NodeRef.class))).thenReturn(true); when(consumer.bucket(any(NodeRef.class), any(NodeRef.class), any(BucketIndex.class), any(Bucket.class), any(Bucket.class))).thenReturn(true); visitor.walk(consumer); verify(consumer, times(1)).tree(any(NodeRef.class), any(NodeRef.class)); // consumer.bucket should be called for depth 0 and then 1 verify(consumer, times(1)).bucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(0)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).bucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(1)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).feature((NodeRef) isNull(), any(NodeRef.class)); verify(consumer, times(1)).endBucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(0)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).endBucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(1)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).endTree(any(NodeRef.class), any(NodeRef.class)); verifyNoMoreInteractions(consumer); }
@Test public void testBucketBucketFlatMoreDepth() { RevTree left = RevObjectTestSupport.INSTANCE.createFeaturesTree(leftSource, "f", CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0)); RevTree right = RevObjectTestSupport.INSTANCE.createFeaturesTree(rightSource, "f", CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0) + 1); PreOrderDiffWalk visitor = newVisitor(left, right); when(consumer.tree(any(NodeRef.class), any(NodeRef.class))).thenReturn(true); when(consumer.bucket(any(NodeRef.class), any(NodeRef.class), any(BucketIndex.class), any(Bucket.class), any(Bucket.class))).thenReturn(true); visitor.walk(consumer); verify(consumer, times(1)).tree(any(NodeRef.class), any(NodeRef.class)); // consumer.bucket should be called for depth 0 and then 1 verify(consumer, times(1)).bucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(0)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).bucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(1)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).feature((NodeRef) isNull(), any(NodeRef.class)); verify(consumer, times(1)).endBucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(0)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).endBucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(1)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).endTree(any(NodeRef.class), any(NodeRef.class)); verifyNoMoreInteractions(consumer); }
@Test public void testSkipBucket() { final int size = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); RevTree left = testSupport.createFeaturesTree(leftSource, "f", size);
@Test public void testBucketLeafThreeLevelsDepth() { final int leftsize = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); RevTree left = testSupport.createLargeFeaturesTree(leftSource, "f", leftsize, 0, false); assertDepth(left, leftSource, 3); final int rightsize = CanonicalNodeNameOrder.normalizedSizeLimit(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); final int overlapCount = 100; int runs = 1; for (int i = 0; i < runs; i++) testBucketLeafPerf(left, rightsize, overlapCount); }
@Test public void testSkipBucket() { // two bucket trees of depth 2 final int size = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); RevTree left = createFeaturesTree(leftSource, "f", size); RevTree right = createFeaturesTree(rightSource, "f", size, 0, true);// all features // changed assertDepth(left, leftSource, 2); assertDepth(right, rightSource, 2); PreOrderDiffWalk visitor = newVisitor(left, right); final NodeRef lroot = nodeFor(left); final NodeRef rroot = nodeFor(right); // consume the root tree when(consumer.tree(eq(lroot), eq(rroot))).thenReturn(true); // skip all buckets of depth 0 when(consumer.bucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(0)), any(Bucket.class), any(Bucket.class))).thenReturn(false); visitor.walk(consumer); verify(consumer, times(1)).tree(eq(lroot), eq(rroot)); verify(consumer, times(32)).bucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(0)), any(Bucket.class), any(Bucket.class)); // should not be any call to consumer.features as we skipped all buckets of depth 0 (which // point to leaf trees) verify(consumer, times(0)).feature(any(NodeRef.class), any(NodeRef.class)); verify(consumer, times(32)).endBucket(any(NodeRef.class), any(NodeRef.class), argThat(depthMatches(0)), any(Bucket.class), any(Bucket.class)); verify(consumer, times(1)).endTree(eq(lroot), eq(rroot)); verifyNoMoreInteractions(consumer); }
@Test public void testSkipBucket() { final int size = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); RevTree left = RevObjectTestSupport.INSTANCE.createFeaturesTree(leftSource, "f", size);
@Test public void testBucketLeafThreeLevelsDepth() { final int leftsize = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); RevTree left = createLargeFeaturesTree(leftSource, "f", leftsize, 0, false); assertDepth(left, leftSource, 3); final int rightsize = CanonicalNodeNameOrder.normalizedSizeLimit(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); final int overlapCount = 100; int runs = 1; for (int i = 0; i < runs; i++) testBucketLeafPerf(left, rightsize, overlapCount); }
@Test public void testBucketLeafThreeLevelsDepth() { final int leftsize = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); RevTree left = RevObjectTestSupport.INSTANCE.createLargeFeaturesTree(leftSource, "f", leftsize, 0, false); assertDepth(left, leftSource, 3); final int rightsize = CanonicalNodeNameOrder.normalizedSizeLimit(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); final int overlapCount = 100; int runs = 1; for (int i = 0; i < runs; i++) testBucketLeafPerf(left, rightsize, overlapCount); }
@Test public void testBucketLeafTwoLevelsDepth() { final int leftsize = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); RevTree left = testSupport.createFeaturesTree(leftSource, "f", leftsize); assertDepth(left, leftSource, 2); final int rightsize = CanonicalNodeNameOrder.normalizedSizeLimit(0); final int overlapCount = 100; testBucketLeafDeeper(left, rightsize, overlapCount); }
@Test public void testBucketLeafTwoLevelsDepth() { final int leftsize = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); RevTree left = RevObjectTestSupport.INSTANCE.createFeaturesTree(leftSource, "f", leftsize); assertDepth(left, leftSource, 2); final int rightsize = CanonicalNodeNameOrder.normalizedSizeLimit(0); final int overlapCount = 100; testBucketLeafDeeper(left, rightsize, overlapCount); }
@Test public void testLeafBucketTwoLevelsDepth() { final int leftsize = CanonicalNodeNameOrder.normalizedSizeLimit(0); final int rightsize = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); final int overlapCount = 100; RevTree right = RevObjectTestSupport.INSTANCE.createFeaturesTree(rightSource, "f", rightsize); assertDepth(right, rightSource, 2); testLeafBucketDeeper(leftsize, right, overlapCount); }
@Test public void testBucketLeafTwoLevelsDepth() { final int leftsize = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); RevTree left = createFeaturesTree(leftSource, "f", leftsize); assertDepth(left, leftSource, 2); final int rightsize = CanonicalNodeNameOrder.normalizedSizeLimit(0); final int overlapCount = 100; testBucketLeafDeeper(left, rightsize, overlapCount); }
@Test public void testLeafBucketTwoLevelsDepth() { final int leftsize = CanonicalNodeNameOrder.normalizedSizeLimit(0); final int rightsize = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); final int overlapCount = 100; RevTree right = testSupport.createFeaturesTree(rightSource, "f", rightsize); assertDepth(right, rightSource, 2); testLeafBucketDeeper(leftsize, right, overlapCount); }
@Test public void testLeafBucketTwoLevelsDepth() { final int leftsize = CanonicalNodeNameOrder.normalizedSizeLimit(0); final int rightsize = CanonicalNodeNameOrder.maxBucketsForLevel(0) * CanonicalNodeNameOrder.normalizedSizeLimit(0); final int overlapCount = 100; RevTree right = createFeaturesTree(rightSource, "f", rightsize); assertDepth(right, rightSource, 2); testLeafBucketDeeper(leftsize, right, overlapCount); }
final RevTree origRight = RevObjectTestSupport.INSTANCE.createFeaturesTree(leftSource, "f", CanonicalNodeNameOrder.normalizedSizeLimit(0) * CanonicalNodeNameOrder.maxBucketsForLevel(0));
final RevTree origRight = createFeaturesTree(leftSource, "f", CanonicalNodeNameOrder.normalizedSizeLimit(0) * CanonicalNodeNameOrder.maxBucketsForLevel(0));