?? mf_dateex.c
字號:
/*============================================================================* * MF_Date C Unit Tests and Examples *============================================================================*/#undef __FUNC__#define __FUNC__ "MF_DateEx"#include <math.h>#include "MF.h"#include "MF_Date.h"#include "MF_Calendar.h"#include "MF_Time.h"#define START_DATE 20011128#define START_SECS 43200#define STOP_DATE 20041201#define STOP_SECS 1200#define DAY_INC 6#define SEC_INC 43200int main(int argc, char **argv){ int retCalDate, retDays, retSecs; MF_Bool isLater; MF_Date startDateG, stopDateG, retDateG; MF_Date startDateN, stopDateN, retDateN; MF_Time incTime, retTime; double floatDay, calcDay; int retDay; printf("==================================================\n"); printf("MF_Date C Unit Tests and Examples\n"); printf("==================================================\n"); startDateG = MF_DateNewIS(MF_GREGORIAN, START_DATE, START_SECS); stopDateG = MF_DateNewIS(MF_GREGORIAN, STOP_DATE, STOP_SECS); retDateG = MF_DateNewUndefined(); startDateN = MF_DateNewIS(MF_NO_LEAP, START_DATE, START_SECS); stopDateN = MF_DateNewIS(MF_NO_LEAP, STOP_DATE, STOP_SECS); retDateN = MF_DateNewUndefined(); incTime = MF_TimeNewIS(DAY_INC, SEC_INC); retTime = MF_TimeNewUndefined(); MF_DateGetIS(startDateG, &retCalDate, &retSecs); printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs); MF_ERROR_TEST(((retCalDate==START_DATE) && (retSecs==START_SECS)), "MF_DateNewIS, MF_DateGetIS: create Gregorian date and get attr"); MF_DateIncrementSec(startDateG, retDateG, SEC_INC); MF_DateGetIS(retDateG, &retCalDate, &retSecs); printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs); MF_ERROR_TEST(((retCalDate==20011129) && (retSecs==0)), "MF_DateIncrementSec: increment Gregorian date by seconds"); MF_DateIncrementDay(startDateG, retDateG, DAY_INC); MF_DateGetIS(retDateG, &retCalDate, &retSecs); printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs); MF_ERROR_TEST(((retCalDate==20011204) && (retSecs==43200)), "MF_DateIncrementDay: increment Gregorian date by days"); MF_DateIncrement(startDateG, retDateG, incTime); MF_DateGetIS(retDateG, &retCalDate, &retSecs); printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs); MF_ERROR_TEST(((retCalDate==20011205) && (retSecs==0)), "MF_DateIncrement: increment Gregorian date"); MF_DateDecrement(retDateG, retDateG, incTime); MF_DateGetIS(retDateG, &retCalDate, &retSecs); printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs); MF_ERROR_TEST(((retCalDate==20011128) && (retSecs==43200)), "MF_DateDecrement: decrement Gregorian date in place"); MF_DateDiff(startDateG, stopDateG, retTime, &isLater); MF_TimeGetIS(retTime, &retDays, &retSecs); printf("Ret days = %d, Ret secs = %d\n", retDays, retSecs); MF_ERROR_TEST(((retDays==1098) && (retSecs==44400) && (isLater==MF_TRUE)), "MF_DateDiff: difference of two Gregorian dates over leap year"); MF_TimeSetIS(incTime, 1098, 44400); MF_DateDecrement(stopDateG, retDateG, incTime); MF_DateGetIS(retDateG, &retCalDate, &retSecs); printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs); MF_ERROR_TEST(((retCalDate==20011128) && (retSecs==43200)), "MF_DateDecrement: decrement Gregorian date over leap year"); MF_TimeSetIS(incTime, DAY_INC, SEC_INC); MF_DateIncrement(startDateN, retDateN, incTime); MF_DateGetIS(retDateN, &retCalDate, &retSecs); printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs); MF_ERROR_TEST(((retCalDate==20011205) && (retSecs==0)), "MF_DateIncrement: increment no leap date"); MF_DateDecrement(retDateN, retDateN, incTime); MF_DateGetIS(retDateN, &retCalDate, &retSecs); printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs); MF_ERROR_TEST(((retCalDate==20011128) && (retSecs==43200)), "MF_DateDecrement: decrement no leap date in place"); MF_DateSetIS(startDateN, MF_NO_LEAP, 19700101, 0); MF_DateSetIS(stopDateN, MF_NO_LEAP, 19710101, 0); MF_DateDiff(startDateN, stopDateN, retTime, &isLater); MF_TimeGetIS(retTime, &retDays, &retSecs); printf("Ret days = %d, Ret secs = %d\n", retDays, retSecs); MF_ERROR_TEST(((retDays==365) && (retSecs==0) && (isLater==MF_TRUE)), "MF_DateDiff: difference of two no leap dates over leap year"); MF_DateSetIS(startDateN, MF_NO_LEAP, 20011128, 43200); MF_DateSetIS(stopDateN, MF_NO_LEAP, 20041201, 1200); MF_DateDiff(startDateN, stopDateN, retTime, &isLater); MF_TimeGetIS(retTime, &retDays, &retSecs); printf("Ret days = %d, Ret secs = %d\n", retDays, retSecs); MF_ERROR_TEST(((retDays==1097) && (retSecs==44400) && (isLater==MF_TRUE)), "MF_DateDiff: difference of two no leap dates over leap year"); MF_TimeSetIS(incTime, 1097, 44400); MF_DateDecrement(stopDateN, retDateN, incTime); MF_DateGetIS(retDateG, &retCalDate, &retSecs); printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs); MF_ERROR_TEST(((retCalDate==20011128) && (retSecs==43200)), "MF_DateDecrement: decrement no leap date over leap year"); MF_DateSetIS(retDateN, MF_NO_LEAP, 20031224, 3500); MF_DateGetIS(retDateN, &retCalDate, &retSecs); printf("Ret date = %d, Ret secs = %d\n", retCalDate, retSecs); MF_ERROR_TEST(((retCalDate==20031224) && (retSecs==3500)), "MF_DateSet: set a no leap date"); MF_DateIsLater(startDateG, stopDateG, &isLater); MF_ERROR_TEST(isLater == MF_TRUE, "MF_DateIsLater: compare Gregorian dates (true result)"); MF_DateIsLater(stopDateG, startDateG, &isLater); MF_ERROR_TEST(isLater == MF_FALSE, "MF_DateIsLater: compare Gregorian dates (false result)"); printf("\nTest Print Method\n"); MF_DatePrint(startDateG); MF_DateGetFltDayOfYear(startDateG, &floatDay); MF_DateGetDayOfYear(startDateG, &retDay); MF_DateGetIS(startDateG, &retCalDate, &retSecs); calcDay = retDay + (double) (retSecs / 86400.0); printf("Calendar day is:%f\n", floatDay); printf("Calculated day:%f\n", calcDay); printf("Day:%d, sec:%d\n", retDay, retSecs); printf("Difference:%f\n", (calcDay - floatDay)); MF_ERROR_TEST((fabs(calcDay - floatDay) < 0.00001), "MF_DateGetFltDayOfYear: return date as days.seconds"); MF_DateDelete(startDateG); MF_DateDelete(stopDateG); MF_DateDelete(retDateG); MF_DateDelete(startDateN); MF_DateDelete(stopDateN); MF_DateDelete(retDateN); MF_TimeDelete(incTime); MF_TimeDelete(retTime); return(MF_SUCCESS);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -