3 use warnings FATAL => 'all';
8 my $number_of_classes = shift || 1500;
9 my $number_of_attributes = shift || 20;
10 my $t = shift || File::Temp->newdir;
14 (-d $tmp) or die "not a dir: $tmp";
20 my $attrs = join '', map { "has '$_' => ( is => 'ro', isa => 'Str' );\n" } @_;
21 return qq{package $name;\nuse Moose;\n$attrs\n1;\n__END__\n};
25 my $attrs = join'', map { "has '$_' => ( is => 'ro', isa => 'Str' );\n" } @_;
26 return qq{package $name;\nuse Moo;\n$attrs\n1;\n__END__\n};
30 my $attrs = join'', map { "has '$_' => ( is => 'ro', isa => 'Str' );\n" } @_;
31 return qq{package $name;\nuse Mo;\n$attrs\n1;\n__END__\n};
35 my $attrs = join'', map { "has '$_' => ( is => 'ro', isa => 'Str' );\n" } @_;
36 return qq{package $name;\nuse Mouse;\n$attrs\n1;\n__END__\n};
38 'plain-package' => sub {
40 my $attrs = join'', map { "sub $_ {}\n" } @_;
41 return qq{package $name;\n$attrs\n1;\n__END__\n};
45 my $class_prefix = 'TmpClassThingy';
47 my @attribute_names = map { 'a' . $_ } 1 .. $number_of_attributes;
48 for my $module (sort keys %class_writer) {
49 my $lib = $tmp->subdir($module . '-lib');
51 my $all_fh = $lib->file('All.pm')->openw;
52 for my $n (1 .. $number_of_classes) {
53 my $class_name = $class_prefix . $n;
54 my $fh = $lib->file($class_name . '.pm')->openw;
55 $fh->say($class_writer{$module}->($class_name, @attribute_names)) or die;
57 $all_fh->say("use $class_name;") or die;
59 $all_fh->say('1;') or die;
60 $all_fh->close or die;
61 $lib_map{$module} = $lib;
65 for my $module (sort keys %lib_map) {
66 my $lib = $lib_map{$module};
68 my $cmd = "time -p $^X -I$lib -MAll -e '1'";
69 `$cmd > /dev/null 2>&1`; # to cache