Initial version.
This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
#include <stdint.h>
|
||||
#include <math.h>
|
||||
#include "error.h"
|
||||
#include "unit_test_framework.h"
|
||||
#include "time_ctrl/time_ctrl.h"
|
||||
|
||||
#define HARDWARE_VERSION 0x00000001
|
||||
#define MAX_OPT_DELAY 100 // 1us = 100*10ns
|
||||
|
||||
|
||||
TIMECTRL_CONFIG tmcConfig = {
|
||||
.baseAddr = 0/*TODO: fill withe real base address*/,
|
||||
.reset = 10
|
||||
};
|
||||
|
||||
TIMECTRL_INST* tmcInstPtr = NULL;
|
||||
|
||||
void tmc_setup(void){
|
||||
int32_t Status;
|
||||
Status = TimeCtrl_Init(&tmcInstPtr, &tmcConfig);
|
||||
ASSERT_TRUE(SUCCESS == Status);
|
||||
}
|
||||
|
||||
void tmc_teardown(void){
|
||||
TimeCtrl_Destroy(tmcInstPtr);
|
||||
}
|
||||
|
||||
TEST(tmc_version) {
|
||||
ASSERT_EQUAL(HARDWARE_VERSION, TimeCtrl_GetVersion(tmcInstPtr));
|
||||
return;
|
||||
}
|
||||
|
||||
TEST(tmc_read_time) {
|
||||
TIME_WORD timeStamp;
|
||||
TIME_INT timeH;
|
||||
TIME_FRAC timeL;
|
||||
|
||||
// Test time stamp read operation
|
||||
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStamp);
|
||||
timeH = TimeCtrl_GetIntCnt(tmcInstPtr);
|
||||
timeL = TimeCtrl_GetFracCnt(tmcInstPtr);
|
||||
if(timeL >= timeStamp.frac_part) {
|
||||
ASSERT_EQUAL(timeH, timeStamp.int_part);
|
||||
ASSERT_TRUE(timeL - timeStamp.frac_part < MAX_OPT_DELAY);
|
||||
}
|
||||
else {
|
||||
ASSERT_EQUAL(timeH, timeStamp.int_part+1);
|
||||
ASSERT_TRUE(timeL + COUNTE_FRAC_MAX - timeStamp.frac_part < MAX_OPT_DELAY);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(tmc_reset) {
|
||||
TIME_WORD timeStamp;
|
||||
|
||||
TimeCtrl_Reset(tmcInstPtr);
|
||||
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStamp);
|
||||
ASSERT_EQUAL(0, timeStamp.int_part);
|
||||
ASSERT_TRUE(timeStamp.frac_part < MAX_OPT_DELAY);
|
||||
}
|
||||
|
||||
TEST(tmc_adjustment) {
|
||||
TIME_WORD timeStampPre, timeStampPost, timeAdj;
|
||||
|
||||
// Adjustment -- set
|
||||
timeAdj.frac_part = 0;
|
||||
timeAdj.int_part = 0x00000203;
|
||||
TimeCtrl_TimeAdjust(tmcInstPtr, &timeAdj, TM_ADJ_SET);
|
||||
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStampPost);
|
||||
ASSERT_EQUAL(timeAdj.int_part, timeStampPost.int_part);
|
||||
ASSERT_TRUE(timeStampPost.frac_part < MAX_OPT_DELAY);
|
||||
|
||||
timeAdj.frac_part = COUNTE_FRAC_MAX;
|
||||
timeAdj.int_part = 0x00000203;
|
||||
TimeCtrl_TimeAdjust(tmcInstPtr, &timeAdj, TM_ADJ_SET);
|
||||
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStampPost);
|
||||
ASSERT_EQUAL(timeAdj.int_part, timeStampPost.int_part+1);
|
||||
ASSERT_TRUE(timeStampPost.frac_part < MAX_OPT_DELAY);
|
||||
|
||||
timeAdj.frac_part = COUNTE_FRAC_MAX*2;
|
||||
timeAdj.int_part = 0x00000203;
|
||||
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStampPre);
|
||||
TimeCtrl_TimeAdjust(tmcInstPtr, &timeAdj, TM_ADJ_SET);
|
||||
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStampPost);
|
||||
if(timeStampPost.frac_part >= timeStampPre.frac_part) {
|
||||
ASSERT_EQUAL(timeStampPost.int_part, timeStampPre.int_part);
|
||||
ASSERT_TRUE(timeStampPost.frac_part - timeStampPre.frac_part < MAX_OPT_DELAY);
|
||||
}
|
||||
else {
|
||||
ASSERT_EQUAL(timeStampPost.int_part, timeStampPre.int_part + 1);
|
||||
ASSERT_TRUE(timeStampPost.frac_part + COUNTE_FRAC_MAX - timeStampPre.frac_part < MAX_OPT_DELAY);
|
||||
}
|
||||
|
||||
// Adjustment -- add
|
||||
timeAdj.frac_part = 253;
|
||||
timeAdj.int_part = 253;
|
||||
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStampPre);
|
||||
TimeCtrl_TimeAdjust(tmcInstPtr, &timeAdj, TM_ADJ_ADD);
|
||||
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStampPost);
|
||||
if(timeStampPre.frac_part + timeAdj.frac_part > COUNTE_FRAC_MAX) {
|
||||
ASSERT_TRUE(timeStampPost.int_part <= timeStampPre.int_part + timeAdj.int_part + 2);
|
||||
ASSERT_TRUE(timeStampPost.frac_part + COUNTE_FRAC_MAX - timeStampPre.frac_part
|
||||
< MAX_OPT_DELAY + timeAdj.frac_part);
|
||||
}
|
||||
|
||||
timeAdj.frac_part = -253;
|
||||
timeAdj.int_part = -253;
|
||||
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStampPre);
|
||||
TimeCtrl_TimeAdjust(tmcInstPtr, &timeAdj, TM_ADJ_ADD);
|
||||
TimeCtrl_GetCurrentTime(tmcInstPtr, &timeStampPost);
|
||||
if(timeStampPre.frac_part + timeAdj.frac_part > COUNTE_FRAC_MAX) {
|
||||
ASSERT_TRUE(timeStampPost.int_part <= timeStampPre.int_part + timeAdj.int_part + 2);
|
||||
ASSERT_TRUE(timeStampPost.frac_part + COUNTE_FRAC_MAX - timeStampPre.frac_part
|
||||
< MAX_OPT_DELAY + timeAdj.frac_part);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(tmc_setopt) {
|
||||
// TODO:
|
||||
return;
|
||||
}
|
||||
|
||||
TEST_SUITE(tmc_unit_test) {
|
||||
TEST_SUITE_CONFIGURE(tmc_setup, tmc_teardown);
|
||||
RUN_TEST(tmc_version);
|
||||
RUN_TEST(tmc_read_time);
|
||||
RUN_TEST(tmc_reset);
|
||||
RUN_TEST(tmc_adjustment);
|
||||
RUN_TEST(tmc_setopt);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
RUN_TEST_SUITE(tmc_unit_test);
|
||||
TEST_REPORT();
|
||||
return TEST_EXIT_CODE;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user