长度系统req5

#ifndef LENGTH_H_
#define LENGTH_H_

#include <stdio.h>
#include <stdlib.h>

#define True  1
#define False 0

typedef enum {
    Mile = 0,
    Yard,
    Feet,
    Inch,
    MaxType
}unit_e;

extern unsigned int dimension[MaxType];

typedef struct {
    unsigned int  value;
    unit_e        unit;
    unsigned int  absolute;         
}length_t;

int Length(unsigned int value, unit_e unit, length_t* const length);

int LengthEqual(const length_t* const len1, const length_t* const len2);

int LengthAdd(const length_t* const len1, const length_t* const len2, length_t* const ret);

#endif
#include "Length.h"

unsigned int dimension[MaxType] = {1760*3*12, 3*12, 12, 1};

int Length(unsigned int value, unit_e unit, length_t* const length) {
    if (value < 0 || unit >= MaxType || NULL == length) {
        return -1;
    }
    length->value = value;
    length->unit = unit;
    length->absolute = value * dimension[length->unit];
    return 0;
}

int LengthEqual(const length_t* const len1, const length_t* const len2) {
    return (len1->absolute == len2->absolute ? True : False);
}

int LengthAdd(const length_t* const len1, const length_t* const len2, length_t* const ret) {
    if (len1 == NULL || len2 == NULL || ret == NULL)
        return -1;
    ret->absolute = len1->absolute + len2->absolute;
    ret->value = ret->absolute;
    ret->unit = Inch;
    return 0;
}
#include <assert.h>
#include "Length.h"

void main(void) {

    length_t *len1 = (length_t *)malloc(sizeof(length_t));
    length_t *len2 = (length_t *)malloc(sizeof(length_t));
    length_t *ret = (length_t *)malloc(sizeof(length_t));
    if (NULL == len1 || NULL == len2 || NULL == ret) {
        goto malloc_error;
    }
    /* Tset1 */
    Length(13, Inch, len1);
    Length(11, Inch, len2);
    Length(0, Inch, ret);
    LengthAdd(len1, len2, ret);
    Length(2, Feet, len1);
    assert(LengthEqual(ret, len1));
    /* Tset2 */
    Length(3, Feet, len1);
    Length(2, Yard, len2);
    LengthAdd(len1, len2, ret);
    Length(3, Yard, len1);
    assert(LengthEqual(ret, len1));

    printf("Value Compare Test  : All PASS!\n");
    free(len1);
    free(len2);
    free(ret);
    exit(0);
    malloc_error:
        printf("Malloc Error! Test Falid!\n");
        exit(-1);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值