public override Routee Select(object message, Routee[] routees) { if (routees == null || routees.Length == 0) { return Routee.NoRoutee; } return routees[(Interlocked.Increment(ref _next) & int.MaxValue) % routees.Length]; } }
public void RoundRobin_should_not_throw_IndexOutOfRangeException_when_counter_wraps_to_be_negative() { var routees = new[] {Routee.NoRoutee, Routee.NoRoutee, Routee.NoRoutee}; var routingLogic = new RoundRobinRoutingLogic(int.MaxValue - 5); for (var i = 0; i < 10; i++) { routingLogic.Select(i, routees); } }