bool CThreadPoolTester::TestApp_Init(void) { s_Pool = new CThreadPool(kQueueSize, kMaxThreads); s_RNG.SetSeed(CProcess::GetCurrentPid()); if (s_NumThreads > kQueueSize) { s_NumThreads = kQueueSize; } int total_cnt = kTasksPerThread * s_NumThreads; s_Actions.resize(total_cnt + 1); s_ActionTasks.resize(total_cnt + 1); s_CancelTypes.resize(total_cnt + 1); s_WaitPeriods.resize(total_cnt + 1); s_PostTimes.resize(total_cnt + 1); s_Tasks.resize(total_cnt + 1); int req_num = 0; for (int i = 1; i <= total_cnt; ++i) { int rnd = s_RNG.GetRand(1, 1000); if (req_num <= 10 || rnd > 100) { s_Actions[i] = eAddTask; s_ActionTasks[i] = req_num; s_WaitPeriods[req_num] = s_RNG.GetRand(50, 100); rnd = s_RNG.GetRand(0, 100); s_CancelTypes[req_num] = (rnd <= 1? eSimpleWait: eCheckCancel); ++req_num; } else if (rnd <= 1) { s_Actions[i] = eFlushWaiting; } else if (rnd <= 2) { s_Actions[i] = eFlushNoWait; } else if (rnd <= 4) { s_Actions[i] = eAddExclusiveTask; s_ActionTasks[i] = req_num; ++req_num; } else if (rnd <= 6) { s_Actions[i] = eCancelAll; } else /* if (rnd <= 100) */ { s_Actions[i] = eCancelTask; s_ActionTasks[i] = req_num - 8; } s_PostTimes[i] = 100 * (i / 20) + s_RNG.GetRand(50, 100); } MSG_POST("Starting test for CThreadPool"); s_Timer.Start(); return true; }
static void s_SeedTokens(int num_aff_tokens) { s_NumTokens = num_aff_tokens; s_Tokens = new char* [s_NumTokens]; for (int n = 0; n < s_NumTokens; ++n) { int len = s_Random.GetRand(s_AvgTokenLength - s_DTokenLength, s_AvgTokenLength + s_DTokenLength); s_Tokens[n] = new char[len+1]; for (int k = 0; k < len; ++k) { s_Tokens[n][k] = s_TokenLetters[s_Random.GetRand(0, sizeof(s_TokenLetters) - 1)]; } s_Tokens[n][len] = 0; } }
static string s_GenInput(int input_length) { string input; input.reserve(input_length); s_Random.SetSeed(CRandom::TValue(time(0))); for (int n = 0; n < input_length; ++n) { input.append(1, s_Random.GetRand(0, 255)); } return input; }
CNcbi2naRandomizer::CNcbi2naRandomizer(CRandom& gen) { unsigned int bases[4]; // Count of each base in the random distribution for (int na4 = 0; na4 < 16; na4++) { int bit_count = 0; char set_bit = 0; for (int bit = 0; bit < 4; bit++) { // na4 == 0 is special case (gap) should be treated as 0xf if ( !na4 || (na4 & (1 << bit)) ) { bit_count++; bases[bit] = 1; set_bit = (char)bit; } else { bases[bit] = 0; } } if (bit_count == 1) { // Single base m_FixedTable[na4] = set_bit; continue; } m_FixedTable[na4] = kRandomValue; // Ambiguity: create random distribution with possible bases for (int bit = 0; bit < 4; bit++) { bases[bit] *= kRandomDataSize/bit_count + kRandomDataSize % bit_count; } for (int i = kRandomDataSize - 1; i >= 0; i--) { CRandom::TValue rnd = gen.GetRand(0, i); for (int base = 0; base < 4; base++) { if (!bases[base] || rnd > bases[base]) { rnd -= bases[base]; continue; } m_RandomTable[na4][i] = (char)base; bases[base]--; break; } } } }
unsigned int CTestServer::GetRandomDelay() const { CFastMutexGuard LOCK(m_RngMutex); return m_Rng.GetRand(0, m_MaxDelay); }
static const char *s_GetRandomToken() { int n = s_Random.GetRand(0, s_NumTokens - 1); return s_Tokens[n]; }