]> git.ozlabs.org Git - ccan/blobdiff - ccan/ilog/test/run.c
configurator: HAVE_SECTION_START_STOP
[ccan] / ccan / ilog / test / run.c
index 81935840f8d2b61129fe40a1ea9797d670386140..bda59f920a33e115958eeff8b91a6a6a8d2eb966 100644 (file)
@@ -1,11 +1,7 @@
+#include <ccan/ilog/ilog.h>
+#include <ccan/ilog/ilog.c>
 #include <stdio.h>
-#include "ilog/ilog.h"
-#include "tap/tap.h"
-#if defined(__GNUC_PREREQ)
-# if __GNUC_PREREQ(4,2)
-#  pragma GCC diagnostic ignored "-Wparentheses"
-# endif
-#endif
+#include <ccan/tap/tap.h>
 
 /*Dead simple (but slow) versions to compare against.*/
 
@@ -24,67 +20,41 @@ static int test_ilog64(uint64_t _v){
 #define NTRIALS (64)
 
 int main(int _argc,const char *_argv[]){
-  int nmatches;
   int i;
   int j;
   /*This is how many tests you plan to run.*/
-  plan_tests(2);
-  nmatches=0;
+  plan_tests(33 * NTRIALS * 3 + 65 * NTRIALS * 3);
   for(i=0;i<=32;i++){
     uint32_t v;
     /*Test each bit in turn (and 0).*/
-    v=i?(uint32_t)1U<<i-1:0;
+    v=i?(uint32_t)1U<<(i-1):0;
     for(j=0;j<NTRIALS;j++){
       int l;
       l=test_ilog32(v);
-      if(ILOG_32(v)!=l){
-        fprintf(stderr,"ILOG_32(0x%08lX): %i != %i\n",(long)v,ILOG_32(v),l);
-      }
-      else nmatches++;
-      if(ilog32(v)!=l){
-        fprintf(stderr,"ilog32(0x%08lX): %i != %i\n",(long)v,ilog32(v),l);
-      }
-      else nmatches++;
-      if(STATIC_ILOG_32(v)!=l){
-        fprintf(stderr,"STATIC_ILOG_32(0x%08lX): %i != %i\n",
-         (long)v,STATIC_ILOG_32(v),l);
-      }
-      else nmatches++;
+      ok1(STATIC_ILOG_32(v)==l);
+      ok1(ilog32(v)==l);
+      ok1(ilog32_nz(v) == l || v == 0);
       /*Also try a few more pseudo-random values with at most the same number
          of bits.*/
-      v=1103515245U*v+12345U&0xFFFFFFFFU>>(33-i>>1)>>(32-i>>1);
+      v=(1103515245U*v+12345U)&0xFFFFFFFFU>>((33-i)>>1)>>((32-i)>>1);
     }
   }
-  ok1(nmatches==3*(32+1)*NTRIALS);
-  nmatches=0;
+
   for(i=0;i<=64;i++){
     uint64_t v;
     /*Test each bit in turn (and 0).*/
-    v=i?(uint64_t)1U<<i-1:0;
+    v=i?(uint64_t)1U<<(i-1):0;
     for(j=0;j<NTRIALS;j++){
       int l;
       l=test_ilog64(v);
-      if(ILOG_64(v)!=l){
-        fprintf(stderr,"ILOG_64(0x%016llX): %i != %i\n",
-         (long long)v,ILOG_64(v),l);
-      }
-      else nmatches++;
-      if(ilog64(v)!=l){
-        fprintf(stderr,"ilog64(0x%016llX): %i != %i\n",
-         (long long)v,ilog64(v),l);
-      }
-      else nmatches++;
-      if(STATIC_ILOG_64(v)!=l){
-        fprintf(stderr,"STATIC_ILOG_64(0x%016llX): %i != %i\n",
-         (long long)v,STATIC_ILOG_64(v),l);
-      }
-      else nmatches++;
+      ok1(STATIC_ILOG_64(v)==l);
+      ok1(ilog64(v)==l);
+      ok1(ilog64_nz(v) == l || v == 0);
       /*Also try a few more pseudo-random values with at most the same number
          of bits.*/
-      v=(uint64_t)(2862933555777941757ULL*v+3037000493ULL
-       &0xFFFFFFFFFFFFFFFFULL>>(65-i>>1)>>(64-i>>1));
+      v=(uint64_t)((2862933555777941757ULL*v+3037000493ULL)
+       &0xFFFFFFFFFFFFFFFFULL>>((65-i)>>1)>>((64-i)>>1));
     }
   }
-  ok1(nmatches==3*(64+1)*NTRIALS);
   return exit_status();
 }