#!/usr/bin/perl use strict; use warnings; use Test::More; use ok 'KiokuDB'; use ok 'KiokuDB::Test::Fixture::ObjectGraph'; use Set::Object qw(set); use Data::Stream::Bulk::Callback; { package KiokuDB::Backend::Hash::Frugal; use Moose; extends qw(KiokuDB::Backend::Hash); override all_entries => sub { my $self = shift; my @entries = super()->all; Data::Stream::Bulk::Callback->new( callback => sub { if ( @entries ) { return [ shift @entries ]; } else { return; } }, ); } } my $f = KiokuDB::Test::Fixture::ObjectGraph->new; my $dir = KiokuDB->new( backend => KiokuDB::Backend::Hash::Frugal->new, ); { my $s = $dir->new_scope; $dir->insert( @{ ($f->create)[0] } ); } my $count = do { my $s = $dir->new_scope; scalar $dir->all_objects->all; }; is_deeply( [ $dir->live_objects->live_objects ], [], "no live objects" ); is( $count, 22, "number of objects in DB" ); { my $s = $dir->new_scope; my $stream = $dir->all_objects; is_deeply( [ $dir->live_objects->live_objects ], [], "no live objects" ); while ( my $block = $stream->next ) { is( scalar(@$block), 1, "one object loaded" ); my $l = set($dir->live_objects->live_objects); ok( $l->includes($block->[0]), "live objects includes object" ); cmp_ok( $l->size, ">=", 1, "at least one live object " . $l->size ); cmp_ok( $l->size, "<", $count, "less than the total number of objects" ); } is_deeply( [ $dir->live_objects->live_objects ], [], "no live objects" ); } done_testing;