tpl: Add math.Abs

Fixes #10941.
This commit is contained in:
Oleksandr Redko
2023-05-16 19:32:07 +03:00
committed by GitHub
parent 241b21b0fd
commit bda082c98c
4 changed files with 46 additions and 1 deletions

View File

@@ -31,6 +31,13 @@ func init() {
Context: func(cctx context.Context, args ...any) (any, error) { return ctx, nil },
}
ns.AddMethodMapping(ctx.Abs,
nil,
[][2]string{
{"{{ math.Abs -2.1 }}", "2.1"},
},
)
ns.AddMethodMapping(ctx.Add,
[]string{"add"},
[][2]string{

View File

@@ -35,6 +35,16 @@ func New() *Namespace {
// Namespace provides template functions for the "math" namespace.
type Namespace struct{}
// Abs returns the absolute value of n.
func (ns *Namespace) Abs(n any) (float64, error) {
af, err := cast.ToFloat64E(n)
if err != nil {
return 0, errors.New("the math.Abs function requires a numeric argument")
}
return math.Abs(af), nil
}
// Add adds the multivalued addends n1 and n2 or more values.
func (ns *Namespace) Add(inputs ...any) (any, error) {
return ns.doArithmetic(inputs, '+')

View File

@@ -63,6 +63,33 @@ func TestBasicNSArithmetic(t *testing.T) {
}
}
func TestAbs(t *testing.T) {
t.Parallel()
c := qt.New(t)
ns := New()
for _, test := range []struct {
x any
expect any
}{
{0.0, 0.0},
{1.5, 1.5},
{-1.5, 1.5},
{-2, 2.0},
{"abc", false},
} {
result, err := ns.Abs(test.x)
if b, ok := test.expect.(bool); ok && !b {
c.Assert(err, qt.Not(qt.IsNil))
continue
}
c.Assert(err, qt.IsNil)
c.Assert(result, qt.Equals, test.expect)
}
}
func TestCeil(t *testing.T) {
t.Parallel()
c := qt.New(t)