技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

C语言:Message类

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 <assert.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#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 %s %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 <stdio.h>
#include "message.h"
#include "gtest/gtest.h"

TEST(MESSAGE,makeMessage){
    Message *message = makeMessage(1,"20131212");
    EXPECT_EQ(1, message->sender);
    EXPECT_STREQ("Message <1 FALSE FALSE>\n", format(message));
}
复制代码

 

编译命令:

g++ -c message.c
g++ -c testMessage.c
g++ message.o testMessage.o -lgtest -lpthread
./a.out

 

输出

复制代码
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from MESSAGE
[ RUN      ] MESSAGE.makeMessage
[       OK ] MESSAGE.makeMessage (0 ms)
[----------] 1 test from MESSAGE (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (2 ms total)
[  PASSED  ] 1 test.
复制代码

 

posted on   codestyle  阅读(1974)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示