File Coverage

t/common.plt
Criterion Covered Total %
statement n/a
branch n/a
condition n/a
subroutine n/a
pod n/a
total n/a


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             BEGIN { $| = 1; }
5             use strict;
6              
7             # isok($label,@_) -- prints helpful label
8             sub isok {
9             local $Test::Builder::Level = $Test::Builder::Level + 1;
10             my $label = shift;
11             if (@_==1) {
12             ok($_[0],$label);
13             } elsif (@_==2) {
14             is($_[0],$_[1], $label);
15             } else {
16             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             local $Test::Builder::Level = $Test::Builder::Level + 1;
24             my ($label,$skip_if_true) = splice(@_,0,2);
25             if ($skip_if_true) {
26             subtest $label => sub { plan skip_all => $skip_if_true; };
27             } else {
28             if (@_==1 && ref($_[0]) && ref($_[0]) eq 'CODE') {
29             isok($label, $_[0]->());
30             } else {
31             isok($label,@_);
32             }
33             }
34             }
35              
36             # skipordo($label,$skip_if_true,sub { ok ... },@args_for_sub)
37             sub skipordo {
38             local $Test::Builder::Level = $Test::Builder::Level + 1;
39             my ($label,$skip_if_true) = splice(@_,0,2);
40             if ($skip_if_true) {
41             subtest $label => sub { plan skip_all => $skip_if_true; };
42             } else {
43             $_[0]->(@_[1..$#_]);
44             }
45             }
46              
47             # ulistok($label,\@got,\@expect)
48             # --> ok() for unsorted lists
49             sub ulistok {
50             local $Test::Builder::Level = $Test::Builder::Level + 1;
51             my ($label,$l1,$l2) = @_;
52             is_deeply([sort @$l1],[sort @$l2],$label);
53             }
54              
55             # matchpdl($a,$b) : returns pdl identity check, including BAD
56             sub matchpdl {
57             my ($a,$b) = map {PDL->topdl($_)->setnantobad} @_[0,1];
58             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             my ($a,$b) = map {$_->setnantobad} @_[0,1];
63             my $eps = $_[2];
64             $eps = 1e-5 if (!defined($eps));
65             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             my ($p1,$p2) = @_;
71             return $p1->ndims==$p2->ndims && all(pdl(PDL::long(),[$p1->dims])==pdl(PDL::long(),[$p2->dims]));
72             }
73              
74             sub pdlstr {
75             my $a = shift;
76             return '(undef)' if (!defined($a));
77             my $typ = UNIVERSAL::can($a,'type') ? $a->type : 'NOTYPE';
78             my $str = "($typ) $a";
79             #$str =~ s/\n/ /g;
80             return $str;
81             }
82             sub labstr {
83             my ($label,$ok,$got,$want) = @_;
84             $label .= "\n : got=".pdlstr($got)."\n : wanted=".pdlstr($want) if (!$ok);
85             return $label;
86             }
87              
88             # pdlok($label, $got, $want)
89             sub pdlok {
90             local $Test::Builder::Level = $Test::Builder::Level + 1;
91             my ($label,$got,$want) = @_;
92             $got = PDL->topdl($got) if (defined($got));
93             $want = PDL->topdl($want) if (defined($want));
94             my $ok = (defined($got) && defined($want)
95             && cmp_dims($got,$want)
96             && all(matchpdl($want,$got))
97             );
98             isok(labstr($label,$ok,$got,$want), $ok);
99             }
100              
101             # pdlok_nodims($label, $got, $want)
102             # + ignores dimensions
103             sub pdlok_nodims {
104             local $Test::Builder::Level = $Test::Builder::Level + 1;
105             my ($label,$got,$want) = @_;
106             $got = PDL->topdl($got) if (defined($got));
107             $want = PDL->topdl($want) if (defined($want));
108             my $ok = (defined($got) && defined($want)
109             #&& cmp_dims($got,$want)
110             && all(matchpdl($want,$got)));
111             isok(labstr($label,$ok,$got,$want), $ok);
112             }
113              
114             # pdlapprox($label, $got, $want, $eps=1e-5)
115             sub pdlapprox {
116             local $Test::Builder::Level = $Test::Builder::Level + 1;
117             my ($label,$got,$want,$eps) = @_;
118             $got = PDL->topdl($got) if (defined($got));
119             $want = PDL->topdl($want) if (defined($want));
120             $eps = 1e-5 if (!defined($eps));
121             my $ok = (defined($got) && defined($want)
122             && cmp_dims($got,$want)
123             && all(matchpdla($want,$got,$eps)));
124             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