1 # require 'profile' 2 require 'romp' 3 4 # client = ROMP::Client.new('tcppromp://localhost:4242', false) 5 # client = ROMP::Client.new('udppromp://localhost:4242', false) 6 client = ROMP::Client.new('unixromp:///tmp/foo', false) 7 obj = client.resolve("foo") 8 9 N = 10 10 11 # --- Test normal functions --- 12 puts "Normal functions, no synchronization" 13 GC.start 14 start_time = Time.now 15 for i in 1..N do 16 obj.foo(i) 17 end 18 obj.sync() 19 total_time = Time.now - start_time 20 puts " Total time: #{total_time}" 21 puts " Messages per second: #{N/total_time}" 22 23 sleep(1) 24 25 # --- Test oneway functions --- 26 puts "Oneway functions, with synchronization" 27 GC.start 28 start_time = Time.now 29 for i in 1..N do 30 obj.oneway_sync(:foo, i) 31 # if (i % 1000) == 0 then 32 # obj.sync 33 # end 34 end 35 obj.sync() 36 total_time = Time.now - start_time 37 puts " Total time: #{total_time}" 38 puts " Messages per second: #{N/total_time}" 39 40 puts "You should see the number #{N}:" 41 puts obj.i() 42 43 # -- Test oneway functions without sync --- 44 puts "Oneway functions, no synchronization" 45 puts "(if this is slow, it is because the TCP buffers are being filled too fast)" 46 GC.start 47 start_time = Time.now 48 for i in 1..N do 49 obj.oneway(:foo, i) 50 # if (i % 1000) == 0 then 51 # obj.sync 52 # end 53 end 54 obj.sync() 55 total_time = Time.now - start_time 56 puts " Total time: #{total_time}" 57 puts " Messages per second: #{N/total_time}" 58 59 puts "You should see the number #{N}:" 60 puts obj.i() 61 # --- Test object inspection --- 62 puts "You should see an object Foo with an element @i=#{N}" 63 puts obj.inspect() 64 65 # --- Test dup --- 66 foo = obj.methods() 67 if foo.index("dup") then 68 puts "uh oh, shouldn't have found dup" 69 end 70 71 # --- Test resopnd_to for clone --- 72 if obj.respond_to?("clone") then 73 puts "uh oh, obj should not respond to clone" 74 end 75 76 # --- Test clone --- 77 except = false 78 begin 79 obj.clone() 80 rescue NameError 81 except = true 82 end 83 if !except then 84 puts "uh oh, I was able to clone obj" 85 end 86 87 # -- Test respond_to for foo --- 88 if !obj.respond_to?("foo") then 89 puts "uh oh, obj should respond to foo!" 90 end 91 92 # --- Test iterators --- 93 puts "You should see the numbers 1, 2, and 3 on separate lines:" 94 obj.each do |i| 95 puts i 96 end 97 98 # --- Test object references --- 99 puts "You should see the number #{obj.i + 1}:" 100 b = obj.bar 101 puts b.i 102 b.release 103 104 # --- Test exceptions 105 puts "You should now see a RuntimeError get thrown:" 106 obj.throw_exception()