metrics: Adjust the howSimilar logic vs strings - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 4494a01b794ab785c64c8e93c61ccbfa845bc478
 (DIR) parent e91e222cd21213961d1e6206e1523bee2c21fa0c
 (HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Tue,  2 Apr 2019 20:43:58 +0200
       
       metrics: Adjust the howSimilar logic vs strings
       
       Also add a test.
       
       Diffstat:
         M metrics/metrics.go                  |      16 ++++++----------
         M metrics/metrics_test.go             |       8 ++++++++
       
       2 files changed, 14 insertions(+), 10 deletions(-)
       ---
 (DIR) diff --git a/metrics/metrics.go b/metrics/metrics.go
       @@ -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) {
 (DIR) diff --git a/metrics/metrics_test.go b/metrics/metrics_test.go
       @@ -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) + "!"