On 2015-07-21 14:32, Stuart Haslam wrote: > Add tests for odp_thrmask_worker() and odp_thrmask_control() > > Signed-off-by: Stuart Haslam <[email protected]>
Reviewed-by: Christophe Milard <[email protected]> > --- > test/validation/thread/thread.c | 70 > +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 70 insertions(+) > > diff --git a/test/validation/thread/thread.c b/test/validation/thread/thread.c > index d8ea8b0..6fbdaef 100644 > --- a/test/validation/thread/thread.c > +++ b/test/validation/thread/thread.c > @@ -7,11 +7,16 @@ > #include <odp.h> > #include <odp_cunit_common.h> > #include <mask_common.h> > +#include <test_debug.h> > #include "thread.h" > > /* Helper macro for CU_TestInfo initialization */ > #define _CU_TEST_INFO(test_func) {#test_func, test_func} > > +/* Test thread entry and exit synchronization barriers */ > +odp_barrier_t bar_entry; > +odp_barrier_t bar_exit; > + > static void thread_test_odp_cpu_id(void) > { > (void)odp_cpu_id(); > @@ -30,6 +35,69 @@ static void thread_test_odp_thread_count(void) > CU_PASS(); > } > > +static void *thread_func(void *arg TEST_UNUSED) > +{ > + /* indicate that thread has started */ > + odp_barrier_wait(&bar_entry); > + > + CU_ASSERT(odp_thread_type() == ODP_THREAD_WORKER); > + > + /* wait for indication that we can exit */ > + odp_barrier_wait(&bar_exit); > + > + return NULL; > +} > + > +static void thread_test_odp_thrmask_worker(void) > +{ > + odp_thrmask_t mask; > + int ret; > + pthrd_arg args = { .testcase = 0, .numthrds = 1 }; > + > + CU_ASSERT_FATAL(odp_thread_type() == ODP_THREAD_CONTROL); > + > + odp_barrier_init(&bar_entry, args.numthrds + 1); > + odp_barrier_init(&bar_exit, args.numthrds + 1); > + > + /* should start out with 0 worker threads */ > + ret = odp_thrmask_worker(&mask); > + CU_ASSERT(ret == odp_thrmask_count(&mask)); > + CU_ASSERT(ret == 0); > + > + /* start the test thread(s) */ > + ret = odp_cunit_thread_create(thread_func, &args); > + CU_ASSERT(ret == args.numthrds); > + > + if (ret != args.numthrds) > + return; > + > + /* wait for thread(s) to start */ > + odp_barrier_wait(&bar_entry); > + > + ret = odp_thrmask_worker(&mask); > + CU_ASSERT(ret == odp_thrmask_count(&mask)); > + CU_ASSERT(ret == args.numthrds); > + CU_ASSERT(ret <= ODP_CONFIG_MAX_THREADS); > + > + /* allow thread(s) to exit */ > + odp_barrier_wait(&bar_exit); > + > + odp_cunit_thread_exit(&args); > +} > + > +static void thread_test_odp_thrmask_control(void) > +{ > + odp_thrmask_t mask; > + int ret; > + > + CU_ASSERT(odp_thread_type() == ODP_THREAD_CONTROL); > + > + /* should start out with 1 worker thread */ > + ret = odp_thrmask_control(&mask); > + CU_ASSERT(ret == odp_thrmask_count(&mask)); > + CU_ASSERT(ret == 1); > +} > + > static CU_TestInfo thread_suite[] = { > _CU_TEST_INFO(thread_test_odp_cpu_id), > _CU_TEST_INFO(thread_test_odp_thread_id), > @@ -48,6 +116,8 @@ static CU_TestInfo thread_suite[] = { > _CU_TEST_INFO(thread_test_odp_thrmask_first), > _CU_TEST_INFO(thread_test_odp_thrmask_last), > _CU_TEST_INFO(thread_test_odp_thrmask_next), > + _CU_TEST_INFO(thread_test_odp_thrmask_worker), > + _CU_TEST_INFO(thread_test_odp_thrmask_control), > CU_TEST_INFO_NULL, > }; > > -- > 2.1.1 > > _______________________________________________ > lng-odp mailing list > [email protected] > https://lists.linaro.org/mailman/listinfo/lng-odp _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
