From d0144660663c5f9e6eb7e89a47a06bfc3378790c Mon Sep 17 00:00:00 2001 From: khizmax Date: Sun, 5 Mar 2017 21:46:43 +0300 Subject: [PATCH] [UBsan] Fixed set-insdelfind stress test --- test/stress/set/insdel_find/set_insdelfind.cpp | 13 +++++++++++++ test/stress/set/insdel_find/set_insdelfind.h | 5 ++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/test/stress/set/insdel_find/set_insdelfind.cpp b/test/stress/set/insdel_find/set_insdelfind.cpp index 2899bc39..e35e8ea7 100644 --- a/test/stress/set/insdel_find/set_insdelfind.cpp +++ b/test/stress/set/insdel_find/set_insdelfind.cpp @@ -47,6 +47,7 @@ namespace set { size_t Set_InsDelFind::s_nFeldmanSet_ArrayBits = 4; size_t Set_InsDelFind::s_nLoadFactor = 2; + Set_InsDelFind::actions Set_InsDelFind::s_arrShuffle[Set_InsDelFind::c_nShuffleSize]; void Set_InsDelFind::SetUpTestCase() { @@ -93,6 +94,18 @@ namespace set { s_nFeldmanSet_ArrayBits = cfg.get_size_t( "FeldmanMapArrayBits", s_nFeldmanSet_ArrayBits ); if ( s_nFeldmanSet_ArrayBits == 0 ) s_nFeldmanSet_ArrayBits = 2; + + actions * pFirst = s_arrShuffle; + actions * pLast = s_arrShuffle + s_nInsertPercentage; + std::fill( pFirst, pLast, do_insert ); + pFirst = pLast; + pLast += s_nDeletePercentage; + std::fill( pFirst, pLast, do_delete ); + pFirst = pLast; + pLast = s_arrShuffle + sizeof( s_arrShuffle ) / sizeof( s_arrShuffle[0] ); + if ( pFirst < pLast ) + std::fill( pFirst, pLast, do_find ); + shuffle( s_arrShuffle, pLast ); } std::vector Set_InsDelFind_LF::get_load_factors() diff --git a/test/stress/set/insdel_find/set_insdelfind.h b/test/stress/set/insdel_find/set_insdelfind.h index 4cd0bab1..c28ab90a 100644 --- a/test/stress/set/insdel_find/set_insdelfind.h +++ b/test/stress/set/insdel_find/set_insdelfind.h @@ -62,7 +62,7 @@ namespace set { do_delete }; static const unsigned int c_nShuffleSize = 100; - actions m_arrShuffle[c_nShuffleSize]; + static actions s_arrShuffle[c_nShuffleSize]; protected: typedef size_t key_type; @@ -103,7 +103,6 @@ namespace set { Set& rSet = m_Set; Set_InsDelFind& fixture = pool().template fixture(); - actions * pAct = fixture.m_arrShuffle; unsigned int i = 0; size_t const nNormalize = size_t(-1) / ( fixture.s_nSetSize * 2); @@ -111,7 +110,7 @@ namespace set { while ( !time_elapsed()) { nRand = cds::bitop::RandXorShift(nRand); size_t n = nRand / nNormalize; - switch ( pAct[i] ) { + switch ( s_arrShuffle[i] ) { case do_find: if ( rSet.contains( n )) ++m_nFindSuccess; -- 2.34.1