The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use Test::Fatal qw(exception lives_ok);
use File::Temp;
use Algorithm::HyperLogLog;

plan 'skip_all' => 'No XS' if !Algorithm::HyperLogLog->XS;

subtest 'dump and restore - immediately after initialize' => sub {
    my $hll      = Algorithm::HyperLogLog->new(5);
    my $dumpfile = File::Temp->new();
    lives_ok {
        $hll->dump_to_file( $dumpfile->filename );
    };

    my $hll_r = Algorithm::HyperLogLog->new_from_file( $dumpfile->filename );

    is $hll_r->register_size, $hll->register_size;
    is $hll_r->estimate(), $hll->estimate();

};

subtest 'dump and restore' => sub {
    my $hll      = Algorithm::HyperLogLog->new(16);
    
    $hll->add('foo');
    $hll->add('bar');
    $hll->add('baz');
    
    my $dumpfile = File::Temp->new();
    lives_ok {
        $hll->dump_to_file( $dumpfile->filename );
    };

    my $hll_r = Algorithm::HyperLogLog->new_from_file( $dumpfile->filename );

    is $hll_r->register_size, $hll->register_size;
    is $hll_r->estimate(), $hll->estimate();
};

done_testing();
1;