SSE: Add is_nan() and other like functions and allow '_' in func names (#43555)
* SSE: Add is_nan() and allow '_' in func names is_null() infn(), is_inf(), is_number()
This commit is contained in:
@@ -1,20 +1,21 @@
|
||||
package mathexp
|
||||
|
||||
import (
|
||||
"math"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestFunc(t *testing.T) {
|
||||
func TestAbsFunc(t *testing.T) {
|
||||
var tests = []struct {
|
||||
name string
|
||||
expr string
|
||||
vars Vars
|
||||
newErrIs assert.ErrorAssertionFunc
|
||||
execErrIs assert.ErrorAssertionFunc
|
||||
resultIs assert.ComparisonAssertionFunc
|
||||
newErrIs require.ErrorAssertionFunc
|
||||
execErrIs require.ErrorAssertionFunc
|
||||
resultIs require.ComparisonAssertionFunc
|
||||
results Results
|
||||
}{
|
||||
{
|
||||
@@ -27,18 +28,18 @@ func TestFunc(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
newErrIs: assert.NoError,
|
||||
execErrIs: assert.NoError,
|
||||
resultIs: assert.Equal,
|
||||
newErrIs: require.NoError,
|
||||
execErrIs: require.NoError,
|
||||
resultIs: require.Equal,
|
||||
results: Results{[]Value{makeNumber("", nil, float64Pointer(7))}},
|
||||
},
|
||||
{
|
||||
name: "abs on scalar",
|
||||
expr: "abs(-1)",
|
||||
vars: Vars{},
|
||||
newErrIs: assert.NoError,
|
||||
execErrIs: assert.NoError,
|
||||
resultIs: assert.Equal,
|
||||
newErrIs: require.NoError,
|
||||
execErrIs: require.NoError,
|
||||
resultIs: require.Equal,
|
||||
results: Results{[]Value{NewScalar("", float64Pointer(1.0))}},
|
||||
},
|
||||
{
|
||||
@@ -55,9 +56,9 @@ func TestFunc(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
newErrIs: assert.NoError,
|
||||
execErrIs: assert.NoError,
|
||||
resultIs: assert.Equal,
|
||||
newErrIs: require.NoError,
|
||||
execErrIs: require.NoError,
|
||||
resultIs: require.Equal,
|
||||
results: Results{
|
||||
[]Value{
|
||||
makeSeries("", nil, tp{
|
||||
@@ -72,7 +73,7 @@ func TestFunc(t *testing.T) {
|
||||
name: "abs on string - should error",
|
||||
expr: `abs("hi")`,
|
||||
vars: Vars{},
|
||||
newErrIs: assert.Error,
|
||||
newErrIs: require.Error,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
@@ -87,3 +88,74 @@ func TestFunc(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsNumberFunc(t *testing.T) {
|
||||
var tests = []struct {
|
||||
name string
|
||||
expr string
|
||||
vars Vars
|
||||
results Results
|
||||
}{
|
||||
{
|
||||
name: "is_number on number type with real number value",
|
||||
expr: "is_number($A)",
|
||||
vars: Vars{
|
||||
"A": Results{
|
||||
[]Value{
|
||||
makeNumber("", nil, float64Pointer(6)),
|
||||
},
|
||||
},
|
||||
},
|
||||
results: Results{[]Value{makeNumber("", nil, float64Pointer(1))}},
|
||||
},
|
||||
{
|
||||
name: "is_number on number type with null value",
|
||||
expr: "is_number($A)",
|
||||
vars: Vars{
|
||||
"A": Results{
|
||||
[]Value{
|
||||
makeNumber("", nil, nil),
|
||||
},
|
||||
},
|
||||
},
|
||||
results: Results{[]Value{makeNumber("", nil, float64Pointer(0))}},
|
||||
},
|
||||
{
|
||||
name: "is_number on on series",
|
||||
expr: "is_number($A)",
|
||||
vars: Vars{
|
||||
"A": Results{
|
||||
[]Value{
|
||||
makeSeries("", nil,
|
||||
tp{time.Unix(5, 0), float64Pointer(5)},
|
||||
tp{time.Unix(10, 0), nil},
|
||||
tp{time.Unix(15, 0), float64Pointer(math.NaN())},
|
||||
tp{time.Unix(20, 0), float64Pointer(math.Inf(-1))},
|
||||
tp{time.Unix(25, 0), float64Pointer(math.Inf(0))}),
|
||||
},
|
||||
},
|
||||
},
|
||||
results: Results{
|
||||
[]Value{
|
||||
makeSeries("", nil,
|
||||
tp{time.Unix(5, 0), float64Pointer(1)},
|
||||
tp{time.Unix(10, 0), float64Pointer(0)},
|
||||
tp{time.Unix(15, 0), float64Pointer(0)},
|
||||
tp{time.Unix(20, 0), float64Pointer(0)},
|
||||
tp{time.Unix(25, 0), float64Pointer(0)}),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
e, err := New(tt.expr)
|
||||
require.NoError(t, err)
|
||||
if e != nil {
|
||||
res, err := e.Execute("", tt.vars)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, tt.results, res)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user