gtest项目使用举例:
#include "gtest/gtest.h"
#include "messenger/server.h"
class TestServer: public ::testing::Test
{
public:
virtual void SetUp() {
server = new MessengerServer();
}
virtual void TearDown() {
if (server) {
delete server;
server = nullptr;
}
}
bool has_any_zero_bit(unsigned char* bitmap, uint64_t size) {
assert(bitmap);
for (uint64_t i = 0; i < size; i++) {
uint64_t part = i / 8;
uint64_t off = i % 8;
if (!(bitmap[part] & (1 << off)))
return false;
}
return true;
}
MessengerServer *server;
};
#case1
TEST_F(TestServer, test_judge_available_chunk_with_empty) {
unsigned char bitmap[BITMAP_SIZE];
memset(bitmap, 0, BITMAP_SIZE);
uint64_t s_chunk = 10;
uint64_t e_chunk = 41;
ASSERT_FALSE(server->test_has_any_available_chunk(bitmap, s_chunk, e_chunk));
}
#case2
TEST_F(TestServer, test_judge_available_chunk_with_full) {
unsigned char bitmap[BITMAP_SIZE];
memset(bitmap, ~0, BITMAP_SIZE);
uint64_t s_chunk = 10;
uint64_t e_chunk = 41;
ASSERT_TRUE(server->test_has_any_available_chunk(bitmap, s_chunk, e_chunk));
}
#case3
TEST_F(TestServer, test_judge_available_chunk_with_any) {
unsigned char bitmap[BITMAP_SIZE];
uint64_t s_chunk = 10;
uint64_t e_chunk = 41;
for (uint32_t i = 0 + s_chunk; i < BITMAP_SIZE + s_chunk; i++) {
memset(bitmap, 0, BITMAP_SIZE);
uint64_t part = (i - s_chunk) / 8;
uint64_t off = (i - s_chunk) % 8;
bitmap[part] |= (1 << off);
ASSERT_TRUE(server->test_has_any_available_chunk(bitmap, s_chunk, e_chunk));
}
}
int main(int argc, const char **argv) {
testing::InitGoogleTest(&argc, (char**)argv);
return RUN_ALL_TESTS();
}