admin管理员组

文章数量:1660167

import java.util.Spliterator; //導入方法依賴的package包/類

private static void testSplitUntilNull(SplitNode e) {

// Use an explicit stack to avoid a StackOverflowException when testing a Spliterator

// that when repeatedly split produces a right-balanced (and maybe degenerate) tree, or

// for a spliterator that is badly behaved.

Deque> stack = new ArrayDeque<>();

stack.push(e);

int iteration = 0;

while (!stack.isEmpty()) {

assertTrue(iteration++ < MAXIMUM_STACK_CAPACITY, "Exceeded maximum stack modification count of 1 << 18");

e = stack.pop();

Spliterator parentAndRightSplit = e.s;

long parentEstimateSize = parentAndRightSplit.estimateSize();

assertTrue(parentEstimateSize >= 0,

String.format("Split size estimate %d < 0", parentEstimateSize));

long parentSize = parentAndRightSplit.getExactSizeIfKnown();

Spliterator leftSplit = parentAndRightSplit.trySplit();

if (leftSplit == null) {

parentAndRightSplit.forEachRemaining(e.c);

continue;

}

assertSpliterator(leftSplit, e.rootCharacteristics);

assertSpliterator(parentAndRightSplit, e.rootCharacteristics);

if (parentEstimateSize != Long.MAX_VALUE && leftSplit.estimateSize() > 0

&& parentAndRightSplit.estimateSize() > 0) {

assertTrue(leftSplit.estimateSize() < parentEstimateSize,

String.format("Left split size estimate %d >= parent split size estimate %d",

leftSplit.estimateSize(), parentEstimateSize));

assertTrue(parentAndRightSplit.estimateSize() < parentEstimateSize,

String.format("Right split size estimate %d >= parent split size estimate %d",

leftSplit.estimateSize(), parentEstimateSize));

}

else {

assertTrue(leftSplit.estimateSize() <= parentEstimateSize,

String.format("Left split size estimate %d > parent split size estimate %d",

leftSplit.estimateSize(), parentEstimateSize));

assertTrue(parentAndRightSplit.estimateSize() <= parentEstimateSize,

String.format("Right split size estimate %d > parent split size estimate %d",

leftSplit.estimateSize(), parentEstimateSize));

}

long leftSize = leftSplit.getExactSizeIfKnown();

long rightSize = parentAndRightSplit.getExactSizeIfKnown();

if (parentSize >= 0 && leftSize >= 0 && rightSize >= 0)

assertEquals(parentSize, leftSize + rightSize,

String.format("exact left split size %d + exact right split size %d != parent exact split size %d",

leftSize, rightSize, parentSize));

// Add right side to stack first so left side is popped off first

stack.push(e.fromSplit(parentAndRightSplit));

stack.push(e.fromSplit(leftSplit));

}

}

本文标签: 示例方法splititerationJava