"github.com/gohugoio/hugo/compare"
"github.com/gohugoio/hugo/common/hreflect"
-
- "github.com/spf13/cast"
)
// The Provider interface defines an interface for measuring metrics.
// 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
}
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) {
"strings"
"testing"
+ "github.com/gohugoio/hugo/resources/page"
+
"github.com/stretchr/testify/require"
)
}
+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) + "!"