Skip to content

Commit

Permalink
Better human duration precision
Browse files Browse the repository at this point in the history
Signed-off-by: Fabiano Franz <ffranz@redhat.com>
  • Loading branch information
fabianofranz committed Nov 22, 2016
1 parent 8a7beac commit 57ccf25
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
4 changes: 2 additions & 2 deletions duration.go
Expand Up @@ -18,9 +18,9 @@ func HumanDuration(d time.Duration) string {
return fmt.Sprintf("%d seconds", seconds)
} else if minutes := int(d.Minutes()); minutes == 1 {
return "About a minute"
} else if minutes < 60 {
} else if minutes < 46 {
return fmt.Sprintf("%d minutes", minutes)
} else if hours := int(d.Hours()); hours == 1 {
} else if hours := int(d.Hours() + 0.5); hours == 1 {
return "About an hour"
} else if hours < 48 {
return fmt.Sprintf("%d hours", hours)
Expand Down
20 changes: 16 additions & 4 deletions duration_test.go
Expand Up @@ -49,15 +49,26 @@ func TestHumanDuration(t *testing.T) {

assertEquals(t, "Less than a second", HumanDuration(450*time.Millisecond))
assertEquals(t, "1 second", HumanDuration(1*time.Second))
assertEquals(t, "47 seconds", HumanDuration(47*time.Second))
assertEquals(t, "45 seconds", HumanDuration(45*time.Second))
assertEquals(t, "46 seconds", HumanDuration(46*time.Second))
assertEquals(t, "59 seconds", HumanDuration(59*time.Second))
assertEquals(t, "About a minute", HumanDuration(60*time.Second))
assertEquals(t, "About a minute", HumanDuration(1*time.Minute))
assertEquals(t, "3 minutes", HumanDuration(3*time.Minute))
assertEquals(t, "35 minutes", HumanDuration(35*time.Minute))
assertEquals(t, "35 minutes", HumanDuration(35*time.Minute+40*time.Second))
assertEquals(t, "45 minutes", HumanDuration(45*time.Minute))
assertEquals(t, "45 minutes", HumanDuration(45*time.Minute+40*time.Second))
assertEquals(t, "About an hour", HumanDuration(46*time.Minute))
assertEquals(t, "About an hour", HumanDuration(59*time.Minute))
assertEquals(t, "About an hour", HumanDuration(1*time.Hour))
assertEquals(t, "About an hour", HumanDuration(1*time.Hour+45*time.Minute))
assertEquals(t, "About an hour", HumanDuration(1*time.Hour+29*time.Minute))
assertEquals(t, "2 hours", HumanDuration(1*time.Hour+31*time.Minute))
assertEquals(t, "2 hours", HumanDuration(1*time.Hour+59*time.Minute))
assertEquals(t, "3 hours", HumanDuration(3*time.Hour))
assertEquals(t, "3 hours", HumanDuration(3*time.Hour+59*time.Minute))
assertEquals(t, "3 hours", HumanDuration(3*time.Hour+29*time.Minute))
assertEquals(t, "4 hours", HumanDuration(3*time.Hour+31*time.Minute))
assertEquals(t, "4 hours", HumanDuration(3*time.Hour+59*time.Minute))
assertEquals(t, "4 hours", HumanDuration(3*time.Hour+60*time.Minute))
assertEquals(t, "24 hours", HumanDuration(24*time.Hour))
assertEquals(t, "36 hours", HumanDuration(1*day+12*time.Hour))
Expand All @@ -71,8 +82,9 @@ func TestHumanDuration(t *testing.T) {
assertEquals(t, "4 weeks", HumanDuration(4*week+3*day))
assertEquals(t, "4 weeks", HumanDuration(1*month))
assertEquals(t, "6 weeks", HumanDuration(1*month+2*week))
assertEquals(t, "8 weeks", HumanDuration(2*month))
assertEquals(t, "2 months", HumanDuration(2*month))
assertEquals(t, "2 months", HumanDuration(2*month+2*week))
assertEquals(t, "3 months", HumanDuration(3*month))
assertEquals(t, "3 months", HumanDuration(3*month+1*week))
assertEquals(t, "5 months", HumanDuration(5*month+2*week))
assertEquals(t, "13 months", HumanDuration(13*month))
Expand Down

0 comments on commit 57ccf25

Please sign in to comment.