/* ** Test reset filter calls */ void Test_FilterReset (void) { CFE_EVS_BinFilter_t filter; filter.EventID = 1; filter.Mask = 0x0001; CFE_EVS_Register(&filter, 1, CFE_EVS_BINARY_FILTER); /* TEST: invalid ID for filter reset */ UT_Report(CFE_EVS_ResetFilter(CFE_EVS_MAX_EVENT_FILTERS + 1) == CFE_SUCCESS, "CFE_EVS_ResetFilter", "invalid event ID"); /* TEST: unregistered ID for filter reset */ UT_Report(CFE_EVS_ResetFilter(-1) == CFE_SUCCESS, "CFE_EVS_ResetFilter", "unregistered event ID"); /* TEST: valid ID for filter reset */ UT_Report(CFE_EVS_ResetFilter(1) == CFE_SUCCESS, "CFE_EVS_ResetFilter", "valid reset filter"); /* TEST: valid reset of all filters */ UT_Report(CFE_EVS_ResetAllFilters() == CFE_SUCCESS, "CFE_EVS_ResetAllFilters", "valid reset all filters"); /* Return application to original state, re-register application */ CFE_EVS_Register(NULL, 0, CFE_EVS_BINARY_FILTER); }
/* ** Test functions using an unregistered application */ void Test_UnregisteredApp (void) { /* Unregister the application (it gets registered in CFE_EVS_TaskInit) */ CFE_EVS_Unregister(); /* TEST: application not registered */ UT_Report(CFE_EVS_Unregister() == CFE_EVS_APP_NOT_REGISTERED, "CFE_EVS_Unregister","app not registered"); UT_Report(CFE_EVS_SendEvent(0, 0, "NULL") == CFE_EVS_APP_NOT_REGISTERED, "CFE_EVS_SendEvent", "app not registered"); UT_Report(CFE_EVS_ResetFilter(0) == CFE_EVS_APP_NOT_REGISTERED, "CFE_EVS_ResetFilter", "app not registered"); UT_Report(CFE_EVS_ResetAllFilters() == CFE_EVS_APP_NOT_REGISTERED, "CFE_EVS_ResetAllFilters", "app not registered"); /* Return application to original state, register application */ CFE_EVS_Register(NULL, 0, CFE_EVS_BINARY_FILTER); }
/***************************************************************************** * Test %p format *****************************************************************************/ void UT_osprintf_p(void) { char *test_fmt = "p"; /* Test format character(s) */ int i; struct { char *test_num; /* Test identifier; sequential numbers */ long int test_val; /* Test value */ int max_len; /* Maximum output string length */ char *format; /* Format string */ char *expected; /* Expected result */ char *description; /* Test description */ } osp_tests[] = { {"01", 98765, 5, "%p", "0x181cd", "%p"}, {"02", 46372, 10, "$$$%p$$$", "$$$0xb524$$$", "%p embedded"}, {"03", 91827, 5, "%3p", "0x166b3", "%p with minimum field size"}, {"04", 33225, 11, "%.10p", "0x00000081c9", "%p with precision field size"}, {"05", 12345, 9, "%9.7p", "0x0003039", "%p with minimum and precision field size"}, {"06", 98765, 19, "%-.20p", "0x000000000000000181cd", "%p with left-justify"}, {"07", -98765, 8, "%p", "0xfffe7e33", "%p, negative value"}, {"08", 4108, 4, "%8p", " 0x100c", "%p with minimum field size > number of digits"}, {"09", 55220, 6, "%010p", "0x0000d7b4", "%p with minimum field size > number of digits and leading zeroes"}, {"", 0, 0, "", "", ""} /* End with a null format to terminate list */ }; for (i = 0; osp_tests[i].format[0] != '\0'; i++) { /* Perform sprintf test */ init_test(); sprintf(strg_buf, osp_tests[i].format, (void *) osp_tests[i].test_val); UT_Report(check_test(osp_tests[i].expected, strg_buf), "SPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); /* Truncate expected string in preparation for snprintf test */ strcpy(trunc_buf, osp_tests[i].expected); if (strlen(trunc_buf) >= osp_tests[i].max_len) { trunc_buf[osp_tests[i].max_len - 1] = '\0'; } /* Perform snprintf test */ init_test(); snprintf(strg_buf, osp_tests[i].max_len, osp_tests[i].format, (void *) osp_tests[i].test_val); UT_Report(check_test(trunc_buf, strg_buf), "SNPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); } }
/***************************************************************************** * Test %lX format *****************************************************************************/ void UT_osprintf_lX(void) { char *test_fmt = "lx"; /* Test format character(s) */ int i; struct { char *test_num; /* Test identifier; sequential numbers */ unsigned long int test_val; /* Test value */ int max_len; /* Maximum output string length */ char *format; /* Format string */ char *expected; /* Expected result */ char *description; /* Test description */ } osp_tests[] = { {"01", 0x9a8b7c6d, 8, "%lX", "9A8B7C6D", "%lX"}, {"02", 0xdd46ee21, 8, "$$$%lX$$$", "$$$DD46EE21$$$", "%lX embedded"}, {"03", 0x9ccc8275, 7, "%3lX", "9CCC8275", "%lX with minimum field size < number of digits"}, {"04", 0xbee33225, 10, "%.10lX", "00BEE33225", "%lX with precision field size"}, {"05", 0x123fdb, 7, "%9.7lX", " 0123FDB", "%lX with minimum and precision field size"}, {"06", 0xabc6543f, 16, "%-.20lX", "000000000000ABC6543F", "%lX with left-justify"}, {"07", -9876543, 5, "%lX", "FF694BC1", "%lX, negative value"}, {"08", 0x12b45, 3, "%8lX", " 12B45", "%lX with minimum field size > number of digits"}, {"09", 0x12b45, 2, "%08lX", "00012B45", "%lX with minimum field size > number of digits and leading zeroes"}, {"", 0, 0, "", "", ""} /* End with a null format to terminate list */ }; for (i = 0; osp_tests[i].format[0] != '\0'; i++) { /* Perform sprintf test */ init_test(); SPRINTF(strg_buf, osp_tests[i].format, osp_tests[i].test_val); UT_Report(check_test(osp_tests[i].expected, strg_buf), "SPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); /* Truncate expected string in preparation for snprintf test */ strcpy(trunc_buf, osp_tests[i].expected); if (strlen(trunc_buf) >= osp_tests[i].max_len) { trunc_buf[osp_tests[i].max_len - 1] = '\0'; } /* Perform snprintf test */ init_test(); SNPRINTF(strg_buf, osp_tests[i].max_len, osp_tests[i].format, osp_tests[i].test_val); UT_Report(check_test(trunc_buf, strg_buf), "SNPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); } }
/* ** Test long and short format, also long string */ void Test_Format (void) { int i; char long_msg[CFE_EVS_MAX_MESSAGE_LENGTH + 2]; CFE_TIME_SysTime_t time; CFE_EVS_ModeCmd_t modecmd; /* TEST: invalid command to set format */ modecmd.Mode = -1; UT_SetSBTotalMsgLen(sizeof(CFE_EVS_ModeCmd_t)); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, CFE_EVS_SET_EVENT_FORMAT_MODE_CC); /* TEST: valid command to set short format, reports implicitly via event */ modecmd.Mode = CFE_EVS_SHORT_FORMAT; UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, CFE_EVS_SET_EVENT_FORMAT_MODE_CC); CFE_EVS_SendEvent(0, CFE_EVS_INFORMATION, "FAILED : short format selected"); /* TEST; valid command to set long format, reports implicitly via event */ modecmd.Mode = CFE_EVS_LONG_FORMAT; UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, CFE_EVS_SET_EVENT_FORMAT_MODE_CC); CFE_EVS_SendEvent(0, CFE_EVS_INFORMATION, "PASSED : long format selected"); CFE_EVS_SendTimedEvent(time, 0, CFE_EVS_INFORMATION, "PASSED : long format selected (SendTimedEvent)"); CFE_EVS_SendEventWithAppID(0, CFE_EVS_INFORMATION, 0, "PASSED : long format selected (SendEventWithAppID)"); /* TEST: Send information message with > MAX string length */ for (i = 0; i <= CFE_EVS_MAX_MESSAGE_LENGTH; i++) long_msg[i] = (char)(i%10 + 48); long_msg[CFE_EVS_MAX_MESSAGE_LENGTH + 1] = '\0'; UT_Report(CFE_EVS_SendEvent(0, CFE_EVS_INFORMATION, long_msg) == CFE_SUCCESS, "CFE_EVS_SendEvent", "sent info msg with > MAX string length"); UT_Report(CFE_EVS_SendEventWithAppID(0, CFE_EVS_INFORMATION,0, long_msg) == CFE_SUCCESS, "CFE_EVS_SendEventWithAppID", "sent info msg with > MAX string length"); UT_Report(CFE_EVS_SendTimedEvent(time,0, CFE_EVS_INFORMATION, long_msg) == CFE_SUCCESS, "CFE_EVS_SendTimedEvent", "sent info msg with > MAX string length"); }
/* ** Test miscellaneous functionality */ void Test_Misc (void) { CFE_EVS_ModeCmd_t modecmd; /* TEST: null inputs to exercise EVS_GetApplicationInfo */ UT_Report(EVS_GetApplicationInfo(NULL,NULL) == CFE_ES_ERR_BUFFER, "EVS_GetApplicationInfo","get application info with null inputs"); /* TEST: send event with an illegal type */ CFE_EVS_SendEvent(0, -1, "Illegal type no filter"); /* TEST: Invalid message id */ UT_SetSBTotalMsgLen(sizeof(CFE_EVS_ModeCmd_t)); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, -1, 0); /* TEST: Invalid command */ UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, -1); /* TEST: Invalid command length */ UT_SetSBTotalMsgLen(6); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 1); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 2); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 3); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 4); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 5); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 6); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 7); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 8); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 9); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 10); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 11); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 12); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 13); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 14); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 15); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 16); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 17); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 18); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 19); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 20); UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_CMD_MID, 21); /* TEST: report housekeeping */ UT_SendMsg((CFE_SB_MsgPtr_t)&modecmd, CFE_EVS_SEND_HK_MID, 0); /* Test failure of getting the reset area */ UT_SetStatusBSPResetArea(-1,-1); EVS_InitLogPtr(); CFE_EVS_CleanUpApp(0); }
/* ** Test functions using an illegal application ID */ void Test_IllegalAppID (void) { CFE_TIME_SysTime_t time; /* Set test up with illegal application ID */ UT_SetAppID(CFE_ES_MAX_APPLICATIONS + 1); /* Call external functions to test behavior with illegal ID */ UT_Report(CFE_EVS_Register(NULL, 0, 0) == CFE_EVS_APP_ILLEGAL_APP_ID, "CFE_EVS_Register", "illegal app id"); UT_Report(CFE_EVS_Unregister() == CFE_EVS_APP_ILLEGAL_APP_ID, "CFE_EVS_Unregister", "illegal app id"); UT_Report(CFE_EVS_SendEvent(0, 0, "NULL") == CFE_EVS_APP_ILLEGAL_APP_ID, "CFE_EVS_SendEvent", "illegal app id"); UT_Report(CFE_EVS_SendTimedEvent(time, 0, 0,"NULL" ) == CFE_EVS_APP_ILLEGAL_APP_ID, "CFE_EVS_SendTimedEvent", "illegal app id"); UT_Report(CFE_EVS_SendEventWithAppID(0, 0, CFE_ES_MAX_APPLICATIONS + 1, "NULL") == CFE_EVS_APP_ILLEGAL_APP_ID, "CFE_EVS_SendEventWithAppID", "illegal app id"); UT_Report(CFE_EVS_ResetFilter(0) == CFE_EVS_APP_ILLEGAL_APP_ID, "CFE_EVS_ResetFilter", "illegal app id"); UT_Report(CFE_EVS_ResetAllFilters() == CFE_EVS_APP_ILLEGAL_APP_ID, "CFE_EVS_ResetAllFilters", "illegal app id"); /* Return application ID to valid value */ UT_SetAppID(0); }
/* ** Test filter registration related calls */ void Test_FilterRegistration (void) { int i; CFE_EVS_BinFilter_t filter[CFE_EVS_MAX_EVENT_FILTERS + 1]; CFE_EVS_EVSBinFilter_t *FilterPtr = NULL; CFE_EVS_Table_t *TablePtr; uint32 AppID; CFE_EVS_BitMaskCmd_t bitmaskcmd; /* TEST: unknown filter */ UT_Report(CFE_EVS_Register(NULL, 0, -1) == CFE_EVS_UNKNOWN_FILTER, "CFE_EVS_Register","illegal filter option"); /* TEST: valid registration with no filters */ UT_Report(CFE_EVS_Register(NULL, 0, CFE_EVS_BINARY_FILTER) == CFE_SUCCESS, "CFE_EVS_Register", "valid w/ no filters"); /* TEST: unregistration with failed ES_putPool */ UT_SetPutPoolFail(1); UT_Report(CFE_EVS_Unregister() < 0, "CFE_EVS_Unregister", "unregistration with failed ES_putPool"); UT_SetPutPoolFail(0); /* Re-register to test valid unregistration */ UT_Report(CFE_EVS_Register(NULL, 0, CFE_EVS_BINARY_FILTER) == CFE_SUCCESS, "CFE_EVS_Register", "valid w/ no filters (re-registration)"); /* TEST: valid unregistration */ UT_Report(CFE_EVS_Unregister() == CFE_SUCCESS, "CFE_EVS_Unregister", "valid call"); /* TEST: valid registration with filter */ filter[0].EventID = 0; filter[0].Mask = 0x0001; UT_Report(CFE_EVS_Register(filter, 1, CFE_EVS_BINARY_FILTER) == CFE_SUCCESS, "CFE_EVS_Register", "valid w/ filter"); /* TEST: multiple valid registration with more than MAX filters */ for (i = 0; i < CFE_EVS_MAX_EVENT_FILTERS + 1; i++){ filter[i].EventID = i; filter[i].Mask = 1; } UT_Report(CFE_EVS_Register(filter, CFE_EVS_MAX_EVENT_FILTERS + 1, CFE_EVS_BINARY_FILTER) == CFE_EVS_APP_FILTER_OVERLOAD, "CFE_EVS_Register", "valid over max filters"); /* TEST: Send 1st information message, should get through */ UT_Report(CFE_EVS_SendEvent(0, CFE_EVS_INFORMATION, "OK") == CFE_SUCCESS, "CFE_EVS_SendEvent", "1st info message should go through"); /* TEST: Send 2nd information message, should be filtered */ UT_Report(CFE_EVS_SendEvent(0, CFE_EVS_INFORMATION, "FAILED") == CFE_SUCCESS, "CFE_EVS_SendEvent", "2nd info message should be filtered"); /* TEST: Send Last information message, which should cause filtering to lock */ CFE_ES_GetAppID(&AppID); TablePtr = CFE_EVS_GlobalData.EVS_TablePtr[AppID].Address; FilterPtr = EVS_FindEventID(0, (CFE_EVS_EVSBinFilter_t *)&TablePtr->BinFilters); FilterPtr->Count = CFE_EVS_MAX_FILTER_COUNT - 1; UT_Report(CFE_EVS_SendEvent(0, CFE_EVS_INFORMATION, "OK") == CFE_SUCCESS, "CFE_EVS_SendEvent", "Last info message should go through"); UT_Report(CFE_EVS_SendEvent(0, CFE_EVS_INFORMATION, "FAILED") == CFE_SUCCESS, "CFE_EVS_SendEvent", "Locked info message should be filtered"); UT_Report(CFE_EVS_SendEvent(0, CFE_EVS_INFORMATION, "FAILED") == CFE_SUCCESS, "CFE_EVS_SendEvent", "Locked info message should still be filtered"); /* Return application to original state, re-register application */ CFE_EVS_Register(NULL, 0, CFE_EVS_BINARY_FILTER); }
/***************************************************************************** * Test %f format *****************************************************************************/ void UT_osprintf_f(void) { char *test_fmt = "f"; /* Test format character(s) */ int i; struct { char *test_num; /* Test identifier; sequential numbers */ float test_val; /* Test value */ int max_len; /* Maximum output string length */ char *format; /* Format string */ char *expected; /* Expected result */ char *description; /* Test description */ } osp_tests[] = { {"01", 5.230, 6, "%f", "5.230000", "%f, positive value"}, {"02", 2.1056, 9, "$$$%f$$$", "$$$2.105600$$$", "%f embedded, positive value"}, {"03", 91827.3, 4, "%3f", "91827.296875", "%f with maximum field size, positive value"}, {"04", 5.82345, 5, "%.3f", "5.823", "%f with minimum field size, positive value"}, {"05", 12.6789, 8, "%9.5f", " 12.67890", "%f with minimum and maximum field size, positive value"}, {"06", 65.5678, 13, "%-20.5f", "65.56780 ", "%f with left-justify, positive value"}, {"07", 2.7944, 8, "%+f", "+2.794400", "%f with sign, positive value"}, {"08", -0.6712237, 7, "%f", "-0.671224", "%f, negative value"}, {"09", -7.1109, 8, "$$$%f$$$", "$$$-7.110900$$$", "%f embedded, negative value"}, {"10", -918.987, 6, "%3f", "-918.987000", "%f with maximum field size, negative value"}, {"11", -3.1415, 3, "%.2f", "-3.14", "%f with precision, negative value"}, {"12", -1.23456, 6, "%9.7f", "-1.2345600", "%f with precision and maximum field size, negative value"}, {"13", -65.65, 5, "%-8.3f", "-65.650 ", "%f with left-justify, negative value"}, {"14", 0.0, 4, "%f", "0.000000", "%f, zero value"}, {"15", 4.0, 6, "%7.0f", " 4", "%f, no fraction, positive value"}, {"16", -56.0, 6, "%6.0f", " -56", "%f, no fraction, negative value"}, {"17", 4887.12, 5, "%010.3f", "004887.120", "%f with zero padding, positive value"}, {"18", -4887.12, 5, "%010.3f", "-04887.120", "%f with zero padding, negative value"}, {"19", 0.0, 6, "%06.2f", "000.00", "%f, with zero padding, zero value"}, {"20", 4.0, 6, "%07.0f", "0000004", "%f, zero padding, no fraction, positive value"}, {"21", -56.0, 6, "%06.0f", "-00056", "%f, zero padding, no fraction, negative value"}, {"", 0, 0, "", "", ""} /* End with a null format to terminate list */ }; for (i = 0; osp_tests[i].format[0] != '\0'; i++) { /* Perform sprintf test */ init_test(); SPRINTF(strg_buf, osp_tests[i].format, osp_tests[i].test_val); UT_Report(check_test(osp_tests[i].expected, strg_buf), "SPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); /* Truncate expected string in preparation for snprintf test */ strcpy(trunc_buf, osp_tests[i].expected); if (strlen(trunc_buf) >= osp_tests[i].max_len) { trunc_buf[osp_tests[i].max_len - 1] = '\0'; } /* Perform snprintf test */ init_test(); SNPRINTF(strg_buf, osp_tests[i].max_len, osp_tests[i].format, osp_tests[i].test_val); UT_Report(check_test(trunc_buf, strg_buf), "SNPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); } }
/***************************************************************************** * Test %i format *****************************************************************************/ void UT_osprintf_i(void) { char *test_fmt = "i"; /* Test format character(s) */ int i; struct { char *test_num; /* Test identifier; sequential numbers */ int test_val; /* Test value */ int max_len; /* Maximum output string length */ char *format; /* Format string */ char *expected; /* Expected result */ char *description; /* Test description */ } osp_tests[] = { {"01", 98765, 5, "%i", "98765", "%i, positive value"}, {"02", 46372, 9, "$$$%i$$$", "$$$46372$$$", "%i embedded, positive value"}, {"03", 98765, 5, "% i", " 98765", "%i with space for sign, positive value"}, {"04", 91827, 7, "%8i", " 91827", "%i with minimum field size > number of digits, positive value"}, {"05", 91827, 2, "%4i", "91827", "%i with minimum field size < number of digits, positive value"}, {"06", 33225, 7, "%.10i", "0000033225", "%i with precision field size > number of digits, positive value"}, {"07", 33225, 3, "%.3i", "33225", "%i with precision field size < number of digits, positive value"}, {"08", 12345, 5, "%9.7i", " 0012345", "%i with minimum field size > precision field size > number of digits, positive value"}, {"09", 12345, 5, "%9.3i", " 12345", "%i with minimum field size > number of digits > precision field size, positive value"}, {"10", 12345, 5, "%4.2i", "12345", "%i with number of digits > minimum field size > precision field size, positive value"}, {"11", 12345, 8, "%7.9i", "000012345", "%i with precision field size > minimum field size > number of digits, positive value"}, {"12", 12345, 7, "%3.9i", "000012345", "%i with precision field size > number of digits > minimum field size, positive value"}, {"13", 12345, 4, "%2.4i", "12345", "%i with number of digits > precision field size > minimum field size, positive value"}, {"14", 98765, 5, "%-.20i", "00000000000000098765", "%i with left-justify and precision field size > number of digits, positive value"}, {"15", 98765, 5, "%-.3i", "98765", "%i with left-justify and precision field size < number of digits, positive value"}, {"16", 98765, 5, "%+i", "+98765", "%i with sign, positive value"}, {"17", 46372, 5, "$$$%+d$$$", "$$$+46372$$$", "%i sign and embedded, positive value"}, {"18", 91827, 6, "%+8i", " +91827", "%i with sign and minimum field size > number of digits, positive value"}, {"19", 91827, 4, "%+4i", "+91827", "%i with sign and minimum field size < number of digits, positive value"}, {"20", 33225, 8, "%+.10i", "+0000033225", "%i with sign and precision field size > number of digits, positive value"}, {"21", 33225, 5, "%+.3i", "+33225", "%i with sign and precision field size < number of digits, positive value"}, {"22", 12345, 5, "%+9.7i", " +0012345", "%i with sign and minimum field size > precision field size > number of digits, positive value"}, {"23", 12345, 5, "%+9.3i", " +12345", "%i with sign and minimum field size > number of digits > precision field size, positive value"}, {"24", 12345, 5, "%+4.2i", "+12345", "%i with sign and number of digits > minimum field size > precision field size, positive value"}, {"25", 12345, 8, "%+7.9i", "+000012345", "%i with sign and precision field size > minimum field size > number of digits, positive value"}, {"26", 12345, 7, "%+3.9i", "+000012345", "%i with sign and precision field size > number of digits > minimum field size, positive value"}, {"27", 12345, 5, "%+2.4i", "+12345", "%i with sign and number of digits > precision field size > minimum field size, positive value"}, {"28", 98765, 16, "%+-.20i", "+00000000000000098765", "%i with sign and left-justify and precision field size > number of digits, positive value"}, {"29", 98765, 5, "%+-.3i", "+98765", "%i with sign and left-justify and precision field size < number of digits, positive value"}, {"30", 98765, 4, "%+i", "+98765", "%i with sign, positive value"}, {"31", -98765, 6, "%i", "-98765", "%i, negative value"}, {"32", -46372, 6, "$$$%i$$$", "$$$-46372$$$", "%i embedded, negative value"}, {"33", -98765, 5, "% i", "-98765", "%i with space for sign, negative value"}, {"34", -91827, 9, "%10i", " -91827", "%i with minimum field size > number of digits, negative value"}, {"35", -91827, 6, "%4i", "-91827", "%i with minimum field size < number of digits, negative value"}, {"36", -33225, 9, "%.10i", "-0000033225", "%i with precision field size > number of digits, negative value"}, {"37", -33225, 5, "%.3i", "-33225", "%i with precision field size < number of digits, negative value"}, {"38", -12345, 8, "%9.7i", " -0012345", "%i with minimum field size > precision field size > number of digits, negative value"}, {"39", -12345, 7, "%9.3i", " -12345", "%i with minimum field size > number of digits > precision field size, negative value"}, {"40", -12345, 6, "%4.2i", "-12345", "%i with number of digits > minimum field size > precision field size, negative value"}, {"41", -12345, 7, "%7.9i", "-000012345", "%i with precision field size > minimum field size > number of digits, negative value"}, {"42", -12345, 8, "%3.9i", "-000012345", "%i with precision field size > number of digits > minimum field size, negative value"}, {"43", -12345, 5, "%2.4i", "-12345", "%i with number of digits > precision field size > minimum field size, negative value"}, {"44", -98765, 18, "%-.20i", "-00000000000000098765", "%i with left-justify and precision field size > number of digits, negative value"}, {"45", -98765, 5, "%-.3i", "-98765", "%i with left-justify and precision field size < number of digits, negative value"}, {"46", -98765, 6, "%+i", "-98765", "%i with sign, negative value"}, {"47", -46372, 7, "$$$%+d$$$", "$$$-46372$$$", "%i sign and embedded, negative value"}, {"48", -91827, 5, "%+8i", " -91827", "%i with sign and minimum field size > number of digits, negative value"}, {"49", -91827, 5, "%+4i", "-91827", "%i with sign and minimum field size < number of digits, negative value"}, {"50", -33225, 7, "%+.10i", "-0000033225", "%i with sign and precision field size > number of digits, negative value"}, {"51", -33225, 5, "%+.3i", "-33225", "%i with sign and precision field size < number of digits, negative value"}, {"52", -12345, 7, "%+9.7i", " -0012345", "%i with sign and minimum field size > precision field size > number of digits, negative value"}, {"53", -12345, 8, "%+9.3i", " -12345", "%i with sign and minimum field size > number of digits > precision field size, negative value"}, {"54", -12345, 4, "%+4.2i", "-12345", "%i with sign and number of digits > minimum field size > precision field size, negative value"}, {"55", -12345, 8, "%+7.9i", "-000012345", "%i with sign and precision field size > minimum field size > number of digits, negative value"}, {"56", -12345, 7, "%+3.9i", "-000012345", "%i with sign and precision field size > number of digits > minimum field size, negative value"}, {"57", -12345, 5, "%+2.4i", "-12345", "%i with sign and number of digits > precision field size > minimum field size, negative value"}, {"58", -98765, 19, "%+-.20i", "-00000000000000098765", "%i with sign and left-justify and precision field size > number of digits, negative value"}, {"59", -98765, 6, "%+-.3i", "-98765", "%i with sign and left-justify and precision field size < number of digits, negative value"}, {"60", -98765, 5, "%+i", "-98765", "%i with sign, negative value"}, {"61", 0, 6, "%i", "0", "%i, zero value"}, {"62", 162534, 5, "%08i", "00162534", "%i with zero padding, positive value"}, {"63", -162534, 6, "%08i", "-0162534", "%i with zero padding, negative value"}, {"64", 0, 6, "%04i", "0000", "%i, with zero padding, zero value"}, {"", 0, 0, "", "", ""} /* End with a null format to terminate list */ }; for (i = 0; osp_tests[i].format[0] != '\0'; i++) { /* Perform sprintf test */ init_test(); SPRINTF(strg_buf, osp_tests[i].format, osp_tests[i].test_val); UT_Report(check_test(osp_tests[i].expected, strg_buf), "SPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); /* Truncate expected string in preparation for snprintf test */ strcpy(trunc_buf, osp_tests[i].expected); if (strlen(trunc_buf) >= osp_tests[i].max_len) { trunc_buf[osp_tests[i].max_len - 1] = '\0'; } /* Perform snprintf test */ init_test(); SNPRINTF(strg_buf, osp_tests[i].max_len, osp_tests[i].format, osp_tests[i].test_val); UT_Report(check_test(trunc_buf, strg_buf), "SNPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); } }
/***************************************************************************** * Test %ld format *****************************************************************************/ void UT_osprintf_ld(void) { char *test_fmt = "ld"; /* Test format character(s) */ int i; struct { char *test_num; /* Test identifier; sequential numbers */ long int test_val; /* Test value */ int max_len; /* Maximum output string length */ char *format; /* Format string */ char *expected; /* Expected result */ char *description; /* Test description */ } osp_tests[] = { {"01", 12798765, 5, "%ld", "12798765", "%ld, positive value"}, {"02", 43246372, 9, "$$$%ld$$$", "$$$43246372$$$", "%ld embedded, positive value"}, {"03", 63198765, 9, "% ld", " 63198765", "%ld with space for sign, positive value"}, {"04", 77691827, 8, "%11ld", " 77691827", "%ld with minimum field size > number of digits, positive value"}, {"05", 54691827, 5, "%4ld", "54691827", "%ld with minimum field size < number of digits, positive value"}, {"06", 77833225, 7, "%.10ld", "0077833225", "%ld with precision field size > number of digits, positive value"}, {"07", 99933225, 6, "%.3ld", "99933225", "%ld with precision field size < number of digits, positive value"}, {"08", 12345789, 8, "%12.10ld", " 0012345789", "%ld with minimum field size > precision field size > number of digits, positive value"}, {"09", 12345987, 7, "%12.3ld", " 12345987", "%ld with minimum field size > number of digits > precision field size, positive value"}, {"10", 12345444, 8, "%4.2ld", "12345444", "%ld with number of digits > minimum field size > precision field size, positive value"}, {"11", 12345321, 10, "%10.12ld", "000012345321", "%ld with precision field size > minimum field size > number of digits, positive value"}, {"12", 12333345, 9, "%6.12ld", "000012333345", "%ld with precision field size > number of digits > minimum field size, positive value"}, {"13", 12345777, 8, "%2.4ld", "12345777", "%ld with number of digits > precision field size > minimum field size, positive value"}, {"14", 98765321, 15, "%-.20ld", "00000000000098765321", "%ld with left-justify and precision field size > number of digits, positive value"}, {"15", 98765111, 8, "%-.3ld", "98765111", "%ld with left-justify and precision field size < number of digits, positive value"}, {"16", 98765222, 8, "%+ld", "+98765222", "%ld with sign, positive value"}, {"17", 46372333, 7, "$$$%+ld$$$", "$$$+46372333$$$", "%ld sign and embedded, positive value"}, {"18", 91827444, 6, "%+11ld", " +91827444", "%ld with sign and minimum field size > number of digits, positive value"}, {"19", 91827555, 5, "%+4ld", "+91827555", "%ld with sign and minimum field size < number of digits, positive value"}, {"20", 33225666, 7, "%+.13ld", "+0000033225666", "%ld with sign and precision field size > number of digits, positive value"}, {"21", 33225777, 8, "%+.3ld", "+33225777", "%ld with sign and precision field size < number of digits, positive value"}, {"22", 12345888, 9, "%+12.10ld", " +0012345888", "%ld with sign and minimum field size > precision field size > number of digits, positive value"}, {"23", 12345999, 10, "%+12.3ld", " +12345999", "%ld with sign and minimum field size > number of digits > precision field size, positive value"}, {"24", 12345000, 8, "%+4.2ld", "+12345000", "%ld with sign and number of digits > minimum field size > precision field size, positive value"}, {"25", 12345121, 9, "%+10.12ld", "+000012345121", "%ld with sign and precision field size > minimum field size > number of digits, positive value"}, {"26", 12345232, 8, "%+6.12ld", "+000012345232", "%ld with sign and precision field size > number of digits > minimum field size, positive value"}, {"27", 12345343, 6, "%+2.4ld", "+12345343", "%ld with sign and number of digits > precision field size > minimum field size, positive value"}, {"28", 98765454, 19, "%+-.20ld", "+00000000000098765454", "%ld with sign and left-justify and precision field size > number of digits, positive value"}, {"29", 98765565, 7, "%+-.3ld", "+98765565", "%ld with sign and left-justify and precision field size < number of digits, positive value"}, {"30", 98765676, 8, "%+ld", "+98765676", "%ld with sign, positive value"}, {"31", -98765787, 9, "%ld", "-98765787", "%ld, negative value"}, {"32", -46372898, 10, "$$$%ld$$$", "$$$-46372898$$$", "%ld embedded, negative value"}, {"33", -98765909, 9, "% ld", "-98765909", "%ld with space for sign, negative value"}, {"34", -91827121, 8, "%13ld", " -91827121", "%ld with minimum field size > number of digits, negative value"}, {"35", -91827232, 5, "%4ld", "-91827232", "%ld with minimum field size < number of digits, negative value"}, {"36", -33225343, 8, "%.13ld", "-0000033225343", "%ld with precision field size > number of digits, negative value"}, {"37", -33225454, 6, "%.3ld", "-33225454", "%ld with precision field size < number of digits, negative value"}, {"38", -12345565, 7, "%12.10ld", " -0012345565", "%ld with minimum field size > precision field size > number of digits, negative value"}, {"39", -12345676, 8, "%12.4ld", " -12345676", "%ld with minimum field size > number of digits > precision field size, negative value"}, {"40", -12345787, 9, "%4.2ld", "-12345787", "%ld with number of digits > minimum field size > precision field size, negative value"}, {"41", -12345898, 11, "%7.12ld", "-000012345898", "%ld with precision field size > minimum field size > number of digits, negative value"}, {"42", -12345909, 10, "%3.12ld", "-000012345909", "%ld with precision field size > number of digits > minimum field size, negative value"}, {"43", -12345101, 9, "%2.4ld", "-12345101", "%ld with number of digits > precision field size > minimum field size, negative value"}, {"44", -98765292, 10, "%-.20ld", "-00000000000098765292", "%ld with left-justify and precision field size > number of digits, negative value"}, {"45", -98765383, 8, "%-.3ld", "-98765383", "%ld with left-justify and precision field size < number of digits, negative value"}, {"46", -98765474, 9, "%+ld", "-98765474", "%ld with sign, negative value"}, {"47", -46372565, 8, "$$$%+ld$$$", "$$$-46372565$$$", "%ld sign and embedded, negative value"}, {"48", -91827112, 7, "%+11ld", " -91827112", "%ld with sign and minimum field size > number of digits, negative value"}, {"49", -91827223, 6, "%+4ld", "-91827223", "%ld with sign and minimum field size < number of digits, negative value"}, {"50", -33225334, 11, "%+.13ld", "-0000033225334", "%ld with sign and precision field size > number of digits, negative value"}, {"51", -33225445, 9, "%+.3ld", "-33225445", "%ld with sign and precision field size < number of digits, negative value"}, {"52", -12345556, 11, "%+12.10ld", " -0012345556", "%ld with sign and minimum field size > precision field size > number of digits, negative value"}, {"53", -12345667, 10, "%+12.3ld", " -12345667", "%ld with sign and minimum field size > number of digits > precision field size, negative value"}, {"54", -12345778, 9, "%+4.2ld", "-12345778", "%ld with sign and number of digits > minimum field size > precision field size, negative value"}, {"55", -12345889, 10, "%+7.12ld", "-000012345889", "%ld with sign and precision field size > minimum field size > number of digits, negative value"}, {"56", -12345990, 9, "%+3.12ld", "-000012345990", "%ld with sign and precision field size > number of digits > minimum field size, negative value"}, {"57", -12345221, 8, "%+2.4ld", "-12345221", "%ld with sign and number of digits > precision field size > minimum field size, negative value"}, {"58", -98765332, 7, "%+-.20ld", "-00000000000098765332", "%ld with sign and left-justify and precision field size > number of digits, negative value"}, {"59", -98765443, 6, "%+-.3ld", "-98765443", "%ld with sign and left-justify and precision field size < number of digits, negative value"}, {"60", -98765554, 5, "%+ld", "-98765554", "%ld with sign, negative value"}, {"61", 0, 6, "%ld", "0", "%ld, zero value"}, {"62", 16253409, 5, "%010ld", "0016253409", "%ld with zero padding, positive value"}, {"63", -16253409, 6, "%010ld", "-016253409", "%ld with zero padding, negative value"}, {"64", 0, 6, "%012ld", "000000000000", "%ld, with zero padding, zero value"}, {"", 0, 0, "", "", ""} /* End with a null format to terminate list */ }; for (i = 0; osp_tests[i].format[0] != '\0'; i++) { /* Perform sprintf test */ init_test(); sprintf(strg_buf, osp_tests[i].format, osp_tests[i].test_val); UT_Report(check_test(osp_tests[i].expected, strg_buf), "SPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); /* Truncate expected string in preparation for snprintf test */ strcpy(trunc_buf, osp_tests[i].expected); if (strlen(trunc_buf) >= osp_tests[i].max_len) { trunc_buf[osp_tests[i].max_len - 1] = '\0'; } /* Perform snprintf test */ init_test(); snprintf(strg_buf, osp_tests[i].max_len, osp_tests[i].format, osp_tests[i].test_val); UT_Report(check_test(trunc_buf, strg_buf), "SNPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); } }
/***************************************************************************** * Test %x format *****************************************************************************/ void UT_osprintf_x(void) { char *test_fmt = "x"; /* Test format character(s) */ int i; #ifdef OSP_ARINC653 #pragma ghs nowarning 68 #endif struct { char *test_num; /* Test identifier; sequential numbers */ unsigned int test_val; /* Test value */ int max_len; /* Maximum output string length */ char *format; /* Format string */ char *expected; /* Expected result */ char *description; /* Test description */ } osp_tests[] = { {"01", 0xa8b7, 3, "%x", "a8b7", "%x"}, {"02", 0xff123, 10, "$$$%x$$$", "$$$ff123$$$", "%x embedded"}, {"03", 0xd1827, 5, "%3x", "d1827", "%x with minimum field size < number of digits"}, {"04", 0x3c225, 9, "%.10x", "000003c225", "%x with precision field size"}, {"05", 0x12b45, 9, "%9.7x", " 0012b45", "%x with minimum and precision field size"}, {"06", 0xe8a60, 19, "%-.20x", "000000000000000e8a60", "%x with left-justify"}, {"07", -16, 7, "%x", "fffffff0", "%x, negative value"}, {"08", 0x12b45, 3, "%8x", " 12b45", "%x with minimum field size > number of digits"}, {"09", 0x12b45, 5, "%08x", "00012b45", "%x with minimum field size > number of digits and leading zeroes"}, {"", 0, 0, "", "", ""} /* End with a null format to terminate list */ }; #ifdef OSP_ARINC653 #pragma ghs endnowarning #endif for (i = 0; osp_tests[i].format[0] != '\0'; i++) { /* Perform sprintf test */ init_test(); sprintf(strg_buf, osp_tests[i].format, osp_tests[i].test_val); UT_Report(check_test(osp_tests[i].expected, strg_buf), "SPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); /* Truncate expected string in preparation for snprintf test */ strcpy(trunc_buf, osp_tests[i].expected); if (strlen(trunc_buf) >= osp_tests[i].max_len) { trunc_buf[osp_tests[i].max_len - 1] = '\0'; } /* Perform snprintf test */ init_test(); snprintf(strg_buf, osp_tests[i].max_len, osp_tests[i].format, osp_tests[i].test_val); UT_Report(check_test(trunc_buf, strg_buf), "SNPRINTF", osp_tests[i].description, test_fmt, osp_tests[i].test_num); } }