annotate src/zlib-1.2.7/contrib/testzlib/testzlib.c @ 89:8a15ff55d9af

Add bzip2, zlib, liblo, portaudio sources
author Chris Cannam <cannam@all-day-breakfast.com>
date Wed, 20 Mar 2013 13:59:52 +0000
parents
children
rev   line source
cannam@89 1 #include <stdio.h>
cannam@89 2 #include <stdlib.h>
cannam@89 3 #include <windows.h>
cannam@89 4
cannam@89 5 #include "zlib.h"
cannam@89 6
cannam@89 7
cannam@89 8 void MyDoMinus64(LARGE_INTEGER *R,LARGE_INTEGER A,LARGE_INTEGER B)
cannam@89 9 {
cannam@89 10 R->HighPart = A.HighPart - B.HighPart;
cannam@89 11 if (A.LowPart >= B.LowPart)
cannam@89 12 R->LowPart = A.LowPart - B.LowPart;
cannam@89 13 else
cannam@89 14 {
cannam@89 15 R->LowPart = A.LowPart - B.LowPart;
cannam@89 16 R->HighPart --;
cannam@89 17 }
cannam@89 18 }
cannam@89 19
cannam@89 20 #ifdef _M_X64
cannam@89 21 // see http://msdn2.microsoft.com/library/twchhe95(en-us,vs.80).aspx for __rdtsc
cannam@89 22 unsigned __int64 __rdtsc(void);
cannam@89 23 void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)
cannam@89 24 {
cannam@89 25 // printf("rdtsc = %I64x\n",__rdtsc());
cannam@89 26 pbeginTime64->QuadPart=__rdtsc();
cannam@89 27 }
cannam@89 28
cannam@89 29 LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
cannam@89 30 {
cannam@89 31 LARGE_INTEGER LIres;
cannam@89 32 unsigned _int64 res=__rdtsc()-((unsigned _int64)(beginTime64.QuadPart));
cannam@89 33 LIres.QuadPart=res;
cannam@89 34 // printf("rdtsc = %I64x\n",__rdtsc());
cannam@89 35 return LIres;
cannam@89 36 }
cannam@89 37 #else
cannam@89 38 #ifdef _M_IX86
cannam@89 39 void myGetRDTSC32(LARGE_INTEGER * pbeginTime64)
cannam@89 40 {
cannam@89 41 DWORD dwEdx,dwEax;
cannam@89 42 _asm
cannam@89 43 {
cannam@89 44 rdtsc
cannam@89 45 mov dwEax,eax
cannam@89 46 mov dwEdx,edx
cannam@89 47 }
cannam@89 48 pbeginTime64->LowPart=dwEax;
cannam@89 49 pbeginTime64->HighPart=dwEdx;
cannam@89 50 }
cannam@89 51
cannam@89 52 void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)
cannam@89 53 {
cannam@89 54 myGetRDTSC32(pbeginTime64);
cannam@89 55 }
cannam@89 56
cannam@89 57 LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
cannam@89 58 {
cannam@89 59 LARGE_INTEGER LIres,endTime64;
cannam@89 60 myGetRDTSC32(&endTime64);
cannam@89 61
cannam@89 62 LIres.LowPart=LIres.HighPart=0;
cannam@89 63 MyDoMinus64(&LIres,endTime64,beginTime64);
cannam@89 64 return LIres;
cannam@89 65 }
cannam@89 66 #else
cannam@89 67 void myGetRDTSC32(LARGE_INTEGER * pbeginTime64)
cannam@89 68 {
cannam@89 69 }
cannam@89 70
cannam@89 71 void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)
cannam@89 72 {
cannam@89 73 }
cannam@89 74
cannam@89 75 LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
cannam@89 76 {
cannam@89 77 LARGE_INTEGER lr;
cannam@89 78 lr.QuadPart=0;
cannam@89 79 return lr;
cannam@89 80 }
cannam@89 81 #endif
cannam@89 82 #endif
cannam@89 83
cannam@89 84 void BeginCountPerfCounter(LARGE_INTEGER * pbeginTime64,BOOL fComputeTimeQueryPerf)
cannam@89 85 {
cannam@89 86 if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(pbeginTime64)))
cannam@89 87 {
cannam@89 88 pbeginTime64->LowPart = GetTickCount();
cannam@89 89 pbeginTime64->HighPart = 0;
cannam@89 90 }
cannam@89 91 }
cannam@89 92
cannam@89 93 DWORD GetMsecSincePerfCounter(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
cannam@89 94 {
cannam@89 95 LARGE_INTEGER endTime64,ticksPerSecond,ticks;
cannam@89 96 DWORDLONG ticksShifted,tickSecShifted;
cannam@89 97 DWORD dwLog=16+0;
cannam@89 98 DWORD dwRet;
cannam@89 99 if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(&endTime64)))
cannam@89 100 dwRet = (GetTickCount() - beginTime64.LowPart)*1;
cannam@89 101 else
cannam@89 102 {
cannam@89 103 MyDoMinus64(&ticks,endTime64,beginTime64);
cannam@89 104 QueryPerformanceFrequency(&ticksPerSecond);
cannam@89 105
cannam@89 106
cannam@89 107 {
cannam@89 108 ticksShifted = Int64ShrlMod32(*(DWORDLONG*)&ticks,dwLog);
cannam@89 109 tickSecShifted = Int64ShrlMod32(*(DWORDLONG*)&ticksPerSecond,dwLog);
cannam@89 110
cannam@89 111 }
cannam@89 112
cannam@89 113 dwRet = (DWORD)((((DWORD)ticksShifted)*1000)/(DWORD)(tickSecShifted));
cannam@89 114 dwRet *=1;
cannam@89 115 }
cannam@89 116 return dwRet;
cannam@89 117 }
cannam@89 118
cannam@89 119 int ReadFileMemory(const char* filename,long* plFileSize,void** pFilePtr)
cannam@89 120 {
cannam@89 121 FILE* stream;
cannam@89 122 void* ptr;
cannam@89 123 int retVal=1;
cannam@89 124 stream=fopen(filename, "rb");
cannam@89 125 if (stream==NULL)
cannam@89 126 return 0;
cannam@89 127
cannam@89 128 fseek(stream,0,SEEK_END);
cannam@89 129
cannam@89 130 *plFileSize=ftell(stream);
cannam@89 131 fseek(stream,0,SEEK_SET);
cannam@89 132 ptr=malloc((*plFileSize)+1);
cannam@89 133 if (ptr==NULL)
cannam@89 134 retVal=0;
cannam@89 135 else
cannam@89 136 {
cannam@89 137 if (fread(ptr, 1, *plFileSize,stream) != (*plFileSize))
cannam@89 138 retVal=0;
cannam@89 139 }
cannam@89 140 fclose(stream);
cannam@89 141 *pFilePtr=ptr;
cannam@89 142 return retVal;
cannam@89 143 }
cannam@89 144
cannam@89 145 int main(int argc, char *argv[])
cannam@89 146 {
cannam@89 147 int BlockSizeCompress=0x8000;
cannam@89 148 int BlockSizeUncompress=0x8000;
cannam@89 149 int cprLevel=Z_DEFAULT_COMPRESSION ;
cannam@89 150 long lFileSize;
cannam@89 151 unsigned char* FilePtr;
cannam@89 152 long lBufferSizeCpr;
cannam@89 153 long lBufferSizeUncpr;
cannam@89 154 long lCompressedSize=0;
cannam@89 155 unsigned char* CprPtr;
cannam@89 156 unsigned char* UncprPtr;
cannam@89 157 long lSizeCpr,lSizeUncpr;
cannam@89 158 DWORD dwGetTick,dwMsecQP;
cannam@89 159 LARGE_INTEGER li_qp,li_rdtsc,dwResRdtsc;
cannam@89 160
cannam@89 161 if (argc<=1)
cannam@89 162 {
cannam@89 163 printf("run TestZlib <File> [BlockSizeCompress] [BlockSizeUncompress] [compres. level]\n");
cannam@89 164 return 0;
cannam@89 165 }
cannam@89 166
cannam@89 167 if (ReadFileMemory(argv[1],&lFileSize,&FilePtr)==0)
cannam@89 168 {
cannam@89 169 printf("error reading %s\n",argv[1]);
cannam@89 170 return 1;
cannam@89 171 }
cannam@89 172 else printf("file %s read, %u bytes\n",argv[1],lFileSize);
cannam@89 173
cannam@89 174 if (argc>=3)
cannam@89 175 BlockSizeCompress=atol(argv[2]);
cannam@89 176
cannam@89 177 if (argc>=4)
cannam@89 178 BlockSizeUncompress=atol(argv[3]);
cannam@89 179
cannam@89 180 if (argc>=5)
cannam@89 181 cprLevel=(int)atol(argv[4]);
cannam@89 182
cannam@89 183 lBufferSizeCpr = lFileSize + (lFileSize/0x10) + 0x200;
cannam@89 184 lBufferSizeUncpr = lBufferSizeCpr;
cannam@89 185
cannam@89 186 CprPtr=(unsigned char*)malloc(lBufferSizeCpr + BlockSizeCompress);
cannam@89 187
cannam@89 188 BeginCountPerfCounter(&li_qp,TRUE);
cannam@89 189 dwGetTick=GetTickCount();
cannam@89 190 BeginCountRdtsc(&li_rdtsc);
cannam@89 191 {
cannam@89 192 z_stream zcpr;
cannam@89 193 int ret=Z_OK;
cannam@89 194 long lOrigToDo = lFileSize;
cannam@89 195 long lOrigDone = 0;
cannam@89 196 int step=0;
cannam@89 197 memset(&zcpr,0,sizeof(z_stream));
cannam@89 198 deflateInit(&zcpr,cprLevel);
cannam@89 199
cannam@89 200 zcpr.next_in = FilePtr;
cannam@89 201 zcpr.next_out = CprPtr;
cannam@89 202
cannam@89 203
cannam@89 204 do
cannam@89 205 {
cannam@89 206 long all_read_before = zcpr.total_in;
cannam@89 207 zcpr.avail_in = min(lOrigToDo,BlockSizeCompress);
cannam@89 208 zcpr.avail_out = BlockSizeCompress;
cannam@89 209 ret=deflate(&zcpr,(zcpr.avail_in==lOrigToDo) ? Z_FINISH : Z_SYNC_FLUSH);
cannam@89 210 lOrigDone += (zcpr.total_in-all_read_before);
cannam@89 211 lOrigToDo -= (zcpr.total_in-all_read_before);
cannam@89 212 step++;
cannam@89 213 } while (ret==Z_OK);
cannam@89 214
cannam@89 215 lSizeCpr=zcpr.total_out;
cannam@89 216 deflateEnd(&zcpr);
cannam@89 217 dwGetTick=GetTickCount()-dwGetTick;
cannam@89 218 dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE);
cannam@89 219 dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE);
cannam@89 220 printf("total compress size = %u, in %u step\n",lSizeCpr,step);
cannam@89 221 printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.);
cannam@89 222 printf("defcpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.);
cannam@89 223 printf("defcpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart);
cannam@89 224 }
cannam@89 225
cannam@89 226 CprPtr=(unsigned char*)realloc(CprPtr,lSizeCpr);
cannam@89 227 UncprPtr=(unsigned char*)malloc(lBufferSizeUncpr + BlockSizeUncompress);
cannam@89 228
cannam@89 229 BeginCountPerfCounter(&li_qp,TRUE);
cannam@89 230 dwGetTick=GetTickCount();
cannam@89 231 BeginCountRdtsc(&li_rdtsc);
cannam@89 232 {
cannam@89 233 z_stream zcpr;
cannam@89 234 int ret=Z_OK;
cannam@89 235 long lOrigToDo = lSizeCpr;
cannam@89 236 long lOrigDone = 0;
cannam@89 237 int step=0;
cannam@89 238 memset(&zcpr,0,sizeof(z_stream));
cannam@89 239 inflateInit(&zcpr);
cannam@89 240
cannam@89 241 zcpr.next_in = CprPtr;
cannam@89 242 zcpr.next_out = UncprPtr;
cannam@89 243
cannam@89 244
cannam@89 245 do
cannam@89 246 {
cannam@89 247 long all_read_before = zcpr.total_in;
cannam@89 248 zcpr.avail_in = min(lOrigToDo,BlockSizeUncompress);
cannam@89 249 zcpr.avail_out = BlockSizeUncompress;
cannam@89 250 ret=inflate(&zcpr,Z_SYNC_FLUSH);
cannam@89 251 lOrigDone += (zcpr.total_in-all_read_before);
cannam@89 252 lOrigToDo -= (zcpr.total_in-all_read_before);
cannam@89 253 step++;
cannam@89 254 } while (ret==Z_OK);
cannam@89 255
cannam@89 256 lSizeUncpr=zcpr.total_out;
cannam@89 257 inflateEnd(&zcpr);
cannam@89 258 dwGetTick=GetTickCount()-dwGetTick;
cannam@89 259 dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE);
cannam@89 260 dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE);
cannam@89 261 printf("total uncompress size = %u, in %u step\n",lSizeUncpr,step);
cannam@89 262 printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.);
cannam@89 263 printf("uncpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.);
cannam@89 264 printf("uncpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart);
cannam@89 265 }
cannam@89 266
cannam@89 267 if (lSizeUncpr==lFileSize)
cannam@89 268 {
cannam@89 269 if (memcmp(FilePtr,UncprPtr,lFileSize)==0)
cannam@89 270 printf("compare ok\n");
cannam@89 271
cannam@89 272 }
cannam@89 273
cannam@89 274 return 0;
cannam@89 275 }