File Coverage

File:t/07-assert.t
Coverage:92.7%

linestmtbrancondsubpodtimecode
1
1
1
1
3001
2
24
use strict;
2
1
1
1
3
1
34
use warnings;
3
4
1
1
1
251
838
86
use FindBin qw/$Bin/;
5
1
1
1
239
514
4
use lib qq{$Bin/../lib};
6
1
1
1
443
76787
6
use Test::More;
7
8
1
1
1
560
2
3
use OpenMP::Environment qw/:assert/;
9
1
1
1
4
1
355
use OpenMP::Environment::Constants ();
10
11
1
69979
my %valid = (
12    OMP_CANCELLATION        => q{true},
13    OMP_DISPLAY_ENV         => q{verbose},
14    OMP_DEFAULT_DEVICE      => 0,
15    OMP_NUM_TEAMS           => 2,
16    OMP_DYNAMIC             => q{true},
17    OMP_MAX_ACTIVE_LEVELS   => 2,
18    OMP_MAX_TASK_PRIORITY   => 0,
19    OMP_NESTED              => q{true},
20    OMP_NUM_THREADS         => q{8,4,2},
21    OMP_PROC_BIND           => q{MASTER,CLOSE,SPREAD},
22    OMP_PLACES              => q{{0,1},{2,3}},
23    OMP_STACKSIZE           => q{64M},
24    OMP_SCHEDULE            => q{nonmonotonic:dynamic,4},
25    OMP_TARGET_OFFLOAD      => q{default},
26    OMP_THREAD_LIMIT        => 64,
27    OMP_WAIT_POLICY         => q{passive},
28    GOMP_CPU_AFFINITY       => q{0 3 1-2 4-15:2},
29    GOMP_DEBUG              => 1,
30    GOMP_STACKSIZE          => q{1024G},
31    GOMP_SPINCOUNT          => q{INFINITY},
32    GOMP_RTEMS_THREAD_POOLS => q{1@WRK0:3$4@WRK1},
33    OMP_TEAMS_THREAD_LIMIT  => 32,
34    OMP_ALLOCATOR           => q{omp_low_lat_mem_space:pinned=true,partition=nearest},
35    OMP_AFFINITY_FORMAT     => q{thread %n affinity %A},
36    OMP_DISPLAY_AFFINITY    => q{false},
37);
38
39
1
2
for my $ev ( OpenMP::Environment::Constants::environment_names() ) {
40
25
5462
    local $ENV{$ev} = $valid{$ev};
41
25
44
    ok assert($ev), qq{assert dispatch validates $ev};
42}
43
44{
45
1
5
    local $ENV{OMP_CANCELLATION} = q{true};
46
1
2
    ok assert(omp_cancellation), q{assert accepts a constant value};
47
1
215
    is $ENV{OMP_CANCELLATION}, q{TRUE}, q{assert preserves legacy uppercase normalization};
48}
49
50{
51
1
1
217
2
    local $ENV{OMP_NUM_THREADS};
52
1
3
    delete $ENV{OMP_NUM_THREADS};
53
1
2
    ok assert(omp_num_threads), q{assert considers an unset supported variable valid};
54}
55
56{
57
1
1
214
6
    local $ENV{GOMP_SPINCOUNT} = q{not sure about this one};
58
1
1
0
1
2
0
    my $ok = eval { assert(gomp_spincount); 1 };
59
1
3
    ok !$ok, q{assert strictly validates a historically pass-through variable};
60
1
204
    like $@, qr/GOMP_SPINCOUNT/, q{strict assertion names the invalid variable};
61}
62
63{
64
1
1
1
213
196
4
    local $ENV{OMP_NESTED} = q{FALSE};
65
1
4
    local $ENV{OMP_MAX_ACTIVE_LEVELS} = 4;
66
1
1
0
1
2
0
    my $nested_ok = eval { assert(omp_nested); 1 };
67
1
3
    ok !$nested_ok, q{assert detects the OMP_NESTED/OMP_MAX_ACTIVE_LEVELS conflict};
68
1
201
    like $@, qr/implementation-defined/, q{cross-variable assertion identifies implementation-defined behavior};
69
70
1
1
0
190
2
0
    my $levels_ok = eval { assert(omp_max_active_levels); 1 };
71
1
3
    ok !$levels_ok, q{either variable can surface the cross-variable conflict};
72}
73
74
1
1
0
203
2
0
my $unknown_ok = eval { assert(q{OMP_NOT_REAL}); 1 };
75
1
3
ok !$unknown_ok, q{assert rejects an unknown environment variable};
76
1
202
like $@, qr/Unsupported OpenMP\/libgomp/, q{unknown assert explains the supported namespace};
77
78{
79
0
0
    package OpenMPEnvironmentAssertOnly;
80
1
1
1
5
1
3
    use OpenMP::Environment qw/:assert/;
81}
82
1
1
192
7
ok( OpenMPEnvironmentAssertOnly->can(q{assert}), q{:assert exports assert} );
83
1
193
ok( OpenMPEnvironmentAssertOnly->can(q{omp_schedule}), q{:assert exports constants} );
84
1
209
ok( !OpenMPEnvironmentAssertOnly->can(q{unset}), q{:assert does not export unset} );
85
86{
87
0
0
    package OpenMPEnvironmentDSL;
88
1
1
1
5
1
2
    use OpenMP::Environment qw/:dsl/;
89}
90
1
1
185
7
ok( OpenMPEnvironmentDSL->can(q{assert}), q{:dsl exports assert} );
91
1
186
ok( OpenMPEnvironmentDSL->can(q{unset}), q{:dsl exports unset} );
92
1
186
ok( OpenMPEnvironmentDSL->can(q{omp_target_offload}), q{:dsl exports constants} );
93
94{
95
1
57
    local %ENV = %ENV;
96
1
35
    @ENV{ keys %valid } = values %valid;
97
1
12
    my $env = OpenMP::Environment->new;
98
1
2
    ok $env->assert_omp_environment, q{legacy assert_omp_environment uses the strict validation engine};
99}
100
101{
102
1
1
1
182
252
4
    local $ENV{OMP_SCHEDULE} = q{banana};
103
1
3
    my $env = OpenMP::Environment->new;
104
1
1
0
1
2
0
    my $ok = eval { $env->assert_omp_environment; 1 };
105
1
3
    ok !$ok, q{legacy assert_omp_environment now detects malformed formerly-pass-through syntax};
106
1
201
    like $@, qr/OMP_SCHEDULE/, q{strict environment assertion reports the malformed variable};
107}
108
109
1
199
done_testing;