mirror of
https://github.com/gohugoio/hugo.git
synced 2024-12-22 16:52:09 +00:00
Make template comparison functions handle floats
This commit is contained in:
parent
667a047cea
commit
73cbefdbc8
2 changed files with 18 additions and 12 deletions
|
@ -25,47 +25,51 @@ func Ne(x, y interface{}) bool {
|
|||
}
|
||||
|
||||
func Ge(a, b interface{}) bool {
|
||||
left, right := compareGetInt(a, b)
|
||||
left, right := compareGetFloat(a, b)
|
||||
return left >= right
|
||||
}
|
||||
|
||||
func Gt(a, b interface{}) bool {
|
||||
left, right := compareGetInt(a, b)
|
||||
left, right := compareGetFloat(a, b)
|
||||
return left > right
|
||||
}
|
||||
|
||||
func Le(a, b interface{}) bool {
|
||||
left, right := compareGetInt(a, b)
|
||||
left, right := compareGetFloat(a, b)
|
||||
return left <= right
|
||||
}
|
||||
|
||||
func Lt(a, b interface{}) bool {
|
||||
left, right := compareGetInt(a, b)
|
||||
left, right := compareGetFloat(a, b)
|
||||
return left < right
|
||||
}
|
||||
|
||||
func compareGetInt(a interface{}, b interface{}) (int64, int64) {
|
||||
var left, right int64
|
||||
func compareGetFloat(a interface{}, b interface{}) (float64, float64) {
|
||||
var left, right float64
|
||||
av := reflect.ValueOf(a)
|
||||
|
||||
switch av.Kind() {
|
||||
case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
|
||||
left = int64(av.Len())
|
||||
left = float64(av.Len())
|
||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||
left = av.Int()
|
||||
left = float64(av.Int())
|
||||
case reflect.Float32, reflect.Float64:
|
||||
left = av.Float()
|
||||
case reflect.String:
|
||||
left, _ = strconv.ParseInt(av.String(), 10, 64)
|
||||
left, _ = strconv.ParseFloat(av.String(), 64)
|
||||
}
|
||||
|
||||
bv := reflect.ValueOf(b)
|
||||
|
||||
switch bv.Kind() {
|
||||
case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:
|
||||
right = int64(bv.Len())
|
||||
right = float64(bv.Len())
|
||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||
right = bv.Int()
|
||||
right = float64(bv.Int())
|
||||
case reflect.Float32, reflect.Float64:
|
||||
right = bv.Float()
|
||||
case reflect.String:
|
||||
right, _ = strconv.ParseInt(bv.String(), 10, 64)
|
||||
right, _ = strconv.ParseFloat(bv.String(), 64)
|
||||
}
|
||||
|
||||
return left, right
|
||||
|
|
|
@ -16,6 +16,8 @@ func TestGt(t *testing.T) {
|
|||
{5, 5, false},
|
||||
{-2, 1, false},
|
||||
{2, -5, true},
|
||||
{0.0, 1.23, false},
|
||||
{1.23, 0.0, true},
|
||||
{"8", "5", true},
|
||||
{"5", "0001", true},
|
||||
{[]int{100, 99}, []int{1, 2, 3, 4}, false},
|
||||
|
|
Loading…
Reference in a new issue