1 # require 'profile' 2 require 'druby3' 3 4 client = DRuby::Client.new('localhost', '4242', false) 5 obj = client.resolve("foo") 6 7 N = 10000 8 9 # --- Test normal functions --- 10 puts "Normal functions, no synchronization" 11 start_time = Time.now 12 for i in 1..N do 13 obj.foo(i) 14 end 15 obj.sync() 16 total_time = Time.now - start_time 17 puts " Total time: #{total_time}" 18 puts " Messages per second: #{N/total_time}" 19 20 # TODO: For some reason, mixing normal function calls with oneway calls 21 # causes the oneways to run at 1/10 regular speed 22 client = DRuby::Client.new('localhost', '4242', false) 23 obj = client.resolve("foo") 24 25 # --- Test oneway functions --- 26 puts "Oneway functions, no synchronization" 27 start_time = Time.now 28 for i in 1..N do 29 obj.oneway(:foo, i) 30 end 31 obj.sync() 32 total_time = Time.now - start_time 33 puts " Total time: #{total_time}" 34 puts " Messages per second: #{N/total_time}" 35 36 puts "You should see the number #{N}:" 37 puts obj.i() 38 39 # --- Test object inspection --- 40 puts "You should see an object Foo with an element @i=#{N}" 41 puts obj.inspect() 42 43 # --- Test dup --- 44 foo = obj.methods() 45 if foo.index("dup") then 46 puts "uh oh, shouldn't have found dup" 47 end 48 49 # --- Test resopnd_to for clone --- 50 if obj.respond_to?("clone") then 51 puts "uh oh, obj should not respond to clone" 52 end 53 54 # --- Test clone --- 55 except = false 56 begin 57 obj.clone() 58 rescue NameError 59 except = true 60 end 61 if !except then 62 puts "uh oh, I was able to clone obj" 63 end 64 65 # -- Test respond_to for foo --- 66 if !obj.respond_to?("foo") then 67 puts "uh oh, obj should respond to foo!" 68 end 69 70 # --- Test iterators --- 71 puts "You should see the numbers 1, 2, and 3 on separate lines:" 72 obj.each do |i| 73 puts i 74 end 75 76 # --- Test object references --- 77 puts "You should see the number #{obj.i + 1}:" 78 b = obj.bar 79 puts b.i 80 81 # --- Test exceptions 82 puts "You should now see a RuntimeError get thrown:" 83 obj.throw_exception()