File Coverage

/root/.cpan/build/PDL-CCS-1.24.1-0/t/common.plt
Criterion Covered Total %
statement 41 64 64.0
branch 13 34 38.2
condition 4 18 22.2
subroutine 10 16 62.5
pod n/a
total 68 132 51.5


line stmt bran cond sub pod time code
1             # -*- Mode: CPerl -*-
2             # File: t/common.plt
3             # Description: re-usable test subs; requires Test::More
4 10     10   358 BEGIN { $| = 1; }
5 10     10   55 use strict;
  10         16  
  10         11868  
6              
7             # isok($label,@_) -- prints helpful label
8             sub isok {
9 4935     4935   207727 local $Test::Builder::Level = $Test::Builder::Level + 1;
10 4935         9056 my $label = shift;
11 4935 100       14231 if (@_==1) {
    50          
12 2595         9460 ok($_[0],$label);
13             } elsif (@_==2) {
14 2340         9223 is($_[0],$_[1], $label);
15             } else {
16 0         0 die("isok(): expected 1 or 2 non-label arguments, but got ", scalar(@_));
17             }
18             }
19              
20             # skipok($label,$skip_if_true,@_) -- prints helpful label
21             # skipok($label,$skip_if_true,\&CODE) -- prints helpful label
22             sub skipok {
23 0     0   0 local $Test::Builder::Level = $Test::Builder::Level + 1;
24 0         0 my ($label,$skip_if_true) = splice(@_,0,2);
25 0 0       0 if ($skip_if_true) {
26 0     0   0 subtest $label => sub { plan skip_all => $skip_if_true; };
  0         0  
27             } else {
28 0 0 0     0 if (@_==1 && ref($_[0]) && ref($_[0]) eq 'CODE') {
      0        
29 0         0 isok($label, $_[0]->());
30             } else {
31 0         0 isok($label,@_);
32             }
33             }
34             }
35              
36             # skipordo($label,$skip_if_true,sub { ok ... },@args_for_sub)
37             sub skipordo {
38 0     0   0 local $Test::Builder::Level = $Test::Builder::Level + 1;
39 0         0 my ($label,$skip_if_true) = splice(@_,0,2);
40 0 0       0 if ($skip_if_true) {
41 0     0   0 subtest $label => sub { plan skip_all => $skip_if_true; };
  0         0  
42             } else {
43 0         0 $_[0]->(@_[1..$#_]);
44             }
45             }
46              
47             # ulistok($label,\@got,\@expect)
48             # --> ok() for unsorted lists
49             sub ulistok {
50 0     0   0 local $Test::Builder::Level = $Test::Builder::Level + 1;
51 0         0 my ($label,$l1,$l2) = @_;
52 0         0 is_deeply([sort @$l1],[sort @$l2],$label);
53             }
54              
55             # matchpdl($a,$b) : returns pdl identity check, including BAD
56             sub matchpdl {
57 2491     2491   450784 my ($a,$b) = map {PDL->topdl($_)->setnantobad} @_[0,1];
  4982         66067  
58 2491         8064 return ($a==$b)->setbadtoval(0) | ($a->isbad & $b->isbad) | ($a->isfinite->not & $b->isfinite->not);
59             }
60             # matchpdl($a,$b,$eps) : returns pdl approximation check, including BAD
61             sub matchpdla {
62 7     7   1661 my ($a,$b) = map {$_->setnantobad} @_[0,1];
  14         190  
63 7         17 my $eps = $_[2];
64 7 50       142 $eps = 1e-5 if (!defined($eps));
65 7         31 return $a->approx($b,$eps)->setbadtoval(0) | ($a->isbad & $b->isbad) | ($a->isfinite->not & $b->isfinite->not);
66             }
67              
68             # cmp_dims($got_pdl,$expect_pdl)
69             sub cmp_dims {
70 2489     2489   5211 my ($p1,$p2) = @_;
71 2489   33     19221 return $p1->ndims==$p2->ndims && all(pdl(PDL::long(),[$p1->dims])==pdl(PDL::long(),[$p2->dims]));
72             }
73              
74             sub pdlstr {
75 0     0   0 my $a = shift;
76 0 0       0 return '(undef)' if (!defined($a));
77 0 0       0 my $typ = UNIVERSAL::can($a,'type') ? $a->type : 'NOTYPE';
78 0         0 my $str = "($typ) $a";
79             #$str =~ s/\n/ /g;
80 0         0 return $str;
81             }
82             sub labstr {
83 2498     2498   7097 my ($label,$ok,$got,$want) = @_;
84 2498 50       6688 $label .= "\n : got=".pdlstr($got)."\n : wanted=".pdlstr($want) if (!$ok);
85 2498         210230 return $label;
86             }
87              
88             # pdlok($label, $got, $want)
89             sub pdlok {
90 2482     2482   477130 local $Test::Builder::Level = $Test::Builder::Level + 1;
91 2482         6505 my ($label,$got,$want) = @_;
92 2482 50       11885 $got = PDL->topdl($got) if (defined($got));
93 2482 50       7682 $want = PDL->topdl($want) if (defined($want));
94 2482   33     26654 my $ok = (defined($got) && defined($want)
95             && cmp_dims($got,$want)
96             && all(matchpdl($want,$got))
97             );
98 2482         470905 isok(labstr($label,$ok,$got,$want), $ok);
99             }
100              
101             # pdlok_nodims($label, $got, $want)
102             # + ignores dimensions
103             sub pdlok_nodims {
104 9     9   338 local $Test::Builder::Level = $Test::Builder::Level + 1;
105 9         27 my ($label,$got,$want) = @_;
106 9 50       50 $got = PDL->topdl($got) if (defined($got));
107 9 50       38 $want = PDL->topdl($want) if (defined($want));
108 9   33     61 my $ok = (defined($got) && defined($want)
109             #&& cmp_dims($got,$want)
110             && all(matchpdl($want,$got)));
111 9         2254 isok(labstr($label,$ok,$got,$want), $ok);
112             }
113              
114             # pdlapprox($label, $got, $want, $eps=1e-5)
115             sub pdlapprox {
116 7     7   45 local $Test::Builder::Level = $Test::Builder::Level + 1;
117 7         23 my ($label,$got,$want,$eps) = @_;
118 7 50       36 $got = PDL->topdl($got) if (defined($got));
119 7 50       25 $want = PDL->topdl($want) if (defined($want));
120 7 50       17 $eps = 1e-5 if (!defined($eps));
121 7   33     45 my $ok = (defined($got) && defined($want)
122             && cmp_dims($got,$want)
123             && all(matchpdla($want,$got,$eps)));
124 7 50       2079 isok(labstr($label,$ok,$got,$want), $ok)
125             or diag "got=$got\nwant=$want";
126             }
127              
128              
129             print "loaded ", __FILE__, "\n";
130              
131             1;
132