shithub: hugo

Download patch

ref: 73cbefdbc8829d24c9da27d9b2001a6a7e2eb169
parent: 667a047ceaa60f16cb5babc3c7e414b5d64f3804
author: Vincent Batoufflet <[email protected]>
date: Sat May 10 08:05:29 EDT 2014

Make template comparison functions handle floats

--- a/hugolib/template.go
+++ b/hugolib/template.go
@@ -25,36 +25,38 @@
 }
 
 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)
@@ -61,11 +63,13 @@
 
 	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
--- a/hugolib/template_test.go
+++ b/hugolib/template_test.go
@@ -16,6 +16,8 @@
 		{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},