]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
timevalops.c:
authorDamir Tomic <viperus@ntp.org>
Sat, 4 Jul 2015 21:32:08 +0000 (23:32 +0200)
committerDamir Tomic <viperus@ntp.org>
Sat, 4 Jul 2015 21:32:08 +0000 (23:32 +0200)
  added timevaltoa() and fixed the printfs
timespecops.c:
  added timespectoa() and fixed the printfs

bk: 559850d8fGBsVxnqqnjVP8DLjM4kDw

tests/libntp/run-timespecops.c
tests/libntp/run-timevalops.c
tests/libntp/timespecops.c
tests/libntp/timevalops.c

index 48a9a51fdabb32af6edb51ac095b8bcb5bc0aff8..b335520242944e5c6d5b7495b5185bd675a4dae3 100644 (file)
@@ -73,34 +73,34 @@ int main(int argc, char *argv[])
   progname = argv[0];
   Unity.TestFile = "timespecops.c";
   UnityBegin("timespecops.c");
-  RUN_TEST(test_Helpers1, 149);
-  RUN_TEST(test_Normalise, 169);
-  RUN_TEST(test_SignNoFrac, 183);
-  RUN_TEST(test_SignWithFrac, 195);
-  RUN_TEST(test_CmpFracEQ, 209);
-  RUN_TEST(test_CmpFracGT, 222);
-  RUN_TEST(test_CmpFracLT, 235);
-  RUN_TEST(test_AddFullNorm, 252);
-  RUN_TEST(test_AddFullOflow1, 266);
-  RUN_TEST(test_AddNsecNorm, 280);
-  RUN_TEST(test_AddNsecOflow1, 292);
-  RUN_TEST(test_SubFullNorm, 308);
-  RUN_TEST(test_SubFullOflow, 322);
-  RUN_TEST(test_SubNsecNorm, 336);
-  RUN_TEST(test_SubNsecOflow, 348);
-  RUN_TEST(test_Neg, 364);
-  RUN_TEST(test_AbsNoFrac, 381);
-  RUN_TEST(test_AbsWithFrac, 392);
-  RUN_TEST(test_Helpers2, 407);
-  RUN_TEST(test_ToLFPbittest, 439);
-  RUN_TEST(test_ToLFPrelPos, 452);
-  RUN_TEST(test_ToLFPrelNeg, 464);
-  RUN_TEST(test_ToLFPabs, 476);
-  RUN_TEST(test_FromLFPbittest, 491);
-  RUN_TEST(test_FromLFPrelPos, 510);
-  RUN_TEST(test_FromLFPrelNeg, 523);
-  RUN_TEST(test_LFProundtrip, 538);
-  RUN_TEST(test_ToString, 557);
+  RUN_TEST(test_Helpers1, 206);
+  RUN_TEST(test_Normalise, 226);
+  RUN_TEST(test_SignNoFrac, 240);
+  RUN_TEST(test_SignWithFrac, 252);
+  RUN_TEST(test_CmpFracEQ, 266);
+  RUN_TEST(test_CmpFracGT, 279);
+  RUN_TEST(test_CmpFracLT, 292);
+  RUN_TEST(test_AddFullNorm, 309);
+  RUN_TEST(test_AddFullOflow1, 323);
+  RUN_TEST(test_AddNsecNorm, 337);
+  RUN_TEST(test_AddNsecOflow1, 349);
+  RUN_TEST(test_SubFullNorm, 365);
+  RUN_TEST(test_SubFullOflow, 379);
+  RUN_TEST(test_SubNsecNorm, 393);
+  RUN_TEST(test_SubNsecOflow, 405);
+  RUN_TEST(test_Neg, 421);
+  RUN_TEST(test_AbsNoFrac, 438);
+  RUN_TEST(test_AbsWithFrac, 449);
+  RUN_TEST(test_Helpers2, 464);
+  RUN_TEST(test_ToLFPbittest, 496);
+  RUN_TEST(test_ToLFPrelPos, 509);
+  RUN_TEST(test_ToLFPrelNeg, 521);
+  RUN_TEST(test_ToLFPabs, 533);
+  RUN_TEST(test_FromLFPbittest, 548);
+  RUN_TEST(test_FromLFPrelPos, 567);
+  RUN_TEST(test_FromLFPrelNeg, 580);
+  RUN_TEST(test_LFProundtrip, 595);
+  RUN_TEST(test_ToString, 614);
 
   return (UnityEnd());
 }
index 0a2616ef25a946f548b1db5d78a8c0fac58db8cf..9f99cc6c7d8f69250f8e5d4b225cdd0bc713be09 100644 (file)
@@ -73,34 +73,34 @@ int main(int argc, char *argv[])
   progname = argv[0];
   Unity.TestFile = "timevalops.c";
   UnityBegin("timevalops.c");
-  RUN_TEST(test_Helpers1, 149);
-  RUN_TEST(test_Normalise, 169);
-  RUN_TEST(test_SignNoFrac, 183);
-  RUN_TEST(test_SignWithFrac, 195);
-  RUN_TEST(test_CmpFracEQ, 210);
-  RUN_TEST(test_CmpFracGT, 224);
-  RUN_TEST(test_CmpFracLT, 238);
-  RUN_TEST(test_AddFullNorm, 256);
-  RUN_TEST(test_AddFullOflow1, 270);
-  RUN_TEST(test_AddUsecNorm, 284);
-  RUN_TEST(test_AddUsecOflow1, 296);
-  RUN_TEST(test_SubFullNorm, 312);
-  RUN_TEST(test_SubFullOflow, 326);
-  RUN_TEST(test_SubUsecNorm, 340);
-  RUN_TEST(test_SubUsecOflow, 352);
-  RUN_TEST(test_Neg, 368);
-  RUN_TEST(test_AbsNoFrac, 385);
-  RUN_TEST(test_AbsWithFrac, 396);
-  RUN_TEST(test_Helpers2, 412);
-  RUN_TEST(test_ToLFPbittest, 445);
-  RUN_TEST(test_ToLFPrelPos, 460);
-  RUN_TEST(test_ToLFPrelNeg, 474);
-  RUN_TEST(test_ToLFPabs, 487);
-  RUN_TEST(test_FromLFPbittest, 505);
-  RUN_TEST(test_FromLFPrelPos, 523);
-  RUN_TEST(test_FromLFPrelNeg, 536);
-  RUN_TEST(test_LFProundtrip, 550);
-  RUN_TEST(test_ToString, 569);
+  RUN_TEST(test_Helpers1, 201);
+  RUN_TEST(test_Normalise, 221);
+  RUN_TEST(test_SignNoFrac, 235);
+  RUN_TEST(test_SignWithFrac, 247);
+  RUN_TEST(test_CmpFracEQ, 262);
+  RUN_TEST(test_CmpFracGT, 276);
+  RUN_TEST(test_CmpFracLT, 290);
+  RUN_TEST(test_AddFullNorm, 308);
+  RUN_TEST(test_AddFullOflow1, 322);
+  RUN_TEST(test_AddUsecNorm, 336);
+  RUN_TEST(test_AddUsecOflow1, 348);
+  RUN_TEST(test_SubFullNorm, 364);
+  RUN_TEST(test_SubFullOflow, 378);
+  RUN_TEST(test_SubUsecNorm, 392);
+  RUN_TEST(test_SubUsecOflow, 404);
+  RUN_TEST(test_Neg, 420);
+  RUN_TEST(test_AbsNoFrac, 437);
+  RUN_TEST(test_AbsWithFrac, 448);
+  RUN_TEST(test_Helpers2, 464);
+  RUN_TEST(test_ToLFPbittest, 497);
+  RUN_TEST(test_ToLFPrelPos, 512);
+  RUN_TEST(test_ToLFPrelNeg, 526);
+  RUN_TEST(test_ToLFPabs, 539);
+  RUN_TEST(test_FromLFPbittest, 557);
+  RUN_TEST(test_FromLFPrelPos, 575);
+  RUN_TEST(test_FromLFPrelNeg, 588);
+  RUN_TEST(test_LFProundtrip, 602);
+  RUN_TEST(test_ToString, 621);
 
   return (UnityEnd());
 }
index ac7a45d6c391c1673a17e9c2e3359f7d4b5e013a..ee222f6d071c1f9e70da2dfd38aff3cefe234d28 100644 (file)
@@ -48,6 +48,55 @@ struct timespec timespec_init(time_t hi, long lo){
        return V;
 }
 
+char * timespectoa( const struct timespec *in)
+{
+       long nsec, q;
+       long long   sec;
+       char        sign;
+
+       nsec = in->tv_nsec;
+       sec  = in->tv_sec;
+
+       /* normalise time stamp first. This is a floor division. Let
+        * the compiler sort out the division itself.
+        */
+       q    = nsec / 1000000000;
+       nsec = nsec % 1000000000;
+       if (nsec < 0) {
+               q    -= 1;
+               nsec += 1000000000;
+       }
+       sec += q;
+       
+       /* get absolute value */
+       if (sec < 0) {
+               sign = '-';
+               sec  = -sec;
+               if (nsec) {
+                       nsec = 1000000000 - nsec;
+                       sec -= 1;
+               }
+       } else {
+               sign = '+';
+       }
+
+       size_t sz;
+       //sz = snprintf(NULL, 0, "%c%llu.%09u", sign, (unsigned long long)sec, (unsigned int)nsec);
+       //printf("NUM: %d\n",sz);
+       //char * buf = (char *)malloc(sz+1);
+       //snprintf(buf, sz+1, "%c%llu.%09u", sign, (unsigned long long)sec, (unsigned int)nsec);
+       char * buf = (char *)malloc(48);
+       sz = snprintf(buf, 48, "%c%llu.%09u", sign, (unsigned long long)sec, (unsigned int)nsec);
+       //printf("NUM: %d\n",sz);
+       if(sz > 48){
+               printf("ERROR: insufficient space allocated\n");
+       } //this should never happen
+
+       return buf;
+}
+
+
+
 //taken from lfpfunc.c -> maybe remove this from timevalops.c and lfpfunc. and put in c_timstructs.h ????!!!!!
 l_fp l_fp_init(int32 i, u_int32 f)
 {
@@ -89,7 +138,15 @@ bool AssertTimespecClose(const struct timespec m,const struct timespec n, const
                return TRUE;
        else
        {
-               printf("m_expr which is %ld.%lu \nand\nn_expr which is %ld.%lu\nare not close; diff=%ld.%lunsec\n",m.tv_sec,m.tv_nsec,n.tv_sec,n.tv_nsec,diff.tv_sec,diff.tv_nsec); 
+               char * a = timespectoa(&m);
+               char * b = timespectoa(&n);
+               char * c = timespectoa(&diff);
+               printf("TIMESPEC_PRINTF:\nm_expr %s n_expr %s diff %s\n",a,b,c);
+               free(a);
+               free(b);
+               free(c);
+               //printf below is wrong
+               //printf("m_expr which is %ld.%lu \nand\nn_expr which is %ld.%lu\nare not close; diff=%ld.%lunsec\n",m.tv_sec,m.tv_nsec,n.tv_sec,n.tv_nsec,diff.tv_sec,diff.tv_nsec); 
                return FALSE;
        }
 }
index 9d832673d6c51058aa72d65cb2acfad0ea0ab032..743b4375c7e0f5d6001f9d834e1309791c1c95d6 100644 (file)
@@ -43,6 +43,50 @@ struct timeval timeval_init( time_t hi, long lo){
 const bool timeval_isValid(struct timeval V)
        { return V.tv_usec >= 0 && V.tv_usec < 1000000; }
 
+char * timevaltoa( const struct timeval *in)
+{
+       suseconds_t usec, q;
+       long long   sec;
+       char        sign;
+
+       usec = in->tv_usec;
+       sec  = in->tv_sec;
+
+       /* normalise time stamp first. This is a floor division. Let
+        * the compiler sort out the division itself.
+        */
+       q    = usec / 1000000;
+       usec = usec % 1000000;
+       if (usec < 0) {
+               q    -= 1;
+               usec += 1000000;
+       }
+       sec += q;
+       
+       /* get absolute value */
+       if (sec < 0) {
+               sign = '-';
+               sec  = -sec;
+               if (usec) {
+                       usec = 1000000 - usec;
+                       sec -= 1;
+               }
+       } else {
+               sign = '+';
+       }
+
+       size_t sz;
+       char * buf = (char *)malloc(48);
+       sz = snprintf(buf, 48, "%c%llu.%06u", sign, (unsigned long long)sec, (unsigned int)usec);
+
+       if(sz > 48){
+               printf("ERROR: insufficient space allocated");
+       } //this should never happen
+
+       return buf;
+}
+
+
 //taken from lfpfunc.c -> maybe remove this from timevalops.c and lfpfunc. and put in c_timstructs.h ????!!!!!
 l_fp l_fp_init(int32 i, u_int32 f)
 {
@@ -63,7 +107,15 @@ bool AssertTimevalClose(const struct timeval m, const struct timeval n, const st
        
        else 
        {
-               printf("m_expr which is %ld.%lu \nand\nn_expr which is %ld.%lu\nare not close; diff=%ld.%luusec\n",m.tv_sec,m.tv_usec,n.tv_sec,n.tv_usec,diff.tv_sec,diff.tv_usec); 
+               char * a = timevaltoa(&m);
+               char * b = timevaltoa(&n);
+               char * c = timevaltoa(&diff);
+               printf("TIMESPEC_PRINTF:\nm_expr %s n_expr %s diff %s\n",a,b,c);
+               free(a);
+               free(b);
+               free(c);
+               //printf below is wrong
+               //printf("m_expr which is %ld.%lu \nand\nn_expr which is %ld.%lu\nare not close; diff=%ld.%luusec\n",m.tv_sec,m.tv_usec,n.tv_sec,n.tv_usec,diff.tv_sec,diff.tv_usec); 
                //I don't have variables m_expr and n_expr in unity, those are command line arguments which only getst has!!!
                
                return FALSE;