From: Yann Collet Date: Tue, 28 Aug 2018 01:46:42 +0000 (-0700) Subject: paramgrill: fixed a bunch of div-by-zero X-Git-Tag: v0.0.29~26^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9e26893e0755650a92a899b2daf3886b0ea79055;p=thirdparty%2Fzstd.git paramgrill: fixed a bunch of div-by-zero they were pretty easy to trigger by the way, just start an extended paramgrill session to find a compression table based on any sample, it would necessarily happen at some point. --- diff --git a/tests/paramgrill.c b/tests/paramgrill.c index 0568626a8..12a06688b 100644 --- a/tests/paramgrill.c +++ b/tests/paramgrill.c @@ -468,7 +468,7 @@ static void paramVariation(paramValues_t* ptr, memoTable_t* mtAll, const U32 nbC static paramValues_t randomParams(void) { varInds_t v; paramValues_t p; - for(v = 0; v <= NUM_PARAMS; v++) { + for(v = 0; v < NUM_PARAMS; v++) { p.vals[v] = rangeMap(v, FUZ_rand(&g_rand) % rangetable[v]); } return p; @@ -632,32 +632,39 @@ static void BMK_translateAdvancedParams(FILE* f, const paramValues_t params) { varInds_t v; int first = 1; fprintf(f,"--zstd="); - for(v = 0; v < NUM_PARAMS; v++) { - if(g_silenceParams[v]) { continue; } - if(!first) { fprintf(f, ","); } + for (v = 0; v < NUM_PARAMS; v++) { + if (g_silenceParams[v]) { continue; } + if (!first) { fprintf(f, ","); } fprintf(f,"%s=", g_paramNames[v]); - if(v == strt_ind) { fprintf(f,"%u", params.vals[v]); } + if (v == strt_ind) { fprintf(f,"%u", params.vals[v]); } else { displayParamVal(f, v, params.vals[v], 0); } first = 0; } fprintf(f, "\n"); } -static void BMK_displayOneResult(FILE* f, winnerInfo_t res, const size_t srcSize) { - varInds_t v; - int first = 1; - res.params = cParamUnsetMin(res.params); - fprintf(f," {"); - for(v = 0; v < NUM_PARAMS; v++) { - if(g_silenceParams[v]) { continue; } - if(!first) { fprintf(f, ","); } - displayParamVal(f, v, res.params.vals[v], 3); - first = 0; - } +static void BMK_displayOneResult(FILE* f, winnerInfo_t res, const size_t srcSize) +{ + varInds_t v; + int first = 1; + res.params = cParamUnsetMin(res.params); + fprintf(f, " {"); + for (v = 0; v < NUM_PARAMS; v++) { + if (g_silenceParams[v]) { continue; } + if (!first) { fprintf(f, ","); } + displayParamVal(f, v, res.params.vals[v], 3); + first = 0; + } - fprintf(f, " }, /* R:%5.3f at %5.1f MB/s - %5.1f MB/s */\n", - (double)srcSize / res.result.cSize, (double)res.result.cSpeed / MB_UNIT, (double)res.result.dSpeed / MB_UNIT); + { double const ratio = res.result.cSize ? + (double)srcSize / res.result.cSize : 0; + double const cSpeedMBps = (double)res.result.cSpeed / MB_UNIT; + double const dSpeedMBps = (double)res.result.dSpeed / MB_UNIT; + + fprintf(f, " }, /* R:%5.3f at %5.1f MB/s - %5.1f MB/s */\n", + ratio, cSpeedMBps, dSpeedMBps); + } } /* Writes to f the results of a parameter benchmark */