void test_atomic_int () { // Test and, or, xor ai = 42; ai &= 15; OIIO_CHECK_EQUAL (ai, 10); ai |= 6; OIIO_CHECK_EQUAL (ai, 14); ai ^= 31; OIIO_CHECK_EQUAL (ai, 17); ai = 42; int tmp; tmp = ai.fetch_and(15); OIIO_CHECK_EQUAL(tmp,42); OIIO_CHECK_EQUAL(ai,10); tmp = ai.fetch_or ( 6); OIIO_CHECK_EQUAL(tmp,10); OIIO_CHECK_EQUAL(ai,14); tmp = ai.fetch_xor(31); OIIO_CHECK_EQUAL(tmp,14); OIIO_CHECK_EQUAL(ai,17); }
void testExecPerSecond(int numberOfThreads, int numberOfKeys) { ThreadPool<Task> pool; pool.init(numberOfThreads, numberOfKeys, 10000); for (long long int i = 0; ; ++i) { Task t(i % numberOfKeys); pool.enqueue(t); if (i % 100000 == 0) { int execCounterCur = execCounter.load(); int millisCur = getMilliseconds(); if (execCounterPrev != 0) { int counterDif = execCounterCur - execCounterPrev; long long int millisDif = millisCur - millisPrev; long long int execPerSec = (counterDif / millisDif) * 1000; cout << "exec per sec: " << execPerSec << "" << endl; } execCounterPrev = execCounterCur; millisPrev = millisCur; } } }
void testCountTotal(int numberOfThreads, int numberOfKeys, int numberOfTasks) { execCounter.store(0); { ThreadPool<Task> pool; pool.init(numberOfThreads, numberOfKeys, 10000); for (long long int i = 0; i < numberOfTasks; ++i) { Task t(i % numberOfKeys); while (pool.enqueue(t) != 0); } } if (execCounter.load() != numberOfTasks) { throw std::logic_error("test4: invalid exec count!"); } }
void test_atomic_int (int numthreads, int iterations) { ai = 42; thread_group threads; for (int i = 0; i < numthreads; ++i) { threads.create_thread (do_int_math, iterations); } ASSERT ((int)threads.size() == numthreads); threads.join_all (); OIIO_CHECK_EQUAL (ai, 42); // Test and, or, xor ai &= 15; OIIO_CHECK_EQUAL (ai, 10); ai |= 6; OIIO_CHECK_EQUAL (ai, 14); ai ^= 31; OIIO_CHECK_EQUAL (ai, 17); ai = 42; int tmp; tmp = ai.fetch_and(15); OIIO_CHECK_EQUAL(tmp,42); OIIO_CHECK_EQUAL(ai,10); tmp = ai.fetch_or ( 6); OIIO_CHECK_EQUAL(tmp,10); OIIO_CHECK_EQUAL(ai,14); tmp = ai.fetch_xor(31); OIIO_CHECK_EQUAL(tmp,14); OIIO_CHECK_EQUAL(ai,17); }