diff mbox

[API-NEXT,v3,5/6] validation: time: add test for odp_time_local_res() and use resolution

Message ID 1450366164-19537-6-git-send-email-ivan.khoronzhuk@linaro.org
State Superseded
Headers show

Commit Message

Ivan Khoronzhuk Dec. 17, 2015, 3:29 p.m. UTC
This function is used to get resolution, test uses it to
check other APIs.

Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
---
 test/validation/time/time.c | 46 ++++++++++++++++++++++++++++++---------------
 test/validation/time/time.h |  1 +
 2 files changed, 32 insertions(+), 15 deletions(-)

Comments

Ivan Khoronzhuk Jan. 6, 2016, 4:20 p.m. UTC | #1
Yep, naming is not ideal, but it follows Posix timer API.
The rate is checked before converting it to "res".
But the "res" is better to round up after, as it's done in "[lng-odp] [PATCH 0/3] correct limits validation"
I want to believe that this test is not hard for implementors and it can be tuned if smth was missed.

On 06.01.16 17:09, Nicolas Morey-Chaisemartin wrote:
> Just realized that resolution is a frequency, not a period. My bad !
>
> Nicolas
>
> On 01/06/2016 04:03 PM, Nicolas Morey-Chaisemartin wrote:
>>
>> On 12/17/2015 04:29 PM, Ivan Khoronzhuk wrote:
>>> This function is used to get resolution, test uses it to
>>> check other APIs.
>>>
>>> Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
>>> ---
>>>   test/validation/time/time.c | 46 ++++++++++++++++++++++++++++++---------------
>>>   test/validation/time/time.h |  1 +
>>>   2 files changed, 32 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/test/validation/time/time.c b/test/validation/time/time.c
>>> index ce6666f..0fe8c5a 100644
>>> --- a/test/validation/time/time.c
>>> +++ b/test/validation/time/time.c
>>> @@ -8,9 +8,12 @@
>>>   #include "odp_cunit_common.h"
>>>   #include "time.h"
>>>
>>> -#define TOLERANCE 1
>>>   #define BUSY_LOOP_CNT		30000000    /* used for t > min resolution */
>>>   #define BUSY_LOOP_CNT_LONG	12000000000 /* used for t > 4 sec */
>>> +#define MIN_TIME_RATE		32000
>>> +#define MAX_TIME_RATE		15000000000
>>> +
>>> +static uint64_t res;
>>>
>>>   void time_test_odp_constants(void)
>>>   {
>>> @@ -22,6 +25,18 @@ void time_test_odp_constants(void)
>>>   	CU_ASSERT(ns == ODP_TIME_USEC_IN_NS);
>>>   }
>>>
>>> +void time_test_res(void)
>>> +{
>>> +	uint64_t rate;
>>> +
>>> +	rate = odp_time_local_res();
>>> +	CU_ASSERT(rate > MIN_TIME_RATE);
>>> +	CU_ASSERT(rate < MAX_TIME_RATE);
>>> +
>>> +	res = ODP_TIME_SEC_IN_NS / rate;
>>> +	res = res ? res : 1;
>>> +}
>>> +
>> Sorry. I'm a bit late on that.
>> Why can't the clock resolution be lower than 32000 ns ?
>> As long as resolution is > 0, and not "huge", shouldn't it be OK ?
>>
>> Nicolas
>> _______________________________________________
>> lng-odp mailing list
>> lng-odp@lists.linaro.org
>> https://lists.linaro.org/mailman/listinfo/lng-odp
>
diff mbox

Patch

diff --git a/test/validation/time/time.c b/test/validation/time/time.c
index ce6666f..0fe8c5a 100644
--- a/test/validation/time/time.c
+++ b/test/validation/time/time.c
@@ -8,9 +8,12 @@ 
 #include "odp_cunit_common.h"
 #include "time.h"
 
-#define TOLERANCE 1
 #define BUSY_LOOP_CNT		30000000    /* used for t > min resolution */
 #define BUSY_LOOP_CNT_LONG	12000000000 /* used for t > 4 sec */
+#define MIN_TIME_RATE		32000
+#define MAX_TIME_RATE		15000000000
+
+static uint64_t res;
 
 void time_test_odp_constants(void)
 {
@@ -22,6 +25,18 @@  void time_test_odp_constants(void)
 	CU_ASSERT(ns == ODP_TIME_USEC_IN_NS);
 }
 
+void time_test_res(void)
+{
+	uint64_t rate;
+
+	rate = odp_time_local_res();
+	CU_ASSERT(rate > MIN_TIME_RATE);
+	CU_ASSERT(rate < MAX_TIME_RATE);
+
+	res = ODP_TIME_SEC_IN_NS / rate;
+	res = res ? res : 1;
+}
+
 /* check that related conversions come back to the same value */
 void time_test_odp_conversion(void)
 {
@@ -36,8 +51,8 @@  void time_test_odp_conversion(void)
 
 	/* need to check within arithmetic tolerance that the same
 	 * value in ns is returned after conversions */
-	upper_limit = ns1 + TOLERANCE;
-	lower_limit = ns1 - TOLERANCE;
+	upper_limit = ns1 + res;
+	lower_limit = ns1 - res;
 	CU_ASSERT((ns2 <= upper_limit) && (ns2 >= lower_limit));
 
 	ns1 = 60 * 11 * ODP_TIME_SEC_IN_NS;
@@ -47,8 +62,8 @@  void time_test_odp_conversion(void)
 
 	/* need to check within arithmetic tolerance that the same
 	 * value in ns is returned after conversions */
-	upper_limit = ns1 + TOLERANCE;
-	lower_limit = ns1 - TOLERANCE;
+	upper_limit = ns1 + res;
+	lower_limit = ns1 - res;
 	CU_ASSERT((ns2 <= upper_limit) && (ns2 >= lower_limit));
 
 	/* test on 0 */
@@ -151,8 +166,8 @@  void time_test_odp_diff(void)
 	ns = ns2 - ns1;
 	nsdiff = odp_time_to_ns(diff);
 
-	upper_limit = ns + TOLERANCE;
-	lower_limit = ns - TOLERANCE;
+	upper_limit = ns + res;
+	lower_limit = ns - res;
 	CU_ASSERT((nsdiff <= upper_limit) && (nsdiff >= lower_limit));
 
 	/* test timestamp and interval diff */
@@ -164,8 +179,8 @@  void time_test_odp_diff(void)
 	CU_ASSERT(odp_time_cmp(diff, ODP_TIME_NULL) > 0);
 	nsdiff = odp_time_to_ns(diff);
 
-	upper_limit = ns + TOLERANCE;
-	lower_limit = ns - TOLERANCE;
+	upper_limit = ns + res;
+	lower_limit = ns - res;
 	CU_ASSERT((nsdiff <= upper_limit) && (nsdiff >= lower_limit));
 
 	/* test interval diff */
@@ -177,8 +192,8 @@  void time_test_odp_diff(void)
 	CU_ASSERT(odp_time_cmp(diff, ODP_TIME_NULL) > 0);
 	nsdiff = odp_time_to_ns(diff);
 
-	upper_limit = ns + TOLERANCE;
-	lower_limit = ns - TOLERANCE;
+	upper_limit = ns + res;
+	lower_limit = ns - res;
 	CU_ASSERT((nsdiff <= upper_limit) && (nsdiff >= lower_limit));
 
 	/* same time has to diff to 0 */
@@ -207,8 +222,8 @@  void time_test_odp_sum(void)
 	CU_ASSERT(odp_time_cmp(sum, ODP_TIME_NULL) > 0);
 	nssum = odp_time_to_ns(sum);
 
-	upper_limit = ns + TOLERANCE;
-	lower_limit = ns - TOLERANCE;
+	upper_limit = ns + res;
+	lower_limit = ns - res;
 	CU_ASSERT((nssum <= upper_limit) && (nssum >= lower_limit));
 
 	/* sum intervals */
@@ -220,8 +235,8 @@  void time_test_odp_sum(void)
 	CU_ASSERT(odp_time_cmp(sum, ODP_TIME_NULL) > 0);
 	nssum = odp_time_to_ns(sum);
 
-	upper_limit = ns + TOLERANCE;
-	lower_limit = ns - TOLERANCE;
+	upper_limit = ns + res;
+	lower_limit = ns - res;
 	CU_ASSERT((nssum <= upper_limit) && (nssum >= lower_limit));
 
 	/* test on 0 */
@@ -256,6 +271,7 @@  void time_test_odp_to_u64(void)
 
 odp_testinfo_t time_suite_time[] = {
 	ODP_TEST_INFO(time_test_odp_constants),
+	ODP_TEST_INFO(time_test_res),
 	ODP_TEST_INFO(time_test_odp_conversion),
 	ODP_TEST_INFO(time_test_monotony),
 	ODP_TEST_INFO(time_test_odp_cmp),
diff --git a/test/validation/time/time.h b/test/validation/time/time.h
index 3407138..cf9495b 100644
--- a/test/validation/time/time.h
+++ b/test/validation/time/time.h
@@ -11,6 +11,7 @@ 
 
 /* test functions: */
 void time_test_odp_constants(void);
+void time_test_res(void);
 void time_test_odp_conversion(void);
 void time_test_monotony(void);
 void time_test_odp_cmp(void);