]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-format-table: add smoke test for int/uint formatting
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 3 Dec 2024 08:59:10 +0000 (09:59 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 3 Dec 2024 14:00:26 +0000 (15:00 +0100)
When looking at coverage data, I noticed that some types of ints have no
coverage whatsoever.

src/test/test-format-table.c

index a9c41da511c74efb36e5779cc6e8e99970467d86..1660b83c31de49cacfef5aa14938c7acf7a2dc96 100644 (file)
@@ -578,6 +578,131 @@ TEST(table) {
                              "5min              5min              \n");
 }
 
+TEST(signed_integers) {
+        _cleanup_(table_unrefp) Table *t = NULL;
+        _cleanup_free_ char *formatted = NULL;
+
+        ASSERT_NOT_NULL(t = table_new("int", "int8", "int16", "int32", "int64"));
+        table_set_width(t, 0);
+
+        ASSERT_OK(table_add_many(t,
+                                 TABLE_INT, -1,
+                                 TABLE_INT8, INT8_C(-1),
+                                 TABLE_INT16, INT16_C(-1),
+                                 TABLE_INT32, INT32_C(-1),
+                                 TABLE_INT64, INT64_C(-1)));
+        ASSERT_OK(table_add_many(t,
+                                 TABLE_INT, INT_MAX,
+                                 TABLE_INT8, INT8_MAX,
+                                 TABLE_INT16, INT16_MAX,
+                                 TABLE_INT32, INT32_MAX,
+                                 TABLE_INT64, INT64_MAX));
+        ASSERT_OK(table_add_many(t,
+                                 TABLE_INT, INT_MIN,
+                                 TABLE_INT8, INT8_MIN,
+                                 TABLE_INT16, INT16_MIN,
+                                 TABLE_INT32, INT32_MIN,
+                                 TABLE_INT64, INT64_MIN));
+
+        ASSERT_OK(table_format(t, &formatted));
+        printf("%s\n", formatted);
+
+        ASSERT_STREQ(formatted,
+                     "INT         INT8 INT16  INT32       INT64\n"
+                     "-1          -1   -1     -1          -1\n"
+                     "2147483647  127  32767  2147483647  9223372036854775807\n"
+                     "-2147483648 -128 -32768 -2147483648 -9223372036854775808\n");
+
+        _cleanup_(sd_json_variant_unrefp) sd_json_variant *a = NULL, *b = NULL;
+        ASSERT_OK(table_to_json(t, &a));
+
+        table_print_json(t, /*f=*/ NULL, SD_JSON_FORMAT_NEWLINE);
+
+        ASSERT_OK(sd_json_build(&b,
+                                SD_JSON_BUILD_ARRAY(
+                                  SD_JSON_BUILD_OBJECT(
+                                    SD_JSON_BUILD_PAIR("int", SD_JSON_BUILD_INTEGER(-1)),
+                                    SD_JSON_BUILD_PAIR("int8", SD_JSON_BUILD_INTEGER(-1)),
+                                    SD_JSON_BUILD_PAIR("int16", SD_JSON_BUILD_INTEGER(-1)),
+                                    SD_JSON_BUILD_PAIR("int32", SD_JSON_BUILD_INTEGER(-1)),
+                                    SD_JSON_BUILD_PAIR("int64", SD_JSON_BUILD_INTEGER(-1))),
+                                  SD_JSON_BUILD_OBJECT(
+                                    SD_JSON_BUILD_PAIR("int", SD_JSON_BUILD_INTEGER(INT_MAX)),
+                                    SD_JSON_BUILD_PAIR("int8", SD_JSON_BUILD_INTEGER(INT8_MAX)),
+                                    SD_JSON_BUILD_PAIR("int16", SD_JSON_BUILD_INTEGER(INT16_MAX)),
+                                    SD_JSON_BUILD_PAIR("int32", SD_JSON_BUILD_INTEGER(INT32_MAX)),
+                                    SD_JSON_BUILD_PAIR("int64", SD_JSON_BUILD_INTEGER(INT64_MAX))),
+                                  SD_JSON_BUILD_OBJECT(
+                                    SD_JSON_BUILD_PAIR("int", SD_JSON_BUILD_INTEGER(INT_MIN)),
+                                    SD_JSON_BUILD_PAIR("int8", SD_JSON_BUILD_INTEGER(INT8_MIN)),
+                                    SD_JSON_BUILD_PAIR("int16", SD_JSON_BUILD_INTEGER(INT16_MIN)),
+                                    SD_JSON_BUILD_PAIR("int32", SD_JSON_BUILD_INTEGER(INT32_MIN)),
+                                    SD_JSON_BUILD_PAIR("int64", SD_JSON_BUILD_INTEGER(INT64_MIN))))));
+        sd_json_variant_dump(b, SD_JSON_FORMAT_NEWLINE, stdout, NULL);
+
+        ASSERT_TRUE(sd_json_variant_equal(a, b));
+}
+
+TEST(unsigned_integers) {
+        _cleanup_(table_unrefp) Table *t = NULL;
+        _cleanup_free_ char *formatted = NULL;
+
+        ASSERT_NOT_NULL(t = table_new("uint", "uint8", "uint16", "uint32", "uhex32", "uint64", "uhex64"));
+        table_set_width(t, 0);
+
+        ASSERT_OK(table_add_many(t,
+                                 TABLE_UINT, 0,
+                                 TABLE_UINT8, UINT8_C(0),
+                                 TABLE_UINT16, UINT16_C(0),
+                                 TABLE_UINT32, UINT32_C(0),
+                                 TABLE_UINT32_HEX, UINT32_C(0),
+                                 TABLE_UINT64, UINT64_C(0),
+                                 TABLE_UINT64_HEX, UINT64_C(0)));
+        ASSERT_OK(table_add_many(t,
+                                 TABLE_UINT, UINT_MAX,
+                                 TABLE_UINT8, UINT8_MAX,
+                                 TABLE_UINT16, UINT16_MAX,
+                                 TABLE_UINT32, UINT32_MAX,
+                                 TABLE_UINT32_HEX, UINT32_MAX,
+                                 TABLE_UINT64, UINT64_MAX,
+                                 TABLE_UINT64_HEX, UINT64_MAX));
+
+        ASSERT_OK(table_format(t, &formatted));
+        printf("%s\n", formatted);
+
+        ASSERT_STREQ(formatted,
+                     "UINT       UINT8 UINT16 UINT32     UHEX32   UINT64               UHEX64\n"
+                     "0          0     0      0          0        0                    0\n"
+                     "4294967295 255   65535  4294967295 ffffffff 18446744073709551615 ffffffffffffffff\n");
+
+        _cleanup_(sd_json_variant_unrefp) sd_json_variant *a = NULL, *b = NULL;
+        ASSERT_OK(table_to_json(t, &a));
+
+        table_print_json(t, /*f=*/ NULL, SD_JSON_FORMAT_NEWLINE);
+
+        ASSERT_OK(sd_json_build(&b,
+                                SD_JSON_BUILD_ARRAY(
+                                  SD_JSON_BUILD_OBJECT(
+                                    SD_JSON_BUILD_PAIR("uint", SD_JSON_BUILD_UNSIGNED(0)),
+                                    SD_JSON_BUILD_PAIR("uint8", SD_JSON_BUILD_UNSIGNED(0)),
+                                    SD_JSON_BUILD_PAIR("uint16", SD_JSON_BUILD_UNSIGNED(0)),
+                                    SD_JSON_BUILD_PAIR("uint32", SD_JSON_BUILD_UNSIGNED(0)),
+                                    SD_JSON_BUILD_PAIR("uhex32", SD_JSON_BUILD_UNSIGNED(0)),
+                                    SD_JSON_BUILD_PAIR("uint64", SD_JSON_BUILD_UNSIGNED(0)),
+                                    SD_JSON_BUILD_PAIR("uhex64", SD_JSON_BUILD_UNSIGNED(0))),
+                                  SD_JSON_BUILD_OBJECT(
+                                    SD_JSON_BUILD_PAIR("uint", SD_JSON_BUILD_UNSIGNED(UINT_MAX)),
+                                    SD_JSON_BUILD_PAIR("uint8", SD_JSON_BUILD_UNSIGNED(UINT8_MAX)),
+                                    SD_JSON_BUILD_PAIR("uint16", SD_JSON_BUILD_UNSIGNED(UINT16_MAX)),
+                                    SD_JSON_BUILD_PAIR("uint32", SD_JSON_BUILD_UNSIGNED(UINT32_MAX)),
+                                    SD_JSON_BUILD_PAIR("uhex32", SD_JSON_BUILD_UNSIGNED(UINT32_MAX)),
+                                    SD_JSON_BUILD_PAIR("uint64", SD_JSON_BUILD_UNSIGNED(UINT64_MAX)),
+                                    SD_JSON_BUILD_PAIR("uhex64", SD_JSON_BUILD_UNSIGNED(UINT64_MAX))))));
+        sd_json_variant_dump(b, SD_JSON_FORMAT_NEWLINE, stdout, NULL);
+
+        ASSERT_TRUE(sd_json_variant_equal(a, b));
+}
+
 TEST(vertical) {
         _cleanup_(table_unrefp) Table *t = NULL;
         _cleanup_free_ char *formatted = NULL;