summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-01-10 12:38:16 +0100
committerThomas Haller <thaller@redhat.com>2019-01-13 15:27:42 +0100
commitc4eadee4765517354204085c9465edafa9e3c8d2 (patch)
treecb2ae9983caf3bbe99889b045e3651780835e606
parent11088ac0830bcd1329174c55e7be031d71642df1 (diff)
downloadNetworkManager-th/alloca-cleanup.tar.gz
shared/tests: add test for nm_strdup_int() macroth/alloca-cleanup
-rw-r--r--shared/nm-utils/nm-shared-utils.h2
-rw-r--r--shared/nm-utils/tests/test-shared-general.c49
2 files changed, 51 insertions, 0 deletions
diff --git a/shared/nm-utils/nm-shared-utils.h b/shared/nm-utils/nm-shared-utils.h
index 98d742a81e..ebe654a4aa 100644
--- a/shared/nm-utils/nm-shared-utils.h
+++ b/shared/nm-utils/nm-shared-utils.h
@@ -304,6 +304,8 @@ _nm_strndup_a_step (char *s, const char *str, gsize len)
#if _NM_CC_SUPPORT_GENERIC
#define nm_strdup_int(val) \
_Generic ((val), \
+ char: g_strdup_printf ("%d", (int) (val)), \
+ \
gint8: g_strdup_printf ("%d", (int) (val)), \
gint16: g_strdup_printf ("%d", (int) (val)), \
gint32: g_strdup_printf ("%d", (int) (val)), \
diff --git a/shared/nm-utils/tests/test-shared-general.c b/shared/nm-utils/tests/test-shared-general.c
index b10e2680f8..d7df46dc52 100644
--- a/shared/nm-utils/tests/test-shared-general.c
+++ b/shared/nm-utils/tests/test-shared-general.c
@@ -104,6 +104,54 @@ test_make_strv (void)
/*****************************************************************************/
+typedef enum {
+ TEST_NM_STRDUP_ENUM_m1 = -1,
+ TEST_NM_STRDUP_ENUM_3 = 3,
+} TestNMStrdupIntEnum;
+
+static void
+test_nm_strdup_int (void)
+{
+#define _NM_STRDUP_INT_TEST(num, str) \
+ G_STMT_START { \
+ gs_free char *_s1 = NULL; \
+ \
+ _s1 = nm_strdup_int ((num)); \
+ \
+ g_assert (_s1); \
+ g_assert_cmpstr (_s1, ==, str); \
+ } G_STMT_END
+
+#define _NM_STRDUP_INT_TEST_TYPED(type, num) \
+ G_STMT_START { \
+ type _num = ((type) num); \
+ \
+ _NM_STRDUP_INT_TEST (_num, G_STRINGIFY (num)); \
+ } G_STMT_END
+
+ _NM_STRDUP_INT_TEST_TYPED (char, 0);
+ _NM_STRDUP_INT_TEST_TYPED (char, 1);
+ _NM_STRDUP_INT_TEST_TYPED (guint8, 0);
+ _NM_STRDUP_INT_TEST_TYPED (gint8, 25);
+ _NM_STRDUP_INT_TEST_TYPED (char, 47);
+ _NM_STRDUP_INT_TEST_TYPED (short, 47);
+ _NM_STRDUP_INT_TEST_TYPED (int, 47);
+ _NM_STRDUP_INT_TEST_TYPED (long, 47);
+ _NM_STRDUP_INT_TEST_TYPED (unsigned char, 47);
+ _NM_STRDUP_INT_TEST_TYPED (unsigned short, 47);
+ _NM_STRDUP_INT_TEST_TYPED (unsigned, 47);
+ _NM_STRDUP_INT_TEST_TYPED (unsigned long, 47);
+ _NM_STRDUP_INT_TEST_TYPED (gint64, 9223372036854775807);
+ _NM_STRDUP_INT_TEST_TYPED (gint64, -9223372036854775807);
+ _NM_STRDUP_INT_TEST_TYPED (guint64, 0);
+ _NM_STRDUP_INT_TEST_TYPED (guint64, 9223372036854775807);
+
+ _NM_STRDUP_INT_TEST (TEST_NM_STRDUP_ENUM_m1, "-1");
+ _NM_STRDUP_INT_TEST (TEST_NM_STRDUP_ENUM_3, "3");
+}
+
+/*****************************************************************************/
+
NMTST_DEFINE ();
int main (int argc, char **argv)
@@ -113,6 +161,7 @@ int main (int argc, char **argv)
g_test_add_func ("/general/test_monotonic_timestamp", test_monotonic_timestamp);
g_test_add_func ("/general/test_nmhash", test_nmhash);
g_test_add_func ("/general/test_nm_make_strv", test_make_strv);
+ g_test_add_func ("/general/test_nm_strdup_int", test_nm_strdup_int);
return g_test_run ();
}