01 #!/usr/bin/perl 02 use warnings; use strict; 03 use P; 04 ## Before 'make install' is performed this script should be runnable with 05 # 'make test'. After 'make install' it should work as 'perl t09.t' 06 07 ######################### 08 09 our @num2nam; 10 11 BEGIN { 12 our @num2nam = ( 13 [ zero => 0 ], 14 [ one => '0.0.5'], 15 [ two => '0.1.1'], 16 [ three => 0.000005], 17 [ four => 0.000101], 18 [ five => 0.0.5], 19 [ six => 0.1.1], 20 [ seven => 1.10], 21 [ eight => 1.5], 22 [ nine => 0.1.5], 23 [ ten => 0.1.10], 24 [ eleven => '000005'], 25 [ twelve => '001010'], 26 [ thirteen => 3.0014], 27 [ fourteen => 3.1], 28 [ fifteen => '3.0014'], 29 [ sixteen => '3.1'],); 30 31 my $prog=""; 32 33 for (my $i=1; $i < @num2nam; ++$i) { 34 35 my ($nam, $val) = @{$num2nam[$i]}; 36 37 $prog .= sprintf( 38 q< { package %s; 39 our $VERSION=%s; 40 use mem; our @EXPORT; 41 use mem(@EXPORT=qw(exp%s)); 42 sub exp%s() {"%sok"} 43 use Xporter; 44 } > . "\n\n", $nam, $val, $nam, $nam, $nam); 45 } 46 47 eval "$prog"; 48 $@ and do { Pe "eval error: %s", $@; }; 49 } 50 51 package main; 52 53 use Test::More; 54 55 BEGIN { 56 our @num2nam; 57 58 my $prog=""; 59 my $res; 60 61 for (my $i=1; $i < @num2nam; $i+=2) { 62 63 my ($nam1, $val1) = @{$num2nam[$i]}; 64 my ($nam2, $val2) = @{$num2nam[$i+1]}; 65 66 $prog .= sprintf( 67 q< 68 $res = eval "use %s %s; exp%s;"; 69 ok(!defined($res), "undef for res: wanted ver %s from ver %s"); 70 71 $res = eval "use %s %s; exp%s;"; 72 ok($res eq "%sok", "got answer w/min %s from ver %s"); 73 >, $nam1, $val2, $nam1, $val2, $val1, 74 $nam2, $val1, $nam2, $nam2, $val1, $val2); 75 } 76 77 eval "$prog"; 78 $@ and do { Pe "eval error: %s", $@; }; 79 80 } 81 82 83 done_testing(); 84 # vim: ts=2 sw=2 ai number foldcolumn=1