Fix for JRUBY-2882. Handle error messages related to constructors better
[jruby.git] / bench / bench_nsieve.rb
blobc92d6953b507bbf13509fc5575121d5d3b45c8cb
1 # Adapted for JRuby benchmarking based on...
3 # The Computer Language Shootout
4 # http://shootout.alioth.debian.org/
6 # contributed by Glenn Parker, March 2005
7 # modified by Evan Phoenix, Sept 2006
8 require 'benchmark'
10 def sieve(m)
11   flags = Flags.dup[0,m]
12   count = 0
13   pmax = m - 1
14   p = 2
15   while p <= pmax
16     unless flags[p].zero?
17       count += 1
18       mult = p
19       while mult <= pmax
20         flags[mult] = 0
21         mult += p
22       end
23     end
24     p += 1
25   end
26   count
27 end
29 n = (ARGV[0] || 2).to_i
31 Flags = "\x1" * ( 2 ** n * 10_000)
33 puts Benchmark.measure {
34 n.downto(n-2) do |exponent|
35   break if exponent < 0
36   m = (1 << exponent) * 10_000
37   # m = (2 ** exponent) * 10_000
38   count = sieve(m)
39   printf "Primes up to %8d %8d\n", m, count
40 end
43 puts Benchmark.measure {
44 n.downto(n-2) do |exponent|
45   break if exponent < 0
46   m = (1 << exponent) * 10_000
47   # m = (2 ** exponent) * 10_000
48   count = sieve(m)
49   printf "Primes up to %8d %8d\n", m, count
50 end