package org.simpleflatmapper.reflect.test.asm; import org.junit.Test; import org.simpleflatmapper.reflect.asm.ShardingHelper; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; public class ShardingHelperTest { @Test public void testShardingWhenWhenEmpty() { ShardingHelper.ShardCallBack callBack = mock(ShardingHelper.ShardCallBack.class); ShardingHelper.shard(0, 8, callBack); verify(callBack).leafDispatch("", 0, 0); } @Test public void testShardingWhenNoNeedToShard() { ShardingHelper.ShardCallBack callBack = mock(ShardingHelper.ShardCallBack.class); ShardingHelper.shard(5, 8, callBack); verify(callBack).leafDispatch("", 0, 5); } @Test public void testShardingWhen4_2() { ShardingHelper.ShardCallBack callBack = mock(ShardingHelper.ShardCallBack.class); ShardingHelper.shard(4, 2, callBack); verify(callBack).leafDispatch("1n0t2", 0, 2); verify(callBack).leafDispatch("1n2t4", 2, 4); verify(callBack).nodeDispatch("", 2, 0, 4); } @Test public void testShardingWhen16() { ShardingHelper.ShardCallBack callBack = mock(ShardingHelper.ShardCallBack.class); ShardingHelper.shard(16, 16, callBack); verify(callBack).leafDispatch("", 0, 16); } @Test public void testShardingWhen5_2() { ShardingHelper.ShardCallBack callBack = mock(ShardingHelper.ShardCallBack.class); ShardingHelper.shard(5, 2, callBack); verify(callBack).leafDispatch("1n0t2", 0, 2); verify(callBack).leafDispatch("1n2t4", 2, 4); verify(callBack).leafDispatch("1n4t5", 4, 5); verify(callBack).nodeDispatch("2n0t4", 2, 0, 4); verify(callBack).nodeDispatch("2n4t5", 2, 4, 5); verify(callBack).nodeDispatch("", 4, 0, 5); } @Test public void testShardingWhenNoNeedToShard72() { ShardingHelper.ShardCallBack callBack = mock(ShardingHelper.ShardCallBack.class); ShardingHelper.shard(7, 2, callBack); verify(callBack).leafDispatch("1n0t2", 0, 2); verify(callBack).leafDispatch("1n2t4", 2, 4); verify(callBack).leafDispatch("1n4t6", 4, 6); verify(callBack).leafDispatch("1n6t7", 6, 7); verify(callBack).nodeDispatch("2n0t4", 2, 0, 4); // 4 / 4 = 1 , 3/4 = 0 verify(callBack).nodeDispatch("2n4t7", 2, 4, 7); verify(callBack).nodeDispatch("", 4, 0, 7); /* n0t2 0 2 n2t4 2 4 n4t6 4 6 n6t7 6 7 n0t4/2 0 4 n2t6/2 2 6 n4t7/2 4 7 n6t7/2 6 7 /4 0 7 /4 2 7 /4 4 7 /4 6 7 */ } @Test public void testShardingWhen1LevelSharding() { ShardingHelper.ShardCallBack callBack = mock(ShardingHelper.ShardCallBack.class); ShardingHelper.shard(33, 8, callBack); verify(callBack).leafDispatch("1n0t8", 0, 8); verify(callBack).leafDispatch("1n8t16", 8, 16); verify(callBack).leafDispatch("1n16t24", 16, 24); verify(callBack).leafDispatch("1n24t32", 24, 32); verify(callBack).leafDispatch("1n32t33", 32, 33); verify(callBack).nodeDispatch("", 8, 0, 33); } @Test public void testShardingWhen2LevelSharding() { ShardingHelper.ShardCallBack callBack = mock(ShardingHelper.ShardCallBack.class); ShardingHelper.shard(81, 8, callBack); verify(callBack).leafDispatch("1n0t8", 0, 8); verify(callBack).leafDispatch("1n8t16", 8, 16); verify(callBack).leafDispatch("1n16t24", 16, 24); verify(callBack).leafDispatch("1n24t32", 24, 32); verify(callBack).leafDispatch("1n32t40", 32, 40); verify(callBack).leafDispatch("1n40t48", 40, 48); verify(callBack).leafDispatch("1n48t56", 48, 56); verify(callBack).leafDispatch("1n56t64", 56, 64); verify(callBack).leafDispatch("1n64t72", 64, 72); verify(callBack).leafDispatch("1n72t80", 72, 80); verify(callBack).leafDispatch("1n80t81", 80, 81); verify(callBack).nodeDispatch("8n0t64", 8, 0, 64); verify(callBack).nodeDispatch("8n64t81", 8, 64, 81); verify(callBack).nodeDispatch("", 64, 0, 81); } }