| 159 | } |
| 160 | |
| 161 | void DebugTestApp::testThreadSafety() |
| 162 | { |
| 163 | |
| 164 | log::manager()->restoreToDefault(); |
| 165 | CI_LOG_I( "\n--- TESTING THREADS START----"); |
| 166 | CI_LOG_I( "... this may take a while, don't fret." ); |
| 167 | |
| 168 | log::manager()->clearLoggers(); |
| 169 | |
| 170 | auto looper = [](std::string log) { |
| 171 | auto logger = log::makeLogger<log::LoggerFile>( log, false ); |
| 172 | for( int i=0; i<500; ++i ) { |
| 173 | for( int j=0; j<500; ++j ) { |
| 174 | CI_LOG_D( i * j ); |
| 175 | } |
| 176 | log::manager()->removeLogger( logger ); |
| 177 | log::manager()->addLogger( logger ); |
| 178 | } |
| 179 | |
| 180 | // clean up our mess |
| 181 | auto path = logger->getFilePath(); |
| 182 | log::manager()->removeLogger( logger ); |
| 183 | logger.reset(); |
| 184 | fs::remove( path ); |
| 185 | }; |
| 186 | |
| 187 | std::thread t1( [looper] () { looper( "/tmp/thread1.log" ); } ); |
| 188 | std::thread t2( [looper] () { looper( "/tmp/thread2.log" ); } ); |
| 189 | std::thread t3( [looper] () { looper( "/tmp/thread3.log" ); } ); |
| 190 | |
| 191 | t1.join(); |
| 192 | t2.join(); |
| 193 | t3.join(); |
| 194 | |
| 195 | log::manager()->clearLoggers(); |
| 196 | log::makeLogger<log::LoggerConsole>(); |
| 197 | |
| 198 | CI_LOG_I( "Threading didn't crash." ); |
| 199 | CI_LOG_I( "\n--- TESTING THREADS END----\n\n"); |
| 200 | } |
| 201 | |
| 202 | void DebugTestApp::testAsserts() |
| 203 | { |
nothing calls this directly
no test coverage detected