示例#1
0
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());
}
示例#2
0
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());
}