metrics: Adjust the howSimilar logic vs strings
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 2 Apr 2019 18:43:58 +0000 (20:43 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 2 Apr 2019 19:00:42 +0000 (21:00 +0200)
Also add a test.

metrics/metrics.go
metrics/metrics_test.go

index e67b16bdae18bfed632ae7e6e28d37874cec5d20..329981202e83b837979df784a76ae511e8c902a8 100644 (file)
@@ -27,8 +27,6 @@ import (
        "github.com/gohugoio/hugo/compare"
 
        "github.com/gohugoio/hugo/common/hreflect"
-
-       "github.com/spf13/cast"
 )
 
 // The Provider interface defines an interface for measuring metrics.
@@ -198,18 +196,17 @@ func (b bySum) Less(i, j int) bool { return b[i].sum > b[j].sum }
 // howSimilar is a naive diff implementation that returns
 // a number between 0-100 indicating how similar a and b are.
 func howSimilar(a, b interface{}) int {
-       if a == b {
-               return 100
-       }
+       // TODO(bep) object equality fast path, but remember that
+       // we can get anytning in here.
 
-       as, err1 := cast.ToStringE(a)
-       bs, err2 := cast.ToStringE(b)
+       as, ok1 := a.(string)
+       bs, ok2 := b.(string)
 
-       if err1 == nil && err2 == nil {
+       if ok1 && ok2 {
                return howSimilarStrings(as, bs)
        }
 
-       if err1 != err2 {
+       if ok1 != ok2 {
                return 0
        }
 
@@ -219,7 +216,6 @@ func howSimilar(a, b interface{}) int {
                return 100
        }
 
-       // TODO(bep) implement ProbablyEq for Pages etc.
        pe1, pok1 := a.(compare.ProbablyEqer)
        pe2, pok2 := b.(compare.ProbablyEqer)
        if pok1 && pok2 && pe1.ProbablyEq(pe2) {
index 70baa0a6126d9af0150927be14dc053f434aa61f..d22a517337f94f19772dfe4a6cbfe3d8c3f5c7b6 100644 (file)
@@ -17,6 +17,8 @@ import (
        "strings"
        "testing"
 
+       "github.com/gohugoio/hugo/resources/page"
+
        "github.com/stretchr/testify/require"
 )
 
@@ -40,6 +42,12 @@ func TestSimilarPercentage(t *testing.T) {
 
 }
 
+func TestSimilarPercentageNonString(t *testing.T) {
+       assert := require.New(t)
+       assert.Equal(100, howSimilar(page.NopPage, page.NopPage))
+       assert.Equal(90, howSimilar(page.Pages{}, page.Pages{}))
+}
+
 func BenchmarkHowSimilar(b *testing.B) {
        s1 := "Hugo is cool and " + strings.Repeat("fun ", 10) + "!"
        s2 := "Hugo is cool and " + strings.Repeat("cool ", 10) + "!"