|  | // Protocol Buffers - Google's data interchange format | 
|  | // Copyright 2024 Google LLC.  All rights reserved. | 
|  | // | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file or at | 
|  | // https://developers.google.com/open-source/licenses/bsd | 
|  |  | 
|  | use googletest::prelude::*; | 
|  | use protobuf::prelude::*; | 
|  | use unittest_rust_proto::TestAllTypes; | 
|  |  | 
|  | #[gtest] | 
|  | fn test_thread_local_arena() { | 
|  | // We use a thread-local arena to allocate minitables, so let's verify that a minitable remains | 
|  | // valid even after that the thread that initialized it has exited. | 
|  | let handle = std::thread::spawn(|| { | 
|  | let mut m = TestAllTypes::new(); | 
|  | m.set_optional_int32(3); | 
|  | let _ = m.serialize(); | 
|  | }); | 
|  | handle.join().unwrap(); | 
|  |  | 
|  | let mut m1 = TestAllTypes::new(); | 
|  | m1.set_optional_int32(5); | 
|  | let m2 = TestAllTypes::parse(&m1.serialize().unwrap()).unwrap(); | 
|  | assert_that!(m1.optional_int32(), eq(m2.optional_int32())); | 
|  | } |