1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-07-03 00:46:51 +02:00
Files
ferret/pkg/stdlib/math/range.go
Tim Voronov 5f94b77a39 Feature/#7 numeric functions (#116)
* #7 Added ABS

* #7 Added ACOS

* #7 Added ASIN

* #7 Added ATAN

* #7 Added ATAN2

* #7 Added AVERAGE

* #7 Added CEIL

* #7 Added COS

* #7 Added DEGREES

* #7 Added EXP

* #7 Added EXP2

* #7 Added FLOOR

* #7 Added LOG

* #7 Added LOG2

* #7 Added LOG10

* #7 Added MAX

* #7 Added MEDIAN

* #7 Added MIN

* #7 Added PERCENTILE

* #7 Added PI

* #7 Added POW

* #7 Added RADIANS

* #7 Added RAND

* #7 Added RANGE

* #7 Added ROUND

* #7 Added SIN

* #7 Added SQRT

* #7 Added TAN

* #7 Added SUM

* #7 Added STDDEV_POPULATION

* #7 Added STDDEV_SAMPLE, VARIANCE_POPULATION, VARIANCE_SAMPLE
2018-10-13 21:07:28 -04:00

57 lines
1.2 KiB
Go

package math
import (
"context"
"github.com/MontFerret/ferret/pkg/runtime/core"
"github.com/MontFerret/ferret/pkg/runtime/values"
)
/*
* Returns an array of numbers in the specified range, optionally with increments other than 1.
* @param start (Int|Float) - The value to start the range at (inclusive).
* @param end (Int|Float) - The value to end the range with (inclusive).
* @param step (Int|Float, optional) - How much to increment in every step, the default is 1.0.
*/
func Range(_ context.Context, args ...core.Value) (core.Value, error) {
err := core.ValidateArgs(args, 2, 3)
if err != nil {
return values.None, err
}
err = core.ValidateType(args[0], core.IntType, core.FloatType)
if err != nil {
return values.None, err
}
err = core.ValidateType(args[1], core.IntType, core.FloatType)
if err != nil {
return values.None, err
}
var step float64 = 1
if len(args) > 2 {
err = core.ValidateType(args[2], core.IntType, core.FloatType)
if err != nil {
return values.None, err
}
step = toFloat(args[2])
}
start := toFloat(args[0])
end := toFloat(args[1])
arr := values.NewArray(int(end))
for i := start; i <= end; i += step {
arr.Push(values.NewFloat(i))
}
return arr, nil
}