From: Tatsushi Demachi Date: Mon, 9 Mar 2015 13:55:04 +0000 (+0900) Subject: Fix eq and ne tpl function issue X-Git-Tag: v0.14~215 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=44cdb37b038e7c79893dfe431e9d88d1b07148c4;p=brevno-suite%2Fhugo Fix eq and ne tpl function issue `eq` and `ne` template functions don't work as expected when those are used with a raw number and a calculated value by add, sub etc. It's caused by both numbers type differences. For example, `eq 5 (add 2 3)` returns `false` because raw 5 is `int` while `add 2 3` returns 5 with `int64` This normalizes `int`, `uint` and `float` type values to `int64`, `uint64` and `float64` before comparing them. Other type of value is passed to comparing function without any changes. Fix #961 --- diff --git a/tpl/template.go b/tpl/template.go index 231946b34..148ec03c 100644 --- a/tpl/template.go +++ b/tpl/template.go @@ -94,6 +94,21 @@ func New() Template { } func Eq(x, y interface{}) bool { + normalize := func(v interface{}) interface{} { + vv := reflect.ValueOf(v) + switch vv.Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return vv.Int() + case reflect.Float32, reflect.Float64: + return vv.Float() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return vv.Uint() + default: + return v + } + } + x = normalize(x) + y = normalize(y) return reflect.DeepEqual(x, y) }