cyclonedds/src/ddsrt/tests/strtoll.c
Erik Boasson 7190bb3d3e Pacification of native compiler on OpenIndiana
* constness in ternary expressions
* removal of OS_MAX_INTEGER
* inclusion of dds/ddsrt/attributes.h everywhere DDS_EXPORT inline
  occurs
* _POSIX_PTHREAD_SEMANTICS in ddsperf

Signed-off-by: Erik Boasson <eb@ilities.com>
2019-08-21 14:16:51 +02:00

343 lines
8.2 KiB
C

/*
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
* v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include "CUnit/Test.h"
#include "dds/ddsrt/cdtors.h"
#include "dds/ddsrt/misc.h"
#include "dds/ddsrt/strtol.h"
const char *str;
char *ptr;
char buf[100];
char str_llmin[100];
char str_llmax[100];
char str_ullmax[100];
char str_llrange[100];
char str_ullrange[100];
char str_xllmin[99], str_xllmax[99];
/* Really test with the maximum values supported on a platform, not some
made up number. */
long long llmin = INT64_MIN;
long long llmax = INT64_MAX;
unsigned long long ullmax = UINT64_MAX;
CU_Init(ddsrt_strtoll)
{
ddsrt_init();
(void)snprintf (str_llmin, sizeof(str_llmin), "%lld", llmin);
(void)snprintf (str_llmax, sizeof(str_llmax), "%lld", llmax);
(void)snprintf (str_llrange, sizeof(str_llrange), "%lld1", llmax);
(void)snprintf (str_ullmax, sizeof(str_ullmax), "%llu", ullmax);
(void)snprintf (str_ullrange, sizeof(str_ullrange), "%llu1", ullmax);
(void)snprintf (str_xllmin, sizeof(str_xllmin), "-%llx", llmin);
(void)snprintf (str_xllmax, sizeof(str_xllmax), "+%llx", llmax);
return 0;
}
CU_Clean(ddstr_strtoll)
{
ddsrt_fini();
return 0;
}
CU_Test(ddsrt_strtoll, strtoll)
{
dds_return_t rc;
long long ll;
static char dummy[] = "dummy";
str = "gibberish";
ll = -1;
rc = ddsrt_strtoll(str, &ptr, 0, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0 && ptr == str);
str = "+gibberish";
ll = -2;
rc = ddsrt_strtoll(str, &ptr, 0, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0 && ptr == str);
str = "-gibberish";
ll = -3;
rc = ddsrt_strtoll(str, &ptr, 0, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0 && ptr == str);
str = "gibberish";
ptr = NULL;
ll = -4;
rc = ddsrt_strtoll(str, &ptr, 36, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 46572948005345 && ptr && *ptr == '\0');
str = "1050505055";
ptr = dummy;
ll = -5;
rc = ddsrt_strtoll(str, &ptr, 37, &ll);
CU_ASSERT (rc == DDS_RETCODE_BAD_PARAMETER);
CU_ASSERT (ll == -5 && ptr == dummy);
str = " \t \n 1050505055";
ll = -6;
rc = ddsrt_strtoll(str, NULL, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 1050505055LL);
str = " \t \n -1050505055";
ptr = NULL;
ll = -7;
rc = ddsrt_strtoll(str, &ptr, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == -1050505055LL);
str = " \t \n - \t \n 1050505055";
ptr = NULL;
ll = -8;
rc = ddsrt_strtoll(str, &ptr, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0LL && ptr == str);
str = "10x";
ptr = NULL;
ll = -9;
rc = ddsrt_strtoll(str, &ptr, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 10LL && ptr && *ptr == 'x');
str = "+10x";
ll = -10;
rc = ddsrt_strtoll(str, &ptr, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 10LL && ptr && *ptr == 'x');
str = "-10x";
ll = -11;
rc = ddsrt_strtoll(str, &ptr, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == -10LL && ptr && *ptr == 'x');
str = (const char *)str_llmax;
ll = -12;
rc = ddsrt_strtoll(str, NULL, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == llmax);
str = (const char *)str_llmin;
ll = -13;
rc = ddsrt_strtoll(str, NULL, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == llmin);
str = (const char *)str_llrange;
ll = -14;
rc = ddsrt_strtoll(str, &ptr, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OUT_OF_RANGE);
CU_ASSERT (ll == llmax && *ptr == '1');
str = "0x100";
ll = -15;
rc = ddsrt_strtoll(str, NULL, 16, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0x100LL);
str = "0X100";
ll = -16;
rc = ddsrt_strtoll(str, NULL, 16, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0x100LL);
str = "0x1DEFCAB";
ll = -17;
rc = ddsrt_strtoll(str, NULL, 16, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0x1DEFCABLL);
str = "0x1defcab";
ll = -18;
rc = ddsrt_strtoll(str, NULL, 16, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0x1DEFCABLL);
str = (char *)str_xllmin;
ll = -19;
rc = ddsrt_strtoll(str, NULL, 16, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == llmin);
str = (char *)str_xllmax;
ll = -20;
rc = ddsrt_strtoll(str, NULL, 16, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == llmax);
str = "0x100";
ll = -21;
rc = ddsrt_strtoll(str, NULL, 0, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0x100LL);
str = "100";
ll = -22;
rc = ddsrt_strtoll(str, NULL, 16, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0x100LL);
/* calling os_strtoll with \"%s\" and base 10, expected result 0 */
str = "0x100";
ll = -23;
rc = ddsrt_strtoll(str, &ptr, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 0 && ptr && *ptr == 'x');
/* calling os_strtoll with \"%s\" and base 0, expected result 256 */
str = "0x100g";
ll = -24;
rc = ddsrt_strtoll(str, &ptr, 0, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 256 && ptr && *ptr == 'g');
str = "0100";
ll = -25;
rc = ddsrt_strtoll(str, NULL, 0, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 64LL);
str = "0100";
ll = -26;
rc = ddsrt_strtoll(str, NULL, 8, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 64LL);
str = "100";
ll = -27;
rc = ddsrt_strtoll(str, NULL, 8, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 64LL);
/* calling os_strtoll with \"%s\" and base 10, expected result 100 */
str = "0100";
ll = -28;
rc = ddsrt_strtoll(str, &ptr, 10, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 100);
/* calling os_strtoll with \"%s\" and base 0, expected result 64 */
str = "01008";
ll = -29;
rc = ddsrt_strtoll(str, &ptr, 8, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 64LL && ptr && *ptr == '8');
str = "00001010";
ll = -30;
rc = ddsrt_strtoll(str, NULL, 2, &ll);
CU_ASSERT (rc == DDS_RETCODE_OK);
CU_ASSERT (ll == 10LL);
}
CU_Test(ddsrt_strtoll, strtoull)
{
dds_return_t rc;
unsigned long long ull;
str = "0xffffffffffffffff";
ull = 1;
rc = ddsrt_strtoull(str, NULL, 0, &ull);
CU_ASSERT_EQUAL(rc, DDS_RETCODE_OK);
CU_ASSERT(ull == ullmax);
str = "-1";
ull = 2;
rc = ddsrt_strtoull(str, NULL, 0, &ull);
CU_ASSERT_EQUAL(rc, DDS_RETCODE_OK);
CU_ASSERT(ull == ullmax);
str = "-2";
ull = 3;
rc = ddsrt_strtoull(str, NULL, 0, &ull);
CU_ASSERT_EQUAL(rc, DDS_RETCODE_OK);
CU_ASSERT(ull == (ullmax - 1));
}
CU_Test(ddsrt_strtoll, atoll)
{
dds_return_t rc;
long long ll;
str = "10";
ll = -1;
rc = ddsrt_atoll(str, &ll);
CU_ASSERT_EQUAL(rc, DDS_RETCODE_OK);
CU_ASSERT(ll == 10);
}
CU_Test(ddsrt_strtoll, atoull)
{
dds_return_t rc;
unsigned long long ull;
str = "10";
ull = 1;
rc = ddsrt_atoull(str, &ull);
CU_ASSERT_EQUAL(rc, DDS_RETCODE_OK);
CU_ASSERT(ull == 10);
}
CU_Test(ddsrt_strtoll, lltostr)
{
long long ll;
ll = llmax;
ptr = ddsrt_lltostr(ll, buf, 0, NULL);
CU_ASSERT(ptr == NULL);
/* calling os_lltostr with %lld with buffer size of 5, expected result \"5432\" */
ll = 54321;
ptr = ddsrt_lltostr(ll, buf, 5, NULL);
CU_ASSERT(strcmp(ptr, "5432") == 0);
ll = llmax;
ptr = ddsrt_lltostr(ll, buf, sizeof(buf), NULL);
CU_ASSERT(strcmp(ptr, str_llmax) == 0);
ll = llmin;
ptr = ddsrt_lltostr(ll, buf, sizeof(buf), NULL);
CU_ASSERT(strcmp(ptr, str_llmin) == 0);
ll = 1;
ptr = ddsrt_lltostr(ll, buf, sizeof(buf), NULL);
CU_ASSERT(strcmp(ptr, "1") == 0);
ll = 0;
ptr = ddsrt_lltostr(ll, buf, sizeof(buf), NULL);
CU_ASSERT(strcmp(ptr, "0") == 0);
ll = -1;
ptr = ddsrt_lltostr(ll, buf, sizeof(buf), NULL);
CU_ASSERT(strcmp(ptr, "-1") == 0);
}
CU_Test(ddsrt_strtoll, ulltostr)
{
unsigned long long ull;
ull = ullmax;
ptr = ddsrt_ulltostr(ull, buf, sizeof(buf), NULL);
CU_ASSERT(strcmp(ptr, str_ullmax) == 0);
ull = 0ULL;
ptr = ddsrt_ulltostr(ull, buf, sizeof(buf), NULL);
CU_ASSERT(strcmp(ptr, "0") == 0);
}