void *AtomicTestCase::MyThread::Entry() { wxInt32 negativeValuesSeen = 0; for ( wxInt32 i = 0; i < ITERATIONS_NUM; ++i ) { switch ( m_testType ) { case AtomicTestCase::IncAndDecMixed: wxAtomicInc(m_operateOn); wxAtomicDec(m_operateOn); if (m_operateOn < 0) ++negativeValuesSeen; break; case AtomicTestCase::IncOnly: wxAtomicInc(m_operateOn); break; case AtomicTestCase::DecOnly: wxAtomicDec(m_operateOn); break; } } return wxUIntToPtr(negativeValuesSeen); }
void AtomicTestCase::TestDecReturn() { wxAtomicInt i(0); wxAtomicInc(i); wxAtomicInc(i); CPPUNIT_ASSERT( i == 2 ); CPPUNIT_ASSERT( wxAtomicDec(i) > 0 ); CPPUNIT_ASSERT( wxAtomicDec(i) == 0 ); }
void AtomicTestCase::TestNoThread() { wxAtomicInt int1 = 0, int2 = 0; for ( wxInt32 i = 0; i < ITERATIONS_NUM; ++i ) { wxAtomicInc(int1); wxAtomicDec(int2); } CPPUNIT_ASSERT( int1 == ITERATIONS_NUM ); CPPUNIT_ASSERT( int2 == -ITERATIONS_NUM ); }
FSArchiveHandler::~FSArchiveHandler() { if (!wxAtomicDec(archive->ref)) delete archive; }