82 static intT
array [2];
92#ifndef _RWSTD_REENTRANT
98 return _RW::__rw_atomic_preincrement (
x,
false);
107#ifndef _RWSTD_REENTRANT
113 return _RW::__rw_atomic_predecrement (
x,
false);
124 printf (
"thread %u starting to %screment\n",
126 args->
inc_ < 0 ?
"de"
127 : args->
inc_ > 0 ?
"in"
128 :
"decrement and in");
130 if (args->
inc_ > 0) {
134 for (
unsigned i = 0;
i != args->
nincr_; ++
i) {
139 else if (args->
inc_ < 0) {
143 for (
unsigned i = 0;
i != args->
nincr_; ++
i) {
152 for (
unsigned i = 0;
i != args->
nincr_; ++
i) {
193#ifdef _RWSTD_LONG_LONG
212#define MAX_THREADS 32
221 rw_note (0, 0, 0,
"%s test disabled", tname);
225#if defined (_RWSTD_REENTRANT)
227 static const char*
const fun =
228 inc < 0 ?
"__rw_atomic_predecrement"
229 : inc > 0 ?
":__rw_atomic_preincrement"
230 :
"__rw_atomic_pre{in,de}crement";
232 rw_info (0, 0, 0,
"__rw::%s (%s&): %d iterations in %d threads",
240 Args::type_tag_ =
tag;
243 Args::shared_ [0] = intT ();
244 Args::shared_ [1] = intT ();
248 Args args [
sizeof tid /
sizeof *tid];
250 memset (args, 0,
sizeof args);
252 for (
unsigned i = 0;
i != Args::nthreads_; ++
i) {
254 args [
i].threadno_ =
i;
257 0, __LINE__,
"thread_create() failed");
260 for (
unsigned i = 0;
i != Args::nthreads_; ++
i) {
263 "thread_join() failed");
267 intT expect = intT ();
270 for (
unsigned i = 0;
i != Args::nthreads_ * Args::nincr_; ++
i)
274 for (
unsigned i = 0;
i != Args::nthreads_ * Args::nincr_; ++
i)
281 rw_assert (Args::shared_ [0] == expect, 0, __LINE__,
282 "1. %s (%s&); %s == %s failed",
285 rw_assert (Args::shared_ [1] == expect, 0, __LINE__,
286 "2. %s (%s&); %s == %s failed",
316#ifdef _RWSTD_LONG_LONG
337#ifdef _RWSTD_LONG_LONG
359#ifdef _RWSTD_LONG_LONG
371int main (
int argc,
char *argv[])
373 return rw_test (argc, argv, __FILE__,
IMPORT_C SInt32 printf(const Char *,...)
#define _RWSTD_UNUSED(arg)
#define _RWSTD_ASSERT(ignore)
void run_test(intT, thr_args_base::tag_t tag, int inc)
void * thread_routine(thr_args< intT > *args)
const char * type_name() const
_TEST_EXPORT int rw_enabled(const char *name)
_TEST_EXPORT int rw_test(int argc, char *argv[], const char *filename, const char *clause, const char *comment, int(*testfun)(int, char **), const char *optspec,...)
_TEST_EXPORT int rw_info(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_fatal(int expr, const char *filename, int line, const char *fmtspec,...)
_TEST_EXPORT int rw_note(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_assert(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_error(int, const char *, int, const char *,...)
_TEST_EXPORT int rw_thread_create(rw_thread_t *, rw_thread_attr_t *, rw_thread_proc *, void *)
_TEST_EXPORT int rw_thread_join(rw_thread_t, void **)
static enum thr_args_base::tag_t type_tag_
static intT * get_array()
static unsigned nthreads_