Fix for JRUBY-2882. Handle error messages related to constructors better
[jruby.git] / bench / bench_io_read.rb
blob1132b57051f928a83eaaabf0bb3547a8f0f8f8ef
1 require 'benchmark'
3 MAX  = 10000
4 IOREPS = 100000
5 BLOCKSIZE = 16 * 1024
6 FILE = 'io_test_bench_file.txt'
8 File.open(FILE, 'w'){ |fh|
9    30000.times{ |n|
10       fh.puts "This is line: #{n}"
11    }
13 stat = File.stat(FILE)
14 buf_sizes = (0..16).map { |i| 1 << i }
15 (ARGV[0] || 5).to_i.times do
16   Benchmark.bm(30) do |x|
17     # Class Methods
18     buf_sizes.each { |size|
19       read_iter = BLOCKSIZE / size
20       read_iter = read_iter > 4096 ? 4096 : read_iter < 16 ? 16 : read_iter
21       f = File.new(FILE)        
22       x.report("#{read_iter}.times { f.read(#{size}) }") {
23         MAX.times{ 
24           f.seek(0)
25           read_iter.times { f.read(size) }
26         }
27       }
28       f.close
29     }
30     x.report('IO.read(file)'){
31       MAX.times{ 
32         buf = IO.read(FILE) 
33         if buf.length < stat.size
34           raise "Incorrect size returned by IO.read() #{buf.length} != #{stat.size}"
35         end
36       }
37     }
38     
39     buf_sizes.each do |size|
40       x.report("IO.read(file, #{size})"){
41         IOREPS.times{ 
42           buf = IO.read(FILE, size) 
43         }
44       }
45       x.report("IO.read(file, #{size}, 20)"){
46         IOREPS.times{ IO.read(FILE, size, 20) }
47       }
48     end
49     
50     x.report('IO.foreach(file)'){
51       MAX.times{ IO.foreach(FILE){} }
52     }
53   end
54 end
55 File.delete(FILE) if File.exists?(FILE)