package math_test

import (
	"context"
	"github.com/MontFerret/ferret/pkg/runtime/values"
	"github.com/MontFerret/ferret/pkg/stdlib/math"
	"testing"

	. "github.com/smartystreets/goconvey/convey"
)

func TestAbs(t *testing.T) {
	Convey("Should return absolute value", t, func() {
		Convey("When value is int", func() {
			out, err := math.Abs(context.Background(), values.NewInt(-5))

			So(err, ShouldBeNil)
			So(out, ShouldEqual, 5)

			out, err = math.Abs(context.Background(), values.NewInt(3))

			So(err, ShouldBeNil)
			So(out, ShouldEqual, 3)
		})

		Convey("When value is float", func() {
			out, err := math.Abs(context.Background(), values.NewFloat(-5))

			So(err, ShouldBeNil)
			So(out, ShouldEqual, 5)

			out, err = math.Abs(context.Background(), values.NewFloat(5.1))

			So(err, ShouldBeNil)
			So(out, ShouldEqual, 5.1)
		})
	})
}
