diff --git a/format/byte_test.go b/format/byte_test.go new file mode 100644 index 000000000..5881af45c --- /dev/null +++ b/format/byte_test.go @@ -0,0 +1,91 @@ +package format + +import ( + "testing" +) + +func TestHumanBytes(t *testing.T) { + type testCase struct { + input int64 + expected string + } + + tests := []testCase{ + // Test bytes (B) + {0, "0 B"}, + {1, "1 B"}, + {999, "999 B"}, + + // Test kilobytes (KB) + {1000, "1 KB"}, + {1500, "1.5 KB"}, + {999999, "999 KB"}, + + // Test megabytes (MB) + {1000000, "1 MB"}, + {1500000, "1.5 MB"}, + {999999999, "999 MB"}, + + // Test gigabytes (GB) + {1000000000, "1 GB"}, + {1500000000, "1.5 GB"}, + {999999999999, "999 GB"}, + + // Test terabytes (TB) + {1000000000000, "1 TB"}, + {1500000000000, "1.5 TB"}, + {1999999999999, "2.0 TB"}, + + // Test fractional values + {1234, "1.2 KB"}, + {1234567, "1.2 MB"}, + {1234567890, "1.2 GB"}, + } + + for _, tc := range tests { + t.Run(tc.expected, func(t *testing.T) { + result := HumanBytes(tc.input) + if result != tc.expected { + t.Errorf("Expected %s, got %s", tc.expected, result) + } + }) + } +} + +func TestHumanBytes2(t *testing.T) { + type testCase struct { + input uint64 + expected string + } + + tests := []testCase{ + // Test bytes (B) + {0, "0 B"}, + {1, "1 B"}, + {1023, "1023 B"}, + + // Test kibibytes (KiB) + {1024, "1.0 KiB"}, + {1536, "1.5 KiB"}, + {1048575, "1024.0 KiB"}, + + // Test mebibytes (MiB) + {1048576, "1.0 MiB"}, + {1572864, "1.5 MiB"}, + {1073741823, "1024.0 MiB"}, + + // Test gibibytes (GiB) + {1073741824, "1.0 GiB"}, + {1610612736, "1.5 GiB"}, + {2147483648, "2.0 GiB"}, + } + + for _, tc := range tests { + t.Run(tc.expected, func(t *testing.T) { + result := HumanBytes2(tc.input) + if result != tc.expected { + t.Errorf("Expected %s, got %s", tc.expected, result) + } + }) + } +} diff --git a/format/bytes.go b/format/bytes.go index 13d8575e9..a24231df2 100644 --- a/format/bytes.go +++ b/format/bytes.go @@ -40,8 +40,6 @@ func HumanBytes(b int64) string { } switch { - case value >= 100: - return fmt.Sprintf("%d %s", int(value), unit) case value >= 10: return fmt.Sprintf("%d %s", int(value), unit) case value != math.Trunc(value):