Example #1
0
static void test_time_conversion_check_result(uint64_t a, uint64_t b, uint64_t limit, bool is32)
{
	if (a != b) {
		uint64_t diff = is32 ? abs_int32(a - b) : abs_int64(a - b);
		if (diff <= limit)
			LTRACEF("ROUNDED by %llu (up to %llu allowed)\n", diff, limit);
		else
			TRACEF("FAIL, off by %llu\n", diff);
	}
}
Example #2
0
static int test_abs(void)
{
   // TEST abs_int: 0
   TEST(0 == abs_int32(0));
   TEST(0 == abs_int32((int8_t)0));
   TEST(0 == abs_int32((int16_t)0));
   TEST(0 == abs_int32((int32_t)0));
   TEST(0 == abs_int64((int8_t)0));
   TEST(0 == abs_int64((int16_t)0));
   TEST(0 == abs_int64((int32_t)0));
   TEST(0 == abs_int64((int64_t)0));
   TEST(0 == abs_int((int8_t)0));
   TEST(0 == abs_int((int16_t)0));
   TEST(0 == abs_int((int32_t)0));
   TEST(0 == abs_int((int64_t)0));

   // TEST abs_int: INT_MAX
   TEST((uint32_t)INT8_MAX  == abs_int32((int8_t)INT8_MAX));
   TEST((uint32_t)INT16_MAX == abs_int32((int16_t)INT16_MAX));
   TEST((uint32_t)INT32_MAX == abs_int32((int32_t)INT32_MAX));
   TEST((uint64_t)INT8_MAX  == abs_int64((int8_t)INT8_MAX));
   TEST((uint64_t)INT16_MAX == abs_int64((int16_t)INT16_MAX));
   TEST((uint64_t)INT32_MAX == abs_int64((int32_t)INT32_MAX));
   TEST((uint64_t)INT64_MAX == abs_int64((int64_t)INT64_MAX));
   TEST((uint64_t)INT8_MAX  == abs_int((int8_t)INT8_MAX));
   TEST((uint64_t)INT16_MAX == abs_int((int16_t)INT16_MAX));
   TEST((uint64_t)INT32_MAX == abs_int((int32_t)INT32_MAX));
   TEST((uint64_t)INT64_MAX == abs_int((int64_t)INT64_MAX));

   // TEST abs_int: INT_MIN
   TEST(-(uint32_t)INT8_MIN  == abs_int32((int8_t)INT8_MIN));
   TEST(-(uint32_t)INT16_MIN == abs_int32((int16_t)INT16_MIN));
   TEST(-(uint32_t)INT32_MIN == abs_int32((int32_t)INT32_MIN));
   TEST(-(uint64_t)INT8_MIN  == abs_int64((int8_t)INT8_MIN));
   TEST(-(uint64_t)INT16_MIN == abs_int64((int16_t)INT16_MIN));
   TEST(-(uint64_t)INT32_MIN == abs_int64((int32_t)INT32_MIN));
   TEST(-(uint64_t)INT64_MIN == abs_int64((int64_t)INT64_MIN));
   TEST(-(uint64_t)INT8_MIN  == abs_int((int8_t)INT8_MIN));
   TEST(-(uint64_t)INT16_MIN == abs_int((int16_t)INT16_MIN));
   TEST(-(uint64_t)INT32_MIN == abs_int((int32_t)INT32_MIN));
   TEST(-(uint64_t)INT64_MIN == abs_int((int64_t)INT64_MIN));

   //  TEST abs_int: int8_t
   for (uint8_t i = 0; i < INT8_MAX; ++i) {
      TEST(i == abs_int32((int8_t)i));
      TEST(i == abs_int64((int8_t)i));
      TEST(i == abs_int32((int8_t)-(int8_t)i));
      TEST(i == abs_int64((int8_t)-(int8_t)i));
      TEST(i == abs_int((int8_t)i));
      TEST(i == abs_int((int8_t)-(int8_t)i));
   }

   // TEST abs_int: int16_t
   for (uint16_t i = 0; i < INT16_MAX; ++i) {
      TEST(i == abs_int32((int16_t)i));
      TEST(i == abs_int64((int16_t)i));
      TEST(i == abs_int32((int16_t)-(int16_t)i));
      TEST(i == abs_int64((int16_t)-(int16_t)i));
      TEST(i == abs_int((int16_t)i));
      TEST(i == abs_int((int16_t)-(int16_t)i));
   }

   // TEST abs_int: int32_t
   for (uint32_t i = 0; i < INT32_MAX; i += 0x1001) {
      TEST(i == abs_int32((int32_t)i));
      TEST(i == abs_int64((int32_t)i));
      TEST(i == abs_int32((int32_t)-(int32_t)i));
      TEST(i == abs_int64((int32_t)-(int32_t)i));
      TEST(i == abs_int((int32_t)i));
      TEST(i == abs_int((int32_t)-(int32_t)i));
   }

   // TEST abs_int: int64_t
   for (uint64_t i = 0; i < INT64_MAX; i += 0x1001000101001) {
      TEST(i == abs_int64((int64_t)i));
      TEST(i == abs_int64(-(int64_t)i));
      TEST(i == abs_int((int64_t)i));
      TEST(i == abs_int(-(int64_t)i));
   }

   return 0;
ONERR:
   return EINVAL;
}