-#include "ilog/ilog.h"
-#include "ilog/ilog.c"
+#include <ccan/ilog/ilog.h>
+#include <ccan/ilog/ilog.c>
#include <stdio.h>
-#include "tap/tap.h"
+#include <ccan/tap/tap.h>
/*Dead simple (but slow) versions to compare against.*/
#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).*/
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);
}
}
- ok1(nmatches==3*(32+1)*NTRIALS);
- nmatches=0;
+
for(i=0;i<=64;i++){
uint64_t v;
/*Test each bit in turn (and 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));
}
}
- ok1(nmatches==3*(64+1)*NTRIALS);
return exit_status();
}