tiefeatures.t revision 7c478bd95313f5f23a4c958a745db2134aa03244
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi#!/usr/bin/perl
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiuse lib 'blib/lib';
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiuse Memoize 0.45 qw(memoize unmemoize);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiuse Fcntl;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi# print STDERR $INC{'Memoize.pm'}, "\n";
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint "1..10\n";
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi# Test MERGE
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchisub xx {
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi wantarray();
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchimy $s = xx();
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint ((!$s) ? "ok 1\n" : "not ok 1\n");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchimy ($a) = xx();
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint (($a) ? "ok 2\n" : "not ok 2\n");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchimemoize 'xx', LIST_CACHE => MERGE;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi$s = xx();
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint ((!$s) ? "ok 3\n" : "not ok 3\n");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi($a) = xx(); # Should return cached false value from previous invocation
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint ((!$a) ? "ok 4\n" : "not ok 4\n");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi# Test FAULT
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchisub ns {}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchisub na {}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchimemoize 'ns', SCALAR_CACHE => FAULT;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchimemoize 'na', LIST_CACHE => FAULT;
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchieval { my $s = ns() }; # Should fault
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint (($@) ? "ok 5\n" : "not ok 5\n");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchieval { my ($a) = na() }; # Should fault
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint (($@) ? "ok 6\n" : "not ok 6\n");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi# Test HASH
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchimy (%s, %l);
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchisub nul {}
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchimemoize 'nul', SCALAR_CACHE => [HASH => \%s], LIST_CACHE => [HASH => \%l];
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchinul('x');
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchinul('y');
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint ((join '', sort keys %s) eq 'xy' ? "ok 7\n" : "not ok 7\n");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint ((join '', sort keys %l) eq '' ? "ok 8\n" : "not ok 8\n");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi() = nul('p');
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi() = nul('q');
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint ((join '', sort keys %s) eq 'xy' ? "ok 9\n" : "not ok 9\n");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchiprint ((join '', sort keys %l) eq 'pq' ? "ok 10\n" : "not ok 10\n");
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi
9d26e4fc021e249c93c2861629cc665e4f5bd4d6Robert Mustacchi