File Coverage

blib/lib/SimpleFlake.pm
Criterion Covered Total %
statement 31 31 100.0
branch n/a
condition n/a
subroutine 9 9 100.0
pod 0 3 0.0
total 40 43 93.0


line stmt bran cond sub pod time code
1             package SimpleFlake;
2 5     5   47111 use 5.008001;
  5         14  
  5         180  
3 5     5   24 use strict;
  5         9  
  5         150  
4 5     5   32 use warnings;
  5         7  
  5         141  
5              
6 5     5   2897 use Time::HiRes qw(time);
  5         6139  
  5         19  
7 5     5   13566 use Math::BigInt lib => 'GMP';
  5         101286  
  5         35  
8 5         1236 use Bytes::Random::Secure qw(
9             random_bytes random_bytes_base64 random_bytes_hex
10 5     5   76019 );
  5         50964  
11              
12             our $VERSION = "0.05";
13              
14             sub get_random_bits {
15              
16 100002     100002 0 103834 my ( $class, $length ) = @_;
17              
18 100002         406516 my $random = Bytes::Random::Secure->new(
19             Bits => 64,
20             NonBlocking => 1,
21             );
22              
23 100002         5006361 my $return = Math::BigInt->from_bin( unpack( 'B*', $random->bytes(2) ) );
24              
25 100002         26800594 return $return;
26             }
27              
28             sub get_millisecond_timestamp {
29              
30 100002     100002 0 92614 my $epoch = 946702800;
31              
32 100002         420846 my $time = Math::BigInt->new( int( ( time - $epoch ) * 1_000_000 ) );
33 100002         2769196 return $time;
34             }
35              
36             sub get_flake {
37              
38 100001     100001 0 11299666 my $self = shift;
39              
40 100001         182514 my $timestamp = $self->get_millisecond_timestamp;
41 100001         180462 my $random = $self->get_random_bits;
42              
43 100001         245471 my $flake = $timestamp->blsft(15);
44 100001         14571012 $flake->bior($random);
45              
46 100001         12664571 return substr( $flake->as_hex, 2);
47             }
48              
49              
50             1;
51             __END__