|  | #!/usr/bin/ruby | 
|  |  | 
|  | require 'google/protobuf' | 
|  | require 'test/unit' | 
|  |  | 
|  | module StressTest | 
|  | pool = Google::Protobuf::DescriptorPool.new | 
|  | pool.build do | 
|  | add_message "TestMessage" do | 
|  | optional :a,  :int32,        1 | 
|  | repeated :b,  :message,      2, "M" | 
|  | end | 
|  | add_message "M" do | 
|  | optional :foo, :string, 1 | 
|  | end | 
|  | end | 
|  |  | 
|  | TestMessage = pool.lookup("TestMessage").msgclass | 
|  | M = pool.lookup("M").msgclass | 
|  |  | 
|  | class StressTest < Test::Unit::TestCase | 
|  | def get_msg | 
|  | TestMessage.new(:a => 1000, | 
|  | :b => [M.new(:foo => "hello"), | 
|  | M.new(:foo => "world")]) | 
|  | end | 
|  | def test_stress | 
|  | m = get_msg | 
|  | data = TestMessage.encode(m) | 
|  | 100_000.times do | 
|  | mnew = TestMessage.decode(data) | 
|  | mnew = mnew.dup | 
|  | assert_equal m.inspect, mnew.inspect | 
|  | assert_equal data, TestMessage.encode(mnew) | 
|  | end | 
|  | end | 
|  | end | 
|  | end |