void test_atomic_int64 () { // Test and, or, xor all = 42; all &= 15; OIIO_CHECK_EQUAL (all, 10); all |= 6; OIIO_CHECK_EQUAL (all, 14); all ^= 31; OIIO_CHECK_EQUAL (all, 17); all = 42; long long tmp; tmp = all.fetch_and(15); OIIO_CHECK_EQUAL(tmp,42); OIIO_CHECK_EQUAL(all,10); tmp = all.fetch_or ( 6); OIIO_CHECK_EQUAL(tmp,10); OIIO_CHECK_EQUAL(all,14); tmp = all.fetch_xor(31); OIIO_CHECK_EQUAL(tmp,14); OIIO_CHECK_EQUAL(all,17); }
void test_atomic_int64 (int numthreads, int iterations) { all = 0; thread_group threads; for (int i = 0; i < numthreads; ++i) { threads.create_thread (do_int64_math, iterations); } threads.join_all (); OIIO_CHECK_EQUAL (all, 0); // Test and, or, xor all = 42; all &= 15; OIIO_CHECK_EQUAL (all, 10); all |= 6; OIIO_CHECK_EQUAL (all, 14); all ^= 31; OIIO_CHECK_EQUAL (all, 17); all = 42; long long tmp; tmp = all.fetch_and(15); OIIO_CHECK_EQUAL(tmp,42); OIIO_CHECK_EQUAL(all,10); tmp = all.fetch_or ( 6); OIIO_CHECK_EQUAL(tmp,10); OIIO_CHECK_EQUAL(all,14); tmp = all.fetch_xor(31); OIIO_CHECK_EQUAL(tmp,14); OIIO_CHECK_EQUAL(all,17); }