public static <InputT, AccumT, OutputT> void testCombineFn( CombineFn<InputT, AccumT, OutputT> fn, List<InputT> input, Matcher<? super OutputT> matcher) { int size = input.size(); checkCombineFnShardsMultipleOrders(fn, Collections.singletonList(input), matcher); checkCombineFnShardsMultipleOrders(fn, shardEvenly(input, 2), matcher); if (size > 4) { checkCombineFnShardsMultipleOrders(fn, shardEvenly(input, size / 2), matcher); checkCombineFnShardsMultipleOrders( fn, shardEvenly(input, (int) (size / Math.sqrt(size))), matcher); } checkCombineFnShardsMultipleOrders(fn, shardExponentially(input, 1.4), matcher); checkCombineFnShardsMultipleOrders(fn, shardExponentially(input, 2), matcher); checkCombineFnShardsMultipleOrders(fn, shardExponentially(input, Math.E), matcher); }