BEGIN { plan
skip_all
=>
'requires threads'
unless
$Config
{usethreads} }
my
$testdb
= get_test_db(build_client());
my
$col
=
$testdb
->get_collection(
'tiger'
);
$col
->drop;
$col
->insert_one({
foo
=> 9,
bar
=> 3,
shazbot
=> 1 });
$col
->insert_one({
foo
=> 2,
bar
=> 5 });
$col
->insert_one({
foo
=> -3,
bar
=> 4 });
$col
->insert_one({
foo
=> 4,
bar
=> 9,
shazbot
=> 1 });
{
my
$cursor
=
$col
->query;
$cursor
->
next
;
my
$ret
= threads->create(
sub
{
$cursor
->
next
;
})->
join
;
is_deeply
$ret
,
$cursor
->
next
,
'cursors retain their position on thread cloning'
;
}
{
my
$cursor
= threads->create(
sub
{
my
$cursor
=
$col
->query;
$cursor
->
next
;
return
$cursor
;
})->
join
;
my
$comp_cursor
=
$col
->query;
$comp_cursor
->
next
;
is_deeply
$cursor
->
next
,
$comp_cursor
->
next
,
'joining back cursors works'
;
}
{
my
$cursor
=
$col
->query;
$cursor
->
next
;
my
@threads
=
map
{
threads->create(
sub
{
$cursor
->
next
;
});
} 0 .. 9;
my
@ret
=
map
{
$_
->
join
}
@threads
;
is_deeply [
@ret
], [(
$cursor
->
next
) x 10],
'cursors retain their position on thread cloning'
;
}
{
my
@threads
=
map
{
threads->create(
sub
{
my
$cursor
=
$col
->query;
$cursor
->
next
;
return
$cursor
;
})
} 0 .. 9;
my
@cursors
=
map
{
$_
->
join
}
@threads
;
my
$comp_cursor
=
$col
->query;
$comp_cursor
->
next
;
is_deeply [
map
{
$_
->
next
}
@cursors
], [(
$comp_cursor
->
next
) x 10],
'joining back cursors works'
;
}
done_testing();