L32HJNV55D7IBEQ55CDDRGBFAUUUAWGBJXSNAMTWHR3SIDH45X4QC package Hydra::Math;use strict;use warnings;use List::Util qw(min);use Exporter 'import';our @EXPORT_OK = qw(exponential_backoff);=head2 exponential_backoffCalculates a number of seconds to wait before reattempting something.Arguments:=over 1=item C<$attempts>Integer number of attempts made.=back=cutsub exponential_backoff {my ($attempt) = @_;my $clamp = min(10, $attempt);return 2 ** $clamp;}1;
use strict;use warnings;use Setup;use Hydra::Math qw(exponential_backoff);use Test2::V0;subtest "exponential_backoff" => sub {is(exponential_backoff(0), 1);is(exponential_backoff(1), 2);is(exponential_backoff(2), 4);is(exponential_backoff(9), 512);is(exponential_backoff(10), 1024);is(exponential_backoff(11), 1024, "we're clamped to 1024 seconds");is(exponential_backoff(11000), 1024, "we're clamped to 1024 seconds");};done_testing;