Bladeren bron

Simplify formatFileSize

No need to use a loop with divisions and multiplications when we have logarithms.
jvoisin 2 jaren geleden
bovenliggende
commit
f274394f0e
2 gewijzigde bestanden met toevoegingen van 8 en 10 verwijderingen
  1. 6 10
      internal/template/functions.go
  2. 2 0
      internal/template/functions_test.go

+ 6 - 10
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])
 }

+ 2 - 0
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"},