qsort_gendata.pl 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #!/usr/bin/perl -w
  2. #==========================================================================
  3. # qsort_gendata.pl
  4. #
  5. # Author : Christopher Batten (cbatten@mit.edu)
  6. # Date : April 29, 2005
  7. #
  8. (our $usageMsg = <<'ENDMSG') =~ s/^\#//gm;
  9. #
  10. # Simple script which creates an input data set and the reference data
  11. # for the qsort benchmark.
  12. #
  13. ENDMSG
  14. use strict "vars";
  15. use warnings;
  16. no warnings("once");
  17. use Getopt::Long;
  18. #--------------------------------------------------------------------------
  19. # Command line processing
  20. #--------------------------------------------------------------------------
  21. our %opts;
  22. sub usage()
  23. {
  24. print "\n";
  25. print " Usage: qsort_gendata.pl [options] \n";
  26. print "\n";
  27. print " Options:\n";
  28. print " --help print this message\n";
  29. print " --size size of input data [250]\n";
  30. print " --seed random seed [1]\n";
  31. print "$usageMsg";
  32. exit();
  33. }
  34. sub processCommandLine()
  35. {
  36. $opts{"help"} = 0;
  37. $opts{"size"} = 250;
  38. $opts{"seed"} = 1;
  39. Getopt::Long::GetOptions( \%opts, 'help|?', 'size:i', 'seed:i' ) or usage();
  40. $opts{"help"} and usage();
  41. }
  42. #--------------------------------------------------------------------------
  43. # Helper Functions
  44. #--------------------------------------------------------------------------
  45. sub printArray
  46. {
  47. my $arrayName = $_[0];
  48. my $arrayRef = $_[1];
  49. my $numCols = 20;
  50. my $arrayLen = scalar(@{$arrayRef});
  51. print "type ".$arrayName."[DATA_SIZE] = \n";
  52. print "{\n";
  53. if ( $arrayLen <= $numCols ) {
  54. print " ";
  55. for ( my $i = 0; $i < $arrayLen; $i++ ) {
  56. print sprintf("%3d",$arrayRef->[$i]);
  57. if ( $i != $arrayLen-1 ) {
  58. print ", ";
  59. }
  60. }
  61. print "\n";
  62. }
  63. else {
  64. my $numRows = int($arrayLen/$numCols);
  65. for ( my $j = 0; $j < $numRows; $j++ ) {
  66. print " ";
  67. for ( my $i = 0; $i < $numCols; $i++ ) {
  68. my $index = $j*$numCols + $i;
  69. print sprintf("%3d",$arrayRef->[$index]);
  70. if ( $index != $arrayLen-1 ) {
  71. print ", ";
  72. }
  73. }
  74. print "\n";
  75. }
  76. if ( $arrayLen > ($numRows*$numCols) ) {
  77. print " ";
  78. for ( my $i = 0; $i < ($arrayLen-($numRows*$numCols)); $i++ ) {
  79. my $index = $numCols*$numRows + $i;
  80. print sprintf("%3d",$arrayRef->[$index]);
  81. if ( $index != $arrayLen-1 ) {
  82. print ", ";
  83. }
  84. }
  85. print "\n";
  86. }
  87. }
  88. print "};\n\n";
  89. }
  90. #--------------------------------------------------------------------------
  91. # Main
  92. #--------------------------------------------------------------------------
  93. sub main()
  94. {
  95. processCommandLine();
  96. srand($opts{"seed"});
  97. my @values;
  98. for ( my $i = 0; $i < $opts{"size"}; $i++ ) {
  99. push( @values, int(rand((1<<31)-1)) );
  100. }
  101. my @sorted = sort { $a <=> $b } @values;
  102. print "\n\#define DATA_SIZE ".$opts{"size"}." \n\n";
  103. printArray( "input_data", \@values );
  104. printArray( "verify_data", \@sorted );
  105. }
  106. main();