TEST(ArenaTest, AllocateStringPiece) { Arena arena; toft::StringPiece origin = "hello world"; toft::StringPiece copy = arena.Allocate(origin); EXPECT_EQ(origin, copy); EXPECT_NE(origin.data(), copy.data()); EXPECT_EQ(copy.data(), arena.current_block()); }
TEST(ArenaTest, AllocateFn) { Arena arena; size_t kSerializeSize = kMinBlockSize + 1; MockFn fn; { InSequence in_sequence; EXPECT_CALL(fn, Serialize(NULL, arena.remained_buffer(), arena.remained_buffer_size())) .WillOnce(Return(kSerializeSize)); EXPECT_CALL(fn, Serialize(NULL, NotNull(), Ge(kSerializeSize))) .WillOnce(Return(kSerializeSize)); } toft::StringPiece ret = arena.Allocate( boost::bind(&MockFn::Serialize, &fn, static_cast<void*>(NULL), _1, _2) ); EXPECT_EQ(kSerializeSize, ret.size()); EXPECT_LT(kMinBlockSize, arena.total_reserved_bytes()); EXPECT_EQ(ret.data(), arena.current_block()); }