- Timestamp:
- Jan 16, 2024 8:25:22 AM (13 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/testcase/tstRTSg.cpp
r101753 r102884 45 45 #include <iprt/string.h> 46 46 #include <iprt/test.h> 47 #include <iprt/time.h> 47 48 48 49 … … 108 109 109 110 110 static PRTSGBUF createRandBuffer( unsigned cMaxSegs, size_t cbMin, size_t cbMax, bool fAllowZeroSegs, size_t *pcbTotal)111 static PRTSGBUF createRandBuffer(RTRAND hRnd, unsigned cMaxSegs, size_t cbMin, size_t cbMax, bool fAllowZeroSegs, size_t *pcbTotal) 111 112 { 112 unsigned const cSegs = RTRand U32Ex(1, cMaxSegs);113 size_t const cbTotal = (size_t)RTRand U64Ex(RT_MAX(cbMin, fAllowZeroSegs ? 1 : cSegs), cbMax);113 unsigned const cSegs = RTRandAdvU32Ex(hRnd, 1, cMaxSegs); 114 size_t const cbTotal = (size_t)RTRandAdvU64Ex(hRnd, RT_MAX(cbMin, fAllowZeroSegs ? 1 : cSegs), cbMax); 114 115 PRTSGBUF pSgBuf = (PRTSGBUF)RTMemAlloc(cSegs * sizeof(RTSGSEG) + sizeof(*pSgBuf) + cbTotal); 115 116 if (pSgBuf) … … 117 118 PRTSGSEG paSegs = (PRTSGSEG)(pSgBuf + 1); 118 119 uint8_t *pbBytes = (uint8_t *)&paSegs[cSegs]; 119 RTRand Bytes(pbBytes, cbTotal);120 RTRandAdvBytes(hRnd, pbBytes, cbTotal); 120 121 121 122 size_t cbLeft = cbTotal; … … 123 124 for (idxSeg = 0; idxSeg < cSegs - 1; idxSeg++) 124 125 { 125 size_t const cbSeg = cbLeft ? (size_t)RTRand U64Ex(fAllowZeroSegs ? 0 : 1, cbLeft) : 0;126 size_t const cbSeg = cbLeft ? (size_t)RTRandAdvU64Ex(hRnd, fAllowZeroSegs ? 0 : 1, cbLeft) : 0; 126 127 paSegs[idxSeg].cbSeg = cbSeg; 127 128 paSegs[idxSeg].pvSeg = pbBytes; … … 148 149 RTTestSub(g_hTest, "basics"); 149 150 151 RTRAND hRnd; 152 int rc = RTRandAdvCreateParkMiller(&hRnd); 153 RTTESTI_CHECK_RC(rc, VINF_SUCCESS); 154 if (RT_FAILURE(rc)) 155 return; 156 157 uint64_t u64Seed = RTTimeSystemNanoTS(); 158 rc = RTRandAdvSeed(hRnd, u64Seed); 159 RTTESTI_CHECK_RC(rc, VINF_SUCCESS); 160 if (RT_FAILURE(rc)) 161 { 162 RTRandAdvDestroy(hRnd); 163 return; 164 } 165 RTTestIPrintf(RTTESTLVL_ALWAYS, "Seed: %#RX64\n", u64Seed); 166 150 167 for (unsigned iBufVar = 0; iBufVar < 64; iBufVar++) 151 168 { 152 169 size_t cbSgBuf1; 153 PRTSGBUF pSgBuf1 = createRandBuffer( 16, 32, _1M, true, &cbSgBuf1);170 PRTSGBUF pSgBuf1 = createRandBuffer(hRnd, 16, 32, _1M, true, &cbSgBuf1); 154 171 RTTESTI_CHECK_RETV(pSgBuf1); 155 172 … … 164 181 while (cbLeft > 0) 165 182 { 166 size_t cbToAdv = (size_t)RTRand U64Ex(0, iRun & 1 ? cbSgBuf1 * 2 : cbLeft);183 size_t cbToAdv = (size_t)RTRandAdvU64Ex(hRnd, 0, iRun & 1 ? cbSgBuf1 * 2 : cbLeft); 167 184 size_t cbActual = RTSgBufAdvance(pSgBuf1, cbToAdv); 168 185 RTTESTI_CHECK(cbActual <= cbToAdv); … … 197 214 if (iRun > 1) 198 215 { 199 size_t const cbInitial = (size_t)RTRand U64Ex(iRun, cbSgBuf1);216 size_t const cbInitial = (size_t)RTRandAdvU64Ex(hRnd, iRun, cbSgBuf1); 200 217 size_t cbAdvanced = RTSgBufAdvance(pSgBuf1, cbInitial); 201 RTTESTI_CHECK_MSG(cbAdvanced == cbInitial, (" cbAdvanced=%zu, cbInitial=%zu\n", cbAdvanced, cbInitial));218 RTTESTI_CHECK_MSG(cbAdvanced == cbInitial, ("iBufVar=%u iRun=%u cbAdvanced=%zu, cbInitial=%zu\n", iBufVar, iRun, cbAdvanced, cbInitial)); 202 219 /* should probably print part of pSgBuf1 values... */ 203 220 cbLeft -= cbInitial; … … 222 239 223 240 /* Copy out of the S/G buffer and into a flat buffer w/ electric guard page: */ 224 bool const fHead = RTRand U32Ex(0, 1) == 0;241 bool const fHead = RTRandAdvU32Ex(hRnd, 0, 1) == 0; 225 242 void *pvTmp = NULL; 226 intrc = RTTestGuardedAlloc(g_hTest, cbSgBuf1, 1, fHead, &pvTmp);243 rc = RTTestGuardedAlloc(g_hTest, cbSgBuf1, 1, fHead, &pvTmp); 227 244 RTTESTI_CHECK_RC(rc, VINF_SUCCESS); 228 245 if (RT_SUCCESS(rc)) … … 236 253 if (iRun > 1) 237 254 { 238 cbInitial = (size_t)RTRand U64Ex(iRun, cbSgBuf1);255 cbInitial = (size_t)RTRandAdvU64Ex(hRnd, iRun, cbSgBuf1); 239 256 size_t cbAdvanced = RTSgBufAdvance(pSgBuf1, cbInitial); 240 257 RTTESTI_CHECK_MSG(cbAdvanced == cbInitial, ("cbAdvanced=%zu, cbInitial=%zu\n", … … 245 262 size_t cbToCopy = cbLeft; 246 263 if (iRun > _1K / 4 * 3) 247 cbToCopy = (size_t)RTRand U64Ex(0, iRun & 1 ? cbToCopy : cbSgBuf1);264 cbToCopy = (size_t)RTRandAdvU64Ex(hRnd, 0, iRun & 1 ? cbToCopy : cbSgBuf1); 248 265 249 266 uint8_t *pbDst = (uint8_t *)pvTmp; … … 268 285 RTMemFree(pSgBuf1); 269 286 } 287 288 rc = RTRandAdvDestroy(hRnd); 289 RTTESTI_CHECK_RC(rc, VINF_SUCCESS); 270 290 } 271 291
Note:
See TracChangeset
for help on using the changeset viewer.