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