Skip to content

Commit

Permalink
Fix eq and ne tpl function issue
Browse files Browse the repository at this point in the history
`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 gohugoio#961
  • Loading branch information
tatsushid committed Mar 9, 2015
1 parent 91d16fb commit b5d2ee2
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions tpl/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down

0 comments on commit b5d2ee2

Please sign in to comment.