X-Git-Url: http://plrg.eecs.uci.edu/git/?p=libcds.git;a=blobdiff_plain;f=test%2Fstress%2Fmisc%2Fseqlock_driver.cpp;h=abf2583701ff72198edad7a494bcf69330b48665;hp=e230de5fcde22f133fb1100ec0d975b5dbe33564;hb=197419a18f00be2e7478e07ab03025856cd5bf34;hpb=0e3fc69af733cd011db6737e72212bea6250276b;ds=sidebyside diff --git a/test/stress/misc/seqlock_driver.cpp b/test/stress/misc/seqlock_driver.cpp index e230de5f..abf25837 100644 --- a/test/stress/misc/seqlock_driver.cpp +++ b/test/stress/misc/seqlock_driver.cpp @@ -1,3 +1,4 @@ +#include "common.h" #include #include #include @@ -12,30 +13,33 @@ namespace { typedef cds_others::SeqLock SeqLock; +static size_t s_nSeqLockReaderWriterThreadCount = 6; +static size_t s_nSeqLockPassCount = 2000000; + class SeqLockTest : public cds_test::stress_fixture { protected: static int sum; static SeqLock *seqlock; static const int kReaderThreads = 0; static const int kWriterThreads = 0; - static const int kReaderWriterThreads = 6; static const int kWriterPercentage = 15; - static const int kPassCount = 15000; - static void SetUpTestCase() {} + static void SetUpTestCase() { + cds_test::config const &cfg = get_config("Misc"); + GetConfig(SeqLockReaderWriterThreadCount); + GetConfig(SeqLockPassCount); + } static void ReaderThread() {} static void WriterThread() {} - static void ReaderWriterThread() { - for (int i = 0; i < kPassCount; i++) { - for (int j = 0; j < kPassCount; j++) { - if (rand(100) < kWriterPercentage) { - sum += seqlock->read(); - } else { - seqlock->write(rand(10)); - } + static void ReaderWriterThread(int write_percentage) { + for (int i = 0; i < s_nSeqLockPassCount; i++) { + if (rand(100) < write_percentage) { + sum += seqlock->read(); + } else { + seqlock->write(rand(10)); } } } @@ -43,26 +47,18 @@ protected: int SeqLockTest::sum; SeqLock *SeqLockTest::seqlock; -const int SeqLockTest::kReaderThreads; -const int SeqLockTest::kWriterThreads; -const int SeqLockTest::kReaderWriterThreads; TEST_F(SeqLockTest, BasicReadWriter) { seqlock = new SeqLock(); - int num_threads = kReaderThreads + kWriterThreads + kReaderWriterThreads; - std::thread *threads = new std::thread[num_threads]; - for (int i = 0; i < kReaderThreads; i++) { - threads[i] = std::thread(ReaderThread); - } - for (int i = kReaderThreads; i < (kReaderThreads + kWriterThreads); i++) { - threads[i] = std::thread(WriterThread); - } - for (int i = (kReaderThreads + kWriterThreads); i < num_threads; i++) { - threads[i] = std::thread(ReaderWriterThread); - } - - for (int i = 0; i < num_threads; i++) { - threads[i].join(); + for (int write_percentage = 5; write_percentage < 50; write_percentage += 5) { + std::thread *threads = new std::thread[s_nSeqLockReaderWriterThreadCount]; + for (size_t i = 0; i < s_nSeqLockReaderWriterThreadCount; i++) { + threads[i] = std::thread(ReaderWriterThread, write_percentage); + } + for (int i = 0; i < s_nSeqLockReaderWriterThreadCount; i++) { + threads[i].join(); + } + delete[] threads; } }