The odp_cpumask_def_worker() and odp_cpumask_def_control() APIs are used
to populate a mask with the CPUs available for running threads of the
same type. This does not necessarily mean those CPUs are dedicated to
running threads of that type, on a particular platform the same CPU may
appear in both the control and worker set.

The test now verifies that the APIs;

 - populate the mask with at least 1 CPU
 - return a value that matches the number of CPUs set in the mask
 - don't return a value greater than the total available CPUsa
 - don't return a value greater than the requested number of CPUs

Signed-off-by: Stuart Haslam <[email protected]>
---
 test/validation/cpumask/cpumask.c | 44 +++++++++++++++++++++++++++++----------
 1 file changed, 33 insertions(+), 11 deletions(-)

diff --git a/test/validation/cpumask/cpumask.c 
b/test/validation/cpumask/cpumask.c
index 933ee97..d72569e 100644
--- a/test/validation/cpumask/cpumask.c
+++ b/test/validation/cpumask/cpumask.c
@@ -476,39 +476,61 @@ static void cpumask_test_odp_cpumask_setall(void)
 
 static void cpumask_test_odp_cpumask_def_control(void)
 {
-       int num;
-       int max_cpus = mask_capacity();
+       unsigned num;
+       unsigned mask_count;
+       unsigned max_cpus = mask_capacity();
        odp_cpumask_t mask;
 
        num = odp_cpumask_def_control(&mask, ALL_AVAILABLE);
+       mask_count = odp_cpumask_count(&mask);
 
-       CU_ASSERT(num >= 0);
+       CU_ASSERT(mask_count == num);
+       CU_ASSERT(num > 0);
        CU_ASSERT(num <= max_cpus);
 }
 
 static void cpumask_test_odp_cpumask_def_worker(void)
 {
-       int num;
-       int max_cpus = mask_capacity();
+       unsigned num;
+       unsigned mask_count;
+       unsigned max_cpus = mask_capacity();
        odp_cpumask_t mask;
 
        num = odp_cpumask_def_worker(&mask, ALL_AVAILABLE);
+       mask_count = odp_cpumask_count(&mask);
 
-       CU_ASSERT(num >= 0);
+       CU_ASSERT(mask_count == num);
+       CU_ASSERT(num > 0);
        CU_ASSERT(num <= max_cpus);
 }
 
 static void cpumask_test_odp_cpumask_def(void)
 {
-       int num_worker;
-       int num_control;
-       int max_cpus = mask_capacity();
+       unsigned mask_count;
+       unsigned num_worker;
+       unsigned num_control;
+       unsigned max_cpus = mask_capacity();
+       unsigned available_cpus = odp_cpu_count();
+       unsigned requested_cpus;
        odp_cpumask_t mask;
 
-       num_worker = odp_cpumask_def_worker(&mask, max_cpus - 1);
+       CU_ASSERT(available_cpus <= max_cpus);
+
+       if (available_cpus > 1)
+               requested_cpus = available_cpus - 1;
+       else
+               requested_cpus = available_cpus;
+       num_worker = odp_cpumask_def_worker(&mask, requested_cpus);
+       mask_count = odp_cpumask_count(&mask);
+       CU_ASSERT(mask_count == num_worker);
+
        num_control = odp_cpumask_def_control(&mask, 1);
+       mask_count = odp_cpumask_count(&mask);
+       CU_ASSERT(mask_count == num_control);
 
-       CU_ASSERT((num_control + num_worker) <= max_cpus);
+       CU_ASSERT(num_control == 1);
+       CU_ASSERT(num_worker <= available_cpus);
+       CU_ASSERT(num_worker > 0);
 }
 
 static CU_TestInfo cpumask_suite[] = {
-- 
2.1.1

_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to