perldoc.t 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #! /usr/bin/env perl
  2. # brian d foy: "Compiled perlpod should be faster then uncompiled"
  3. use Test::More;
  4. use strict;
  5. BEGIN {
  6. unshift @INC, 't';
  7. require "test.pl";
  8. }
  9. use Config;
  10. use File::Spec;
  11. use Time::HiRes qw(gettimeofday tv_interval);
  12. sub faster { ($_[1] - $_[0]) < 0.01 }
  13. my $X = $^X =~ m/\s/ ? qq{"$^X"} : $^X;
  14. my $perldoc = File::Spec->catfile($Config{installbin}, 'perldoc');
  15. my $perlcc = $] < 5.008
  16. ? "$X -Iblib/arch -Iblib/lib blib/script/perlcc"
  17. : "$X -Mblib blib/script/perlcc";
  18. $perlcc .= " -Wb=-fno-fold,-fno-warnings -UB";
  19. # . " -uPod::Perldoc::ToMan -uPod::Perldoc::ToText -uPod::Perldoc::BaseTo";
  20. my $exe = $Config{exe_ext};
  21. my $perldocexe = $^O eq 'MSWin32' ? "perldoc$exe" : "./perldoc$exe";
  22. # XXX bother File::Which?
  23. die "1..1 # $perldoc not found\n" unless -f $perldoc;
  24. plan tests => 7;
  25. my $compile = "$perlcc -o $perldocexe $perldoc";
  26. diag $compile;
  27. my $res = `$compile`;
  28. ok(-s $perldocexe, "$perldocexe compiled"); #1
  29. diag "see if $perldoc -T works";
  30. my $T_opt = "-T -f wait";
  31. my $ori;
  32. my $PAGER = '';
  33. my ($result, $out, $err);
  34. my $t0 = [gettimeofday];
  35. if ($^O eq 'MSWin32') {
  36. $T_opt = "-t -f wait";
  37. $PAGER = "PERLDOC_PAGER=type ";
  38. ($result, $ori, $err) = run_cmd("$PAGER$X -S $perldoc $T_opt", 20);
  39. } else {
  40. ($result, $ori, $err) = run_cmd("$X -S $perldoc $T_opt 2>&1", 20);
  41. }
  42. my $t1 = tv_interval( $t0 );
  43. if ($ori =~ /Unknown option/) {
  44. $T_opt = "-t -f wait";
  45. $PAGER = "PERLDOC_PAGER=cat " if $^O ne 'MSWin32';
  46. diag "No, use $PAGER instead";
  47. $t0 = [gettimeofday];
  48. ($result, $ori, $err) = run_cmd("$PAGER$X -S $perldoc $T_opt", 20);
  49. $t1 = tv_interval( $t0 );
  50. } else {
  51. diag "it does";
  52. }
  53. $t0 = [gettimeofday];
  54. ($result, $out, $err) = run_cmd("$PAGER $perldocexe $T_opt", 20);
  55. my $t2 = tv_interval( $t0 );
  56. TODO: {
  57. # old perldoc 3.14_04-3.15_04: Can't locate object method "can" via package "Pod::Perldoc" at /usr/local/lib/perl5/5.14.1/Pod/Perldoc/GetOptsOO.pm line 34
  58. # dev perldoc 3.15_13: Can't locate object method "_is_mandoc" via package "Pod::Perldoc::ToMan"
  59. local $TODO = "compiled does not print yet";
  60. is($out, $ori, "same result"); #2
  61. }
  62. SKIP: {
  63. skip "cannot compare times", 1 if $out ne $ori;
  64. ok(faster($t1,$t2), "compiled faster than uncompiled: $t2 < $t1"); #3
  65. }
  66. unlink $perldocexe if -e $perldocexe;
  67. $perldocexe = $^O eq 'MSWin32' ? "perldoc_O3$exe" : "./perldoc_O3$exe";
  68. $compile = "$perlcc -O3 -o $perldocexe $perldoc";
  69. diag $compile;
  70. $res = `$compile`;
  71. ok(-s $perldocexe, "perldoc compiled"); #4
  72. $t0 = [gettimeofday];
  73. ($result, $out, $err) = run_cmd("$PAGER $perldocexe $T_opt", 20);
  74. my $t3 = tv_interval( $t0 );
  75. TODO: {
  76. local $TODO = "compiled does not print yet";
  77. is($out, $ori, "same result"); #5
  78. }
  79. SKIP: {
  80. skip "cannot compare times", 2 if $out ne $ori;
  81. ok(faster($t2,$t3), "compiled -O3 not slower than -O0: $t3 <= $t2"); #6
  82. ok(faster($t1,$t3), "compiled -O3 faster than uncompiled: $t3 < $t1"); #7
  83. }
  84. END {
  85. unlink $perldocexe if -e $perldocexe;
  86. }