消息类的设计
message.h
复制代码
#ifndef MESSAGE_H
#define MESSAGE_H
#define TRUE 1
#define FALSE 0
typedef struct {
int sender;
int isSend;
int isCharge;
char date[8];
}Message;
Message * makeMessage(const int sender, const char *date);
void setSendFlag(Message * const message);
void setChargeFlag(Message * const message);
int isSameDate(const Message * const message, const char * const date);
char * format(const Message * const message);
const char * boolStr(const int value);
#endif
复制代码
message.c
复制代码
#include
#include
#include
#include
#include "message.h"
Message * makeMessage(const int sender, const char *date)
{
Message *message = (Message*)malloc(sizeof(Message));
assert(message != NULL);
message->sender = sender;
message->isSend = FALSE;
message->isCharge = FALSE;
strncpy(message->date, date, 8);
return message;
}
const char * boolStr(const int value)
{
return value == TRUE "TRUE" : "FALSE";
}
char * format(const Message * const message)
{
#define BUF_SIZE 1024
static char buffer[BUF_SIZE];
memset(&buffer, 0, BUF_SIZE);
snprintf((char*)&buffer, BUF_SIZE, "Message <%d isSend:%s isCharge:%s>\n", \
message->sender, boolStr(message->isSend), boolStr(message->isCharge));
return (char*)buffer;
}
void setSendFlag(Message * const message)
{
message->isSend = TRUE;
}
void setChargeFlag(Message * const message)
{
message->isCharge = TRUE;
}
int isSameDate(const Message * const message, const char * const date)
{
if (strncmp(message->date, date, 8) == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
复制代码
testMessage.c
复制代码
#include
#include "message.h"
#include "gtest/gtest.h"
TEST(MESSAGE,makeMessage){
Message *message = makeMessage(1,"20131212");
EXPECT_EQ(1, message->sender);
EXPECT_STREQ("Message <1 isSend:FALSE isCharge:FALSE>\n", format(message));
}
复制代码
链表类的实现
node.h
复制代码
#ifndef NOTE_H
#define NOTE_H
typedef struct Node{
void *ptr;
struct Node *next;
}Node;
Node *makeListWithArray(void *array[], int length);
void foreach(Node *list, void (*process) (Node *));
#endif
复制代码
node.c
复制代码
#include
#include
#include "node.h"
Node *makeListWithArray(void *array[], int length)
{
int i;
Node *last = NULL;
assert(array != NULL && length > 0);
for(i = length - 1; i >= 0; i--)
{
Node *node = (Node*)malloc(sizeof(Node));
node->ptr = array[i];
node->next = last;
last = node;
}
return last;
}
void foreach(Node *list, void (*process) (Node *))
{
Node *current = NULL;
assert(list != NULL && process != NULL);
for(current = list; current != NULL; current = current->next)
{
process(current);
}
}
复制代码
testNode.c
复制代码
#include
#include "node.h"
#include "gtest/gtest.h"
void printNode(Node *node)
{
static int i = 0;
int data[] = {1,2,3};
EXPECT_EQ(data[i], *(int*)node->ptr);