private void TestRebalance(
            IShardAllocationStrategy allocationStrategy,
            int maxRegions,
            int maxShardsPerRegion,
            int expectedMaxSteps)
        {
            foreach (var i in Enumerable.Range(1, iterationsPerTest))
            {
                iteration += 1;
                var numberOfRegions = rnd.Next(maxRegions) + 1;

                var memberArray = Enumerable.Range(1, numberOfRegions).Select(n => LeastShardAllocationStrategySpec.NewUpMember("127.0.0.1", port: n)).ToArray();
                clusterMembers = ImmutableSortedSet.Create(memberArray);//.toIndexedSeq: _ *);
                var regions = Enumerable.Range(1, numberOfRegions).Select(n => LeastShardAllocationStrategySpec.NewFakeRegion($"{iteration}-R{n}", memberArray[n - 1]));

                //var regions = Enumerable.Range(1, numberOfRegions).Select(n => Sys.ActorOf(Props.Empty, $"{iteration}-R{n}")).ToImmutableList();
                var countPerRegion = regions.ToImmutableDictionary(region => region, region => rnd.Next(maxShardsPerRegion));
                var allocations    = CreateAllocations(countPerRegion);
                TestRebalance(allocationStrategy, allocations, ImmutableList.Create(allocations), expectedMaxSteps);
                foreach (var region in regions)
                {
                    Sys.Stop(region);
                }
            }
        }
 internal static IActorRef NewFakeRegion(string idForDebug, Member member) => LeastShardAllocationStrategySpec.NewFakeRegion(idForDebug, member);