From f274394f0e8406c85360b1722136d27a7b82e94a Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 27 Feb 2024 20:40:43 +0100 Subject: [PATCH] Simplify formatFileSize No need to use a loop with divisions and multiplications when we have logarithms. --- internal/template/functions.go | 16 ++++++---------- internal/template/functions_test.go | 2 ++ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/internal/template/functions.go b/internal/template/functions.go index 5b4018a1..f8aa2bbd 100644 --- a/internal/template/functions.go +++ b/internal/template/functions.go @@ -36,8 +36,8 @@ func (f *funcMap) Map() template.FuncMap { "hasKey": hasKey, "truncate": truncate, "isEmail": isEmail, - "baseURL": config.Opts.BaseURL, - "rootURL": config.Opts.RootURL, + "baseURL": config.Opts.BaseURL, + "rootURL": config.Opts.RootURL, "hasOAuth2Provider": func(provider string) bool { return config.Opts.OAuth2Provider() == provider }, @@ -71,7 +71,7 @@ func (f *funcMap) Map() template.FuncMap { "mustBeProxyfied": func(mediaType string) bool { return slices.Contains(config.Opts.ProxyMediaTypes(), mediaType) }, - "domain": urllib.Domain, + "domain": urllib.Domain, "hasPrefix": strings.HasPrefix, "contains": strings.Contains, "replace": func(str, old, new string) string { @@ -209,11 +209,7 @@ func formatFileSize(b int64) string { if b < unit { return fmt.Sprintf("%d B", b) } - div, exp := int64(unit), 0 - for n := b / unit; n >= unit; n /= unit { - div *= unit - exp++ - } - return fmt.Sprintf("%.1f %ciB", - float64(b)/float64(div), "KMGTPE"[exp]) + base := math.Log(float64(b)) / math.Log(unit) + number := math.Pow(unit, base-math.Floor(base)) + return fmt.Sprintf("%.1f %ciB", number, "KMGTPE"[int64(base)-1]) } diff --git a/internal/template/functions_test.go b/internal/template/functions_test.go index 360d65ae..ddd18a60 100644 --- a/internal/template/functions_test.go +++ b/internal/template/functions_test.go @@ -156,6 +156,8 @@ func TestFormatFileSize(t *testing.T) { input int64 expected string }{ + {0, "0 B"}, + {1, "1 B"}, {500, "500 B"}, {1024, "1.0 KiB"}, {43520, "42.5 KiB"},