diff --git a/lib/Sub/Rate/NoMaxRate.pm b/lib/Sub/Rate/NoMaxRate.pm index 7db3939..40333f4 100644 --- a/lib/Sub/Rate/NoMaxRate.pm +++ b/lib/Sub/Rate/NoMaxRate.pm @@ -7,6 +7,15 @@ use List::Util 'sum'; extends 'Sub::Rate'; +before add => sub { + my ($self, $rate) = @_; + + my $max_rate = sum map { $_->[0] } @{ $self->_func }; + $max_rate += $rate; + $self->max_rate($max_rate); +}; + + before generate => sub { my ($self) = @_; diff --git a/t/nomaxrate.t b/t/nomaxrate.t index 2f374d9..6473124 100644 --- a/t/nomaxrate.t +++ b/t/nomaxrate.t @@ -22,4 +22,9 @@ is $loop_count, $r1 + $r2, 'loop count same as $r1 + $r2'; ok 2.0*0.95 <= $r2 / $r1 && $r2 / $r1 <= 2.0*1.05, '$r2/$1 about 20/10 ok'; +$sub->clear; + +eval { $sub->add(1000 => sub {}) }; +ok !$@, 'no error ok (over default max_rate)'; + done_testing;