anchor.diff:              {Prev, _} -> Done;
               {undefined, _} -> Done;
               {New, 0} -> round(New * CurTime / 1000);
  -            {New, undefined} -> round(New * CurTime / 1000);
  +            {_New, undefined} -> Done;
               {New, _} -> round(New * CurTime / 1000)
           end,
       {RateState#const_rate{value = Rate}, NewDone, State1};
  
positive.code:     {MegaSecs, Secs, MicroSecs} = os:timestamp(),
      MegaSecs * 1000000000 + Secs * 1000 + MicroSecs div 1000.
  
  -spec time_of_next_iteration(#const_rate{} | #linear_rate{}, number(), integer())
      -> number().
  time_of_next_iteration(#const_rate{value = undefined}, _, _) -> 0;
  time_of_next_iteration(#const_rate{value = 0}, Duration, _) -> Duration * 2; % should be more than loop length "2" does not stand for anything important
  
negative.code:                         k_times_spawn(Body, WorkerProvider, Iterator, Env, Step, State2, Done, Batch)
                  end,
              BatchEnd = msnow(),
              NewBatch = case IsFirst of
                  true -> Batch;
                  false -> batch_size(BatchEnd - BatchStart, GotTime, NeedToSleep, Batch)
              end,
  
              timerun(Start, Shift, TimeFun, NewRate, Body, WorkerProvider, Env, false, Opts, NewBatch, NextState, Done + Step*Batch)
      end.
  
  eval_rates(#const_rate{rate_fun = F, value = Prev} = RateState, Done, CurTime, _Time, State) ->
  