#!/usr/bin/env perl
C
=>
'DATA'
,
with
=>
qw/OpenMP::Simple/
,
);
my
$env
= OpenMP::Environment->new();
my
$aref_orig
= [
[
"apple"
,
"banana"
,
"cherry"
,
"date"
,
"elder"
,
"fig"
,
"grape"
,
"honey"
,
"iris"
,
"jack"
],
[
"kite"
,
"lemon"
,
"mango"
,
"nectar"
,
"olive"
,
"pear"
,
"quince"
,
"rose"
,
"straw"
,
"tulip"
],
[
"umbrella"
,
"violet"
,
"water"
,
"xenon"
,
"yellow"
,
"zebra"
,
"apple"
,
"banana"
,
"cherry"
,
"date"
],
[
"elder"
,
"fig"
,
"grape"
,
"honey"
,
"iris"
,
"jack"
,
"kite"
,
"lemon"
,
"mango"
,
"nectar"
],
[
"olive"
,
"pear"
,
"quince"
,
"rose"
,
"straw"
,
"tulip"
,
"umbrella"
,
"violet"
,
"water"
,
"xenon"
],
[
"yellow"
,
"zebra"
,
"apple"
,
"banana"
,
"cherry"
,
"date"
,
"elder"
,
"fig"
,
"grape"
,
"honey"
],
[
"iris"
,
"jack"
,
"kite"
,
"lemon"
,
"mango"
,
"nectar"
,
"olive"
,
"pear"
,
"quince"
,
"rose"
],
[
"straw"
,
"tulip"
,
"umbrella"
,
"violet"
,
"water"
,
"xenon"
,
"yellow"
,
"zebra"
,
"apple"
,
"banana"
],
[
"cherry"
,
"date"
,
"elder"
,
"fig"
,
"grape"
,
"honey"
,
"iris"
,
"jack"
,
"kite"
,
"lemon"
],
[
"mango"
,
"nectar"
,
"olive"
,
"pear"
,
"quince"
,
"rose"
,
"straw"
,
"tulip"
,
"umbrella"
,
"violet"
],
[
"water"
,
"xenon"
,
"yellow"
,
"zebra"
,
"apple"
,
"banana"
,
"cherry"
,
"date"
,
"elder"
,
"fig"
],
[
"grape"
,
"honey"
,
"iris"
,
"jack"
,
"kite"
,
"lemon"
,
"mango"
,
"nectar"
,
"olive"
,
"pear"
],
[
"quince"
,
"rose"
,
"straw"
,
"tulip"
,
"umbrella"
,
"violet"
,
"water"
,
"xenon"
,
"yellow"
,
"zebra"
],
[
"apple"
,
"banana"
,
"cherry"
,
"date"
,
"elder"
,
"fig"
,
"grape"
,
"honey"
,
"iris"
,
"jack"
],
[
"kite"
,
"lemon"
,
"mango"
,
"nectar"
,
"olive"
,
"pear"
,
"quince"
,
"rose"
,
"straw"
,
"tulip"
],
[
"umbrella"
,
"violet"
,
"water"
,
"xenon"
,
"yellow"
,
"zebra"
,
"apple"
,
"banana"
,
"cherry"
,
"date"
],
[
"elder"
,
"fig"
,
"grape"
,
"honey"
,
"iris"
,
"jack"
,
"kite"
,
"lemon"
,
"mango"
,
"nectar"
],
[
"olive"
,
"pear"
,
"quince"
,
"rose"
,
"straw"
,
"tulip"
,
"umbrella"
,
"violet"
,
"water"
,
"xenon"
],
[
"yellow"
,
"zebra"
,
"apple"
,
"banana"
,
"cherry"
,
"date"
,
"elder"
,
"fig"
,
"grape"
,
"honey"
],
[
"iris"
,
"jack"
,
"kite"
,
"lemon"
,
"mango"
,
"nectar"
,
"olive"
,
"pear"
,
"quince"
,
"rose"
],
[
"straw"
,
"tulip"
,
"umbrella"
,
"violet"
,
"water"
,
"xenon"
,
"yellow"
,
"zebra"
,
"apple"
,
"banana"
],
[
"cherry"
,
"date"
,
"elder"
,
"fig"
,
"grape"
,
"honey"
,
"iris"
,
"jack"
,
"kite"
,
"lemon"
],
[
"mango"
,
"nectar"
,
"olive"
,
"pear"
,
"quince"
,
"rose"
,
"straw"
,
"tulip"
,
"umbrella"
,
"violet"
],
[
"water"
,
"xenon"
,
"yellow"
,
"zebra"
,
"apple"
,
"banana"
,
"cherry"
,
"date"
,
"elder"
,
"fig"
],
[
"grape"
,
"honey"
,
"iris"
,
"jack"
,
"kite"
,
"lemon"
,
"mango"
,
"nectar"
,
"olive"
,
"pear"
],
[
"quince"
,
"rose"
,
"straw"
,
"tulip"
,
"umbrella"
,
"violet"
,
"water"
,
"xenon"
,
"yellow"
,
"zebra"
],
];
my
$expected
= [
qw/1 2 3 4 5 6 7 8 9 10/
];
foreach
my
$thread_count
(
qw/1 4 8/
) {
$env
->omp_num_threads(
$thread_count
);
foreach
my
$row_orig
(
@$aref_orig
) {
my
$aref_new
= omp_get_renew_aref(
$row_orig
);
my
$seen_elements
=
shift
@$aref_new
;
my
$seen_threads
=
shift
@$aref_new
;
is
$seen_elements
,
scalar
@$row_orig
,
q{PerlOMP_1D_Array_NUM_ELEMENTS works on original ARRAY reference}
;
is
$seen_threads
,
$thread_count
,
qq{OMP_NUM_THREADS=$thread_count is respected inside of the, omp parallel section, as expected}
;
cmp_deeply
$aref_new
,
$row_orig
,
qq{Row passed by reference matches the row constructed and returned by reference}
;;
}
}
done_testing;