Fix for JRUBY-2882. Handle error messages related to constructors better
[jruby.git] / bench / ffi / bench_getpwnam.rb
blob7632e76bcb5d9735bbd857e8d348c70a2be01894
1 require 'benchmark'
2 require 'ffi'
3 require 'etc'
5 require File.join(JRuby::FFI::Platform::CONF_DIR, "etc")
6 Passwd = Platform::Etc::Passwd
8 iter = 100000
10 module JPosix
11   extend JRuby::FFI::Library
12   attach_function :getpwnam, [ :string ], :pointer
13 end
14 module RbxPosix
15   extend FFI::Library
16   attach_function :getpwnam, [ :string ], :pointer
17 end
19 login = Etc.getlogin
21 ffiname = Passwd.new(JPosix.getpwnam(login))[:pw_name]
22 etcname = Etc.getpwnam(login).name
23 puts "pw_name does not match Etc.getpwnam.name" if ffiname != etcname
25 pwd = Etc.getpwnam(login)
26 puts "members=#{pwd.members.inspect}"
27 puts "values=#{pwd.values.inspect}"
29 pwd = Passwd.new(JPosix.getpwnam(login))
30 puts "members=#{pwd.members.inspect}"
31 puts "values=#{pwd.values.inspect}"
34 puts "Benchmark FFI getpwnam (rubinius api) performance, #{iter}x"
36 10.times {
37   puts Benchmark.measure {
38     iter.times {
39       pwd = Passwd.new RbxPosix.getpwnam(login)
40       pwd[:pw_name]
41       pwd[:pw_uid]
42       pwd[:pw_gid]
43     }
44   }
46 puts "Benchmark FFI getpwnam (jruby api) performance, #{iter}x"
48 10.times {
49   puts Benchmark.measure {
50     iter.times {
51       pwd = Passwd.new JPosix.getpwnam(login)
52       pwd[:pw_name]
53       pwd[:pw_uid]
54       pwd[:pw_gid]
55     }
56   }
58 puts "Benchmark Etc.getpwnam performance, #{iter}x"
59 10.times {
60   puts Benchmark.measure {
61     iter.times { 
62       pwd = Etc.getpwnam(login); 
63       
64       pwd.name 
65       pwd.uid
66       pwd.gid
67     }
68   }