File Coverage

blib/lib/KiokuDB/Test/Fixture/Sets.pm
Criterion Covered Total %
statement 46 119 38.6
branch n/a
condition n/a
subroutine 9 9 100.0
pod 0 2 0.0
total 55 130 42.3


line stmt bran cond sub pod time code
1             package KiokuDB::Test::Fixture::Sets;
2 2     2   1604 use Moose;
  2         4  
  2         15  
3              
4 2     2   9739 use Test::More;
  2         4  
  2         17  
5 2     2   506 use Scalar::Util qw(weaken);
  2         2  
  2         117  
6              
7 2     2   701 use KiokuDB::Set::Transient;
  2         8  
  2         86  
8 2     2   863 use KiokuDB::Set::Deferred;
  2         10  
  2         77  
9              
10 2     2   20 use KiokuDB::Test::Person;
  2         2  
  2         44  
11              
12 2     2   6 use namespace::clean -except => "meta";
  2         4  
  2         16  
13              
14             with qw(KiokuDB::Test::Fixture);
15              
16             sub create {
17 33     33 0 100 map { KiokuDB::Test::Person->new( name => $_ ) } qw(jemima elvis norton);
  99         2694  
18             }
19              
20             sub verify {
21 33     33 0 96 my $self = shift;
22              
23 33         72 my @ids = @{ $self->populate_ids };
  33         1144  
24              
25             {
26 33         54 my $s = $self->new_scope;
  33         161  
27              
28 33         183 my @people = $self->lookup_ok(@ids);
29              
30 33         1580 my $set = KiokuDB::Set::Transient->new( set => Set::Object->new );
31              
32 33         189 is_deeply([ $set->members ], [], "no members");
33              
34 33         17013 $set->insert($people[0]);
35              
36 33         115 is_deeply(
37             [ $set->members ],
38             [ $people[0] ],
39             "set members",
40             );
41              
42 33         22205 ok( $set->loaded, "set is loaded" );
43              
44 33         10218 $set->insert( $people[0] );
45              
46 33         170 is( $set->size, 1, "inserting ID of live object already in set did not affect set size" );
47              
48 33         10497 ok( $set->loaded, "set still loaded" );
49              
50 33         10283 $set->insert( $people[2] );
51              
52 33         133 is( $set->size, 2, "inserting ID of live object" );
53              
54 33         10413 ok( $set->loaded, "set still loaded" );
55              
56 33         10262 is_deeply(
57             [ sort $set->members ],
58             [ sort @people[0, 2] ],
59             "members",
60             );
61              
62 33         25929 $set->remove( $people[2] );
63              
64 33         129 is( $set->size, 1, "removed element" );
65              
66 33         10085 can_ok( $set, "union" );
67              
68 33         30072 foreach my $other ( Set::Object->new( $people[2] ), KiokuDB::Set::Transient->new( set => Set::Object->new( $people[2] ) ) ) {
69 33         1549 my $union = $set->union($other);
70              
71 0           isa_ok( $union, "KiokuDB::Set::Transient", "union" );
72              
73 0           is_deeply(
74             [ sort $union->members ],
75             [ sort @people[0, 2] ],
76             "members",
77             );
78             }
79             }
80              
81              
82             {
83 0           my $s = $self->new_scope;
  0            
84              
85 0           my $set = KiokuDB::Set::Deferred->new( set => Set::Object->new($ids[0]), _linker => $self->directory->linker );
86              
87 0           ok( !$set->loaded, "set not loaded" );
88              
89 0           is_deeply(
90             [ $set->members ],
91             [ $self->lookup_ok($ids[0]) ],
92             "set vivified",
93             );
94              
95 0           ok( $set->loaded, "now marked as loaded" );
96              
97 0           my @people = $self->lookup_ok(@ids);
98              
99 0           foreach my $other ( Set::Object->new( $people[2] ), KiokuDB::Set::Transient->new( set => Set::Object->new( $people[2] ) ) ) {
100 0           my $union = $set->union($other);
101              
102 0           isa_ok( $union, "KiokuDB::Set::Loaded", "union" );
103              
104 0           is_deeply(
105             [ sort $union->members ],
106             [ sort @people[0, 2] ],
107             "members",
108             );
109             }
110             }
111              
112             {
113 0           my $s = $self->new_scope;
  0            
114              
115 0           my $set = KiokuDB::Set::Deferred->new( _linker => $self->directory->linker );
116              
117 0           is( $set->size, 0, "set size is 0" );
118              
119 0           is_deeply([ $set->members ], [], "no members" );
120              
121 0           is( ref($set), "KiokuDB::Set::Deferred", 'calling members on empty set does not load it' );
122              
123 0           $set->insert($self->lookup_ok(@ids));
124              
125 0           ok( !$set->loaded, "set not loaded by insertion of live objects" );
126              
127 0           $set->remove( $self->lookup_ok($ids[0]) );
128              
129 0           is( $set->size, ( @ids - 1 ), "removed element" );
130 0           ok( !$set->loaded, "set not loaded" );
131              
132 0           my $other = KiokuDB::Set::Deferred->new( set => Set::Object->new($ids[0]), _linker => $self->directory->linker );
133              
134 0           isa_ok( my $union = $set->union($other), "KiokuDB::Set::Deferred" );
135              
136 0           ok( !$union->loaded, "union is deferred" );
137              
138 0           is_deeply(
139             [ sort $set->members ],
140             [ sort $self->lookup_ok(@ids[1, 2]) ],
141             "members",
142             );
143              
144 0           ok( $set->loaded, "now it is loaded" );
145              
146 0           is_deeply(
147             [ sort $union->members ],
148             [ sort $self->lookup_ok(@ids[0, 1, 2]) ],
149             "union",
150             );
151             }
152              
153 0           $self->no_live_objects;
154              
155             {
156 0           my $s = $self->new_scope;
  0            
157              
158 0           my $set = KiokuDB::Set::Deferred->new( _linker => $self->directory->linker );
159              
160 0           is_deeply([ $set->members ], [], "no members");
161              
162 0           $set->_objects->insert(@ids);
163              
164 0           ok( !$set->loaded, "set not loaded" );
165              
166 0           $set->clear;
167              
168 0           is( $set->size, 0, "cleared" );
169              
170 0           ok( $set->loaded, "cleared set is loaded" );
171             }
172              
173 0           $self->no_live_objects;
174              
175 0           my $set_id = do {
176 0           my $s = $self->new_scope;
177              
178 0           my @people = $self->lookup_ok(@ids);
179              
180 0           $self->store_ok( KiokuDB::Set::Transient->new( set => Set::Object->new($people[0]) ) );
181             };
182              
183 0           $self->no_live_objects;
184              
185             {
186 0           my $s = $self->new_scope;
  0            
187              
188 0           my $set = $self->lookup_ok($set_id);
189              
190 0           isa_ok( $set, "KiokuDB::Set::Deferred", "deferred set" );
191              
192 0           is( $set->size, 1, "set size" );
193              
194 0           is_deeply(
195             [ $set->members ],
196             [ $self->lookup_ok($ids[0]) ],
197             "members",
198             );
199              
200 0           ok( $set->loaded, "loaded set" );
201             }
202              
203 0           $self->no_live_objects;
204              
205             {
206 0           my $s = $self->new_scope;
  0            
207              
208 0           my $set = $self->lookup_ok($set_id);
209              
210 0           isa_ok( $set, "KiokuDB::Set::Deferred", "deferred set" );
211              
212 0           is( $set->size, 1, "set size" );
213              
214 0           $set->insert( $self->lookup_ok($ids[2]) );
215              
216 0           is( $set->size, 2, "set size is 2");
217              
218 0           ok( !$set->loaded, "set not loaded" );
219              
220 0           $self->store_ok($set);
221              
222 0           ok( !$set->loaded, "set not loaded by ->store" );
223             }
224              
225 0           $self->no_live_objects;
226              
227             {
228 0           my $s = $self->new_scope;
  0            
229              
230 0           my $set = $self->lookup_ok($set_id);
231              
232 0           isa_ok( $set, "KiokuDB::Set::Deferred", "deferred set" );
233              
234 0           is( $set->size, 2, "set size" );
235              
236 0           is_deeply(
237             [ sort $set->members ],
238             [ sort $self->lookup_ok(@ids[0, 2]) ],
239             "members",
240             );
241              
242 0           ok( $set->loaded, "loaded set" );
243             }
244              
245 0           $self->no_live_objects;
246             }
247              
248             __PACKAGE__->meta->make_immutable;
249              
250             # ex: set sw=4 et:
251              
252             __PACKAGE__
253              
254             __END__
255