mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-30 10:47:14 -06:00
Add a logarithm function
Fixes #9498. Adds a `log` function for calculating logarithms.
This commit is contained in:
parent
26a91abd0c
commit
38d4d2f9d4
@ -81,6 +81,7 @@ func Funcs() map[string]ast.Function {
|
||||
"jsonencode": interpolationFuncJSONEncode(),
|
||||
"length": interpolationFuncLength(),
|
||||
"list": interpolationFuncList(),
|
||||
"log": interpolationFuncLog(),
|
||||
"lower": interpolationFuncLower(),
|
||||
"map": interpolationFuncMap(),
|
||||
"max": interpolationFuncMax(),
|
||||
@ -489,6 +490,17 @@ func interpolationFuncCeil() ast.Function {
|
||||
}
|
||||
}
|
||||
|
||||
// interpolationFuncLog returns the logarithnm.
|
||||
func interpolationFuncLog() ast.Function {
|
||||
return ast.Function{
|
||||
ArgTypes: []ast.Type{ast.TypeFloat, ast.TypeFloat},
|
||||
ReturnType: ast.TypeFloat,
|
||||
Callback: func(args []interface{}) (interface{}, error) {
|
||||
return math.Log(args[0].(float64)) / math.Log(args[1].(float64)), nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// interpolationFuncChomp removes trailing newlines from the given string
|
||||
func interpolationFuncChomp() ast.Function {
|
||||
newlines := regexp.MustCompile(`(?:\r\n?|\n)*\z`)
|
||||
|
@ -370,6 +370,34 @@ func TestInterpolateFuncCeil(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestInterpolateFuncLog(t *testing.T) {
|
||||
testFunction(t, testFunctionConfig{
|
||||
Cases: []testFunctionCase{
|
||||
{
|
||||
`${log(1, 10)}`,
|
||||
"0",
|
||||
false,
|
||||
},
|
||||
{
|
||||
`${log(10, 10)}`,
|
||||
"1",
|
||||
false,
|
||||
},
|
||||
|
||||
{
|
||||
`${log(0, 10)}`,
|
||||
"-Inf",
|
||||
false,
|
||||
},
|
||||
{
|
||||
`${log(10, 0)}`,
|
||||
"-0",
|
||||
false,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func TestInterpolateFuncChomp(t *testing.T) {
|
||||
testFunction(t, testFunctionConfig{
|
||||
Cases: []testFunctionCase{
|
||||
|
@ -278,6 +278,8 @@ The supported built-in functions are:
|
||||
* `${list("a", "b", "c")}` returns a list of `"a", "b", "c"`.
|
||||
* `${list()}` returns an empty list.
|
||||
|
||||
* `log(x, base)` - Returns the logarithm of `x`.
|
||||
|
||||
* `lookup(map, key, [default])` - Performs a dynamic lookup into a map
|
||||
variable. The `map` parameter should be another variable, such
|
||||
as `var.amis`. If `key` does not exist in `map`, the interpolation will
|
||||
|
Loading…
Reference in New Issue
Block a user