/*
speed.c 組合せに対応する整数への変換とその逆変換の性能測定プログラム
programmed by Isaku WADA 2009 isaku@pb4.so-net.ne.jp
*/
//#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <time.h>
#include "zcode.c"

unsigned xor(void) {
    static unsigned y=2463534242;
    y^=y<<13; y^=y>>17; return y^=y<<5;
}

#define SIZE 1024
unsigned Source[SIZE];
int      Results[SIZE][6];
unsigned Sum;

int main(void) {
    unsigned sz=InitComb(43,6); int i; long clo;

    printf("MaxCodeTableSize=%lu\n", MaxCodeTableSize);

    for (i=0;i<SIZE;i++) Source[i]=xor()%sz;

    clo=clock();
    for (i=0;i<100000000;i++)
        NumToComb(Results[i&(SIZE-1)],Source[i&(SIZE-1)]);
    printf("1億回の NumToComb() の実行時間 %.3f 秒\n",
        1.0*(clock()-clo)/CLOCKS_PER_SEC );

    clo=clock();
    for (i=0;i<100000000;i++)
        Sum+=CombToNum(Results[i&(SIZE-1)]);
    printf("1億回の CombToNum() の実行時間 %.3f 秒\n",
        1.0*(clock()-clo)/CLOCKS_PER_SEC );
    return 0;
}