xref: /aosp_15_r20/external/protobuf/ruby/tests/stress.rb (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
1*1b3f573fSAndroid Build Coastguard Worker#!/usr/bin/ruby
2*1b3f573fSAndroid Build Coastguard Worker
3*1b3f573fSAndroid Build Coastguard Workerrequire 'google/protobuf'
4*1b3f573fSAndroid Build Coastguard Workerrequire 'test/unit'
5*1b3f573fSAndroid Build Coastguard Worker
6*1b3f573fSAndroid Build Coastguard Workermodule StressTest
7*1b3f573fSAndroid Build Coastguard Worker  pool = Google::Protobuf::DescriptorPool.new
8*1b3f573fSAndroid Build Coastguard Worker  pool.build do
9*1b3f573fSAndroid Build Coastguard Worker    add_message "TestMessage" do
10*1b3f573fSAndroid Build Coastguard Worker      optional :a,  :int32,        1
11*1b3f573fSAndroid Build Coastguard Worker      repeated :b,  :message,      2, "M"
12*1b3f573fSAndroid Build Coastguard Worker    end
13*1b3f573fSAndroid Build Coastguard Worker    add_message "M" do
14*1b3f573fSAndroid Build Coastguard Worker      optional :foo, :string, 1
15*1b3f573fSAndroid Build Coastguard Worker    end
16*1b3f573fSAndroid Build Coastguard Worker  end
17*1b3f573fSAndroid Build Coastguard Worker
18*1b3f573fSAndroid Build Coastguard Worker  TestMessage = pool.lookup("TestMessage").msgclass
19*1b3f573fSAndroid Build Coastguard Worker  M = pool.lookup("M").msgclass
20*1b3f573fSAndroid Build Coastguard Worker
21*1b3f573fSAndroid Build Coastguard Worker  class StressTest < Test::Unit::TestCase
22*1b3f573fSAndroid Build Coastguard Worker    def get_msg
23*1b3f573fSAndroid Build Coastguard Worker      TestMessage.new(:a => 1000,
24*1b3f573fSAndroid Build Coastguard Worker                      :b => [M.new(:foo => "hello"),
25*1b3f573fSAndroid Build Coastguard Worker                             M.new(:foo => "world")])
26*1b3f573fSAndroid Build Coastguard Worker    end
27*1b3f573fSAndroid Build Coastguard Worker    def test_stress
28*1b3f573fSAndroid Build Coastguard Worker      m = get_msg
29*1b3f573fSAndroid Build Coastguard Worker      data = TestMessage.encode(m)
30*1b3f573fSAndroid Build Coastguard Worker      100_000.times do
31*1b3f573fSAndroid Build Coastguard Worker        mnew = TestMessage.decode(data)
32*1b3f573fSAndroid Build Coastguard Worker        mnew = mnew.dup
33*1b3f573fSAndroid Build Coastguard Worker        assert_equal m.inspect, mnew.inspect
34*1b3f573fSAndroid Build Coastguard Worker        assert TestMessage.encode(mnew) == data
35*1b3f573fSAndroid Build Coastguard Worker      end
36*1b3f573fSAndroid Build Coastguard Worker    end
37*1b3f573fSAndroid Build Coastguard Worker  end
38*1b3f573fSAndroid Build Coastguard Workerend
39