mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-17 21:01:26 +02:00
tpl/math: Refactor Mod with cast
It makes the code smaller
This commit is contained in:
committed by
Bjørn Erik Pedersen
parent
488631fe0a
commit
76dc811c65
@@ -72,21 +72,10 @@ func (ns *Namespace) Log(a interface{}) (float64, error) {
|
|||||||
|
|
||||||
// Mod returns a % b.
|
// Mod returns a % b.
|
||||||
func (ns *Namespace) Mod(a, b interface{}) (int64, error) {
|
func (ns *Namespace) Mod(a, b interface{}) (int64, error) {
|
||||||
av := reflect.ValueOf(a)
|
ai, erra := cast.ToInt64E(a)
|
||||||
bv := reflect.ValueOf(b)
|
bi, errb := cast.ToInt64E(b)
|
||||||
var ai, bi int64
|
|
||||||
|
|
||||||
switch av.Kind() {
|
if erra != nil || errb != nil {
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
||||||
ai = av.Int()
|
|
||||||
default:
|
|
||||||
return 0, errors.New("Modulo operator can't be used with non integer value")
|
|
||||||
}
|
|
||||||
|
|
||||||
switch bv.Kind() {
|
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
|
||||||
bi = bv.Int()
|
|
||||||
default:
|
|
||||||
return 0, errors.New("Modulo operator can't be used with non integer value")
|
return 0, errors.New("Modulo operator can't be used with non integer value")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -259,13 +259,17 @@ func TestMod(t *testing.T) {
|
|||||||
{3, 1, int64(0)},
|
{3, 1, int64(0)},
|
||||||
{3, 0, false},
|
{3, 0, false},
|
||||||
{0, 3, int64(0)},
|
{0, 3, int64(0)},
|
||||||
{3.1, 2, false},
|
{3.1, 2, int64(1)},
|
||||||
{3, 2.1, false},
|
{3, 2.1, int64(1)},
|
||||||
{3.1, 2.1, false},
|
{3.1, 2.1, int64(1)},
|
||||||
{int8(3), int8(2), int64(1)},
|
{int8(3), int8(2), int64(1)},
|
||||||
{int16(3), int16(2), int64(1)},
|
{int16(3), int16(2), int64(1)},
|
||||||
{int32(3), int32(2), int64(1)},
|
{int32(3), int32(2), int64(1)},
|
||||||
{int64(3), int64(2), int64(1)},
|
{int64(3), int64(2), int64(1)},
|
||||||
|
{"3", "2", int64(1)},
|
||||||
|
{"3.1", "2", false},
|
||||||
|
{"aaa", "0", false},
|
||||||
|
{"3", "aaa", false},
|
||||||
} {
|
} {
|
||||||
errMsg := fmt.Sprintf("[%d] %v", i, test)
|
errMsg := fmt.Sprintf("[%d] %v", i, test)
|
||||||
|
|
||||||
@@ -296,9 +300,9 @@ func TestModBool(t *testing.T) {
|
|||||||
{3, 1, true},
|
{3, 1, true},
|
||||||
{3, 0, nil},
|
{3, 0, nil},
|
||||||
{0, 3, true},
|
{0, 3, true},
|
||||||
{3.1, 2, nil},
|
{3.1, 2, false},
|
||||||
{3, 2.1, nil},
|
{3, 2.1, false},
|
||||||
{3.1, 2.1, nil},
|
{3.1, 2.1, false},
|
||||||
{int8(3), int8(3), true},
|
{int8(3), int8(3), true},
|
||||||
{int8(3), int8(2), false},
|
{int8(3), int8(2), false},
|
||||||
{int16(3), int16(3), true},
|
{int16(3), int16(3), true},
|
||||||
@@ -307,6 +311,11 @@ func TestModBool(t *testing.T) {
|
|||||||
{int32(3), int32(2), false},
|
{int32(3), int32(2), false},
|
||||||
{int64(3), int64(3), true},
|
{int64(3), int64(3), true},
|
||||||
{int64(3), int64(2), false},
|
{int64(3), int64(2), false},
|
||||||
|
{"3", "3", true},
|
||||||
|
{"3", "2", false},
|
||||||
|
{"3.1", "2", nil},
|
||||||
|
{"aaa", "0", nil},
|
||||||
|
{"3", "aaa", nil},
|
||||||
} {
|
} {
|
||||||
errMsg := fmt.Sprintf("[%d] %v", i, test)
|
errMsg := fmt.Sprintf("[%d] %v", i, test)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user