1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
package TestPat2Api;
#
# Tests
#
use strict;
use warnings;
use feature 'say';
use Data::Dumper;
use Function::Parameters;
use Test::More;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(pat2api_tests); # Export on demand
use lib qw(.);
use PosExpr;
use API;
use Translate qw(pat2apis);
my $debug = 0;
sub setdebug { my($d) = @_; $debug = $d; }
#
# pat2api_tests();
# Do a load of pat2api tests.
#
sub pat2api_tests
{
# format of each pat2api test: P:API(p)
our @pat2apitests = (
"*:C 0 slen-1",
"abcde:Tslen=5,A'abcde' 0->a",
"abcdef:Tslen=6,A'abcdef' 0->a",
"abc?e?:Tslen=6,A'abc' 0->a,A'e' a+4->e,C a+3 a+3,C e+1 e+1",
"a*e:Tslen>=2,A'a' 0->a,A'e' slen-1->e,Te>=a+1,C a+1 e-1",
"ab*e:Tslen>=3,A'ab' 0->a,A'e' slen-1->e,Te>=a+2,C a+2 e-1",
"ab*de:Tslen>=4,A'ab' 0->a,A'de' slen-2->d,Td>=a+2,C a+2 d-1",
"abc*de:Tslen>=5,A'abc' 0->a,A'de' slen-2->d,Td>=a+3,C a+3 d-1",
"?b*d:Tslen>=3,A'b' 1->b,A'd' slen-1->d,Td>=b+1,C 0 0,C b+1 d-1",
"?bc*e:Tslen>=4,A'bc' 1->b,A'e' slen-1->e,Te>=b+2,C 0 0,C b+2 e-1",
# optimal for "a*c?e is Tslen>=4,A'a' 0->a,A'e' slen-1->e,A'c' e-2->c,C a+1 c-1,C c+1",
"a*c?e:Tslen>=4,A'a' 0->a,A'c' slen-3->c,A'e' c+2->e,Te-2>=a+1,C a+1 e-3,C c+1 c+1",
"*ll*u:Tslen>=3,A'u' slen-1->u,M'll' 0->l,Tu>=l+2,C 0 l-1,C l+2 u-1", # my example..
);
say "pat2apitests=". Dumper(\@pat2apitests) if $debug;
foreach my $test (@pat2apitests)
{
say "test $test" if $debug;
my( $pat, $expectedapi ) = split( /:/, $test );
my @api = pat2apis( $pat );
my $apistr = join( ',', map { "$_" } @api );
is( $apistr, $expectedapi, "pat2apis($pat)=$expectedapi" );
}
}
1;
|