summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2024-05-29 18:07:23 +0200
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2024-05-30 11:38:30 +0200
commit11226bf19bb9effcc130dc297a7c7a660ccb75ee (patch)
tree2459bbe9bd21f5e45a26d5eb4737c104c0363b4d
parenttest-format-table: add test for TABLE_BPS formatting (diff)
downloadsystemd-11226bf19bb9effcc130dc297a7c7a660ccb75ee.tar.xz
systemd-11226bf19bb9effcc130dc297a7c7a660ccb75ee.zip
shared/format-table: do not print '.0'
This makes output a bit shorter and nicer. For us, shorter output is generally better. Also, drop unnecessary UINT64_C macros. The left operand is always uint64_t, and C upcasting rules mean that it doesn't matter if the right operand is narrower or signed, the operation is always done on the wider unsigned type.
-rw-r--r--src/basic/format-util.c12
-rw-r--r--src/test/test-format-table.c4
-rw-r--r--src/test/test-format-util.c20
-rwxr-xr-xtest/units/TEST-58-REPART.sh6
4 files changed, 22 insertions, 20 deletions
diff --git a/src/basic/format-util.c b/src/basic/format-util.c
index 056c990cc7..445fecc8ca 100644
--- a/src/basic/format-util.c
+++ b/src/basic/format-util.c
@@ -70,15 +70,17 @@ char *format_bytes_full(char *buf, size_t l, uint64_t t, FormatBytesFlag flag) {
for (size_t i = 0; i < n; i++)
if (t >= table[i].factor) {
- if (flag & FORMAT_BYTES_BELOW_POINT) {
+ uint64_t remainder = i != n - 1 ?
+ (t / table[i + 1].factor * 10 / table[n - 1].factor) % 10 :
+ (t * 10 / table[i].factor) % 10;
+
+ if (FLAGS_SET(flag, FORMAT_BYTES_BELOW_POINT) && remainder > 0)
(void) snprintf(buf, l,
"%" PRIu64 ".%" PRIu64 "%s",
t / table[i].factor,
- i != n - 1 ?
- (t / table[i + 1].factor * UINT64_C(10) / table[n - 1].factor) % UINT64_C(10):
- (t * UINT64_C(10) / table[i].factor) % UINT64_C(10),
+ remainder,
table[i].suffix);
- } else
+ else
(void) snprintf(buf, l,
"%" PRIu64 "%s",
t / table[i].factor,
diff --git a/src/test/test-format-table.c b/src/test/test-format-table.c
index 4425f4097a..3a0efdacc1 100644
--- a/src/test/test-format-table.c
+++ b/src/test/test-format-table.c
@@ -551,7 +551,7 @@ TEST(vertical) {
assert_se(streq(formatted,
" pfft aa: foo\n"
- " uuu o: 1.0K\n"
+ " uuu o: 1K\n"
"lllllllllllo: jjjjjjjjjjjjjjjjj\n"));
_cleanup_(json_variant_unrefp) JsonVariant *a = NULL, *b = NULL;
@@ -653,7 +653,7 @@ TEST(table_bps) {
"UINT64 SIZE BPS\n"
"2500 2.4K 2Kbps\n"
"10000000 9.5M 10Mbps\n"
- "20000000 19.0M 20Mbps\n"
+ "20000000 19M 20Mbps\n"
"25000000 23.8M 25Mbps\n"
"1000000000 953.6M 1Gbps\n"
"2000000000 1.8G 2Gbps\n"
diff --git a/src/test/test-format-util.c b/src/test/test-format-util.c
index 94feb6cafc..8afba4e585 100644
--- a/src/test/test-format-util.c
+++ b/src/test/test-format-util.c
@@ -43,17 +43,17 @@ static void test_format_bytes_one(uint64_t val, bool trailing_B, const char *iec
TEST(format_bytes) {
test_format_bytes_one(900, true, "900B", "900B", "900B", "900B");
test_format_bytes_one(900, false, "900", "900", "900", "900");
- test_format_bytes_one(1023, true, "1023B", "1023B", "1.0K", "1K");
- test_format_bytes_one(1023, false, "1023", "1023", "1.0K", "1K");
- test_format_bytes_one(1024, true, "1.0K", "1K", "1.0K", "1K");
- test_format_bytes_one(1024, false, "1.0K", "1K", "1.0K", "1K");
- test_format_bytes_one(1100, true, "1.0K", "1K", "1.1K", "1K");
+ test_format_bytes_one(1023, true, "1023B", "1023B", "1K", "1K");
+ test_format_bytes_one(1023, false, "1023", "1023", "1K", "1K");
+ test_format_bytes_one(1024, true, "1K", "1K", "1K", "1K");
+ test_format_bytes_one(1024, false, "1K", "1K", "1K", "1K");
+ test_format_bytes_one(1100, true, "1K", "1K", "1.1K", "1K");
test_format_bytes_one(1500, true, "1.4K", "1K", "1.5K", "1K");
- test_format_bytes_one(UINT64_C(3)*1024*1024, true, "3.0M", "3M", "3.1M", "3M");
- test_format_bytes_one(UINT64_C(3)*1024*1024*1024, true, "3.0G", "3G", "3.2G", "3G");
- test_format_bytes_one(UINT64_C(3)*1024*1024*1024*1024, true, "3.0T", "3T", "3.2T", "3T");
- test_format_bytes_one(UINT64_C(3)*1024*1024*1024*1024*1024, true, "3.0P", "3P", "3.3P", "3P");
- test_format_bytes_one(UINT64_C(3)*1024*1024*1024*1024*1024*1024, true, "3.0E", "3E", "3.4E", "3E");
+ test_format_bytes_one(UINT64_C(3)*1024*1024, true, "3M", "3M", "3.1M", "3M");
+ test_format_bytes_one(UINT64_C(3)*1024*1024*1024, true, "3G", "3G", "3.2G", "3G");
+ test_format_bytes_one(UINT64_C(3)*1024*1024*1024*1024, true, "3T", "3T", "3.2T", "3T");
+ test_format_bytes_one(UINT64_C(3)*1024*1024*1024*1024*1024, true, "3P", "3P", "3.3P", "3P");
+ test_format_bytes_one(UINT64_C(3)*1024*1024*1024*1024*1024*1024, true, "3E", "3E", "3.4E", "3E");
test_format_bytes_one(UINT64_MAX, true, NULL, NULL, NULL, NULL);
test_format_bytes_one(UINT64_MAX, false, NULL, NULL, NULL, NULL);
}
diff --git a/test/units/TEST-58-REPART.sh b/test/units/TEST-58-REPART.sh
index 7280352fb9..8a014ac9fb 100755
--- a/test/units/TEST-58-REPART.sh
+++ b/test/units/TEST-58-REPART.sh
@@ -435,7 +435,7 @@ EOF
"offset" : 1048576,
"old_size" : 0,
"raw_size" : 33554432,
- "size" : "-> 32.0M",
+ "size" : "-> 32M",
"old_padding" : 0,
"raw_padding" : 0,
"padding" : "-> 0B",
@@ -496,7 +496,7 @@ EOF
"offset" : 1048576,
"old_size" : 0,
"raw_size" : 33554432,
- "size" : "-> 32.0M",
+ "size" : "-> 32M",
"old_padding" : 0,
"raw_padding" : 0,
"padding" : "-> 0B",
@@ -512,7 +512,7 @@ EOF
"offset" : 34603008,
"old_size" : 0,
"raw_size" : 33554432,
- "size" : "-> 32.0M",
+ "size" : "-> 32M",
"old_padding" : 0,
"raw_padding" : 0,
"padding" : "-> 0B",