1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2
3 #include "format-util.h"
4 #include "macro.h"
5 #include "string-util.h"
6 #include "tests.h"
7
8 /* Do some basic checks on STRLEN() and DECIMAL_STR_MAX() */
9 assert_cc(STRLEN("xxx") == 3);
10 assert_cc(STRLEN("") == 0);
11 assert_cc(STRLEN(L"xxx") == 3 * sizeof(wchar_t));
12 assert_cc(STRLEN(L"") == 0);
13 assert_cc(DECIMAL_STR_MAX(uint8_t) == STRLEN("255")+1);
14 assert_cc(DECIMAL_STR_MAX(int8_t) == STRLEN("-127")+1);
15 assert_cc(DECIMAL_STR_MAX(uint64_t) == STRLEN("18446744073709551615")+1);
16 assert_cc(DECIMAL_STR_MAX(int64_t) == CONST_MAX(STRLEN("-9223372036854775808"), STRLEN("9223372036854775807"))+1);
17 assert_cc(DECIMAL_STR_MAX(signed char) == STRLEN("-127")+1);
18 assert_cc(DECIMAL_STR_MAX(unsigned char) == STRLEN("255")+1);
19 assert_cc(CONST_MAX(DECIMAL_STR_MAX(int8_t), STRLEN("xxx")) == 5);
20
test_format_bytes_one(uint64_t val,bool trailing_B,const char * iec_with_p,const char * iec_without_p,const char * si_with_p,const char * si_without_p)21 static void test_format_bytes_one(uint64_t val, bool trailing_B, const char *iec_with_p, const char *iec_without_p,
22 const char *si_with_p, const char *si_without_p) {
23 char buf[FORMAT_BYTES_MAX];
24
25 assert_se(streq_ptr(format_bytes_full(buf, sizeof buf, val, FORMAT_BYTES_USE_IEC | FORMAT_BYTES_BELOW_POINT | (trailing_B ? FORMAT_BYTES_TRAILING_B : 0)), iec_with_p));
26 assert_se(streq_ptr(format_bytes_full(buf, sizeof buf, val, FORMAT_BYTES_USE_IEC | (trailing_B ? FORMAT_BYTES_TRAILING_B : 0)), iec_without_p));
27 assert_se(streq_ptr(format_bytes_full(buf, sizeof buf, val, FORMAT_BYTES_BELOW_POINT | (trailing_B ? FORMAT_BYTES_TRAILING_B : 0)), si_with_p));
28 assert_se(streq_ptr(format_bytes_full(buf, sizeof buf, val, trailing_B ? FORMAT_BYTES_TRAILING_B : 0), si_without_p));
29 }
30
TEST(format_bytes)31 TEST(format_bytes) {
32 test_format_bytes_one(900, true, "900B", "900B", "900B", "900B");
33 test_format_bytes_one(900, false, "900", "900", "900", "900");
34 test_format_bytes_one(1023, true, "1023B", "1023B", "1.0K", "1K");
35 test_format_bytes_one(1023, false, "1023", "1023", "1.0K", "1K");
36 test_format_bytes_one(1024, true, "1.0K", "1K", "1.0K", "1K");
37 test_format_bytes_one(1024, false, "1.0K", "1K", "1.0K", "1K");
38 test_format_bytes_one(1100, true, "1.0K", "1K", "1.1K", "1K");
39 test_format_bytes_one(1500, true, "1.4K", "1K", "1.5K", "1K");
40 test_format_bytes_one(UINT64_C(3)*1024*1024, true, "3.0M", "3M", "3.1M", "3M");
41 test_format_bytes_one(UINT64_C(3)*1024*1024*1024, true, "3.0G", "3G", "3.2G", "3G");
42 test_format_bytes_one(UINT64_C(3)*1024*1024*1024*1024, true, "3.0T", "3T", "3.2T", "3T");
43 test_format_bytes_one(UINT64_C(3)*1024*1024*1024*1024*1024, true, "3.0P", "3P", "3.3P", "3P");
44 test_format_bytes_one(UINT64_C(3)*1024*1024*1024*1024*1024*1024, true, "3.0E", "3E", "3.4E", "3E");
45 test_format_bytes_one(UINT64_MAX, true, NULL, NULL, NULL, NULL);
46 test_format_bytes_one(UINT64_MAX, false, NULL, NULL, NULL, NULL);
47 }
48
49 DEFINE_TEST_MAIN(LOG_INFO);
50