Compare commits
6 Commits
e2b0a43640
...
all-in-one
| Author | SHA1 | Date | |
|---|---|---|---|
| c31025c8cd | |||
| 5cd48bdc50 | |||
| b080eaf49f | |||
| 02a02b4f20 | |||
| 72c2a6b52a | |||
| 7e4baf9b6e |
+17
-17
@@ -14,7 +14,7 @@ import (
|
|||||||
"git.portale-stac.it/go-pkg/expr/types/array"
|
"git.portale-stac.it/go-pkg/expr/types/array"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ListIterator struct {
|
type ArrayIterator struct {
|
||||||
a *array.ArrayType
|
a *array.ArrayType
|
||||||
count int64
|
count int64
|
||||||
index int64
|
index int64
|
||||||
@@ -23,13 +23,13 @@ type ListIterator struct {
|
|||||||
step int64
|
step int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewListIterator(list *array.ArrayType, args []any) (it *ListIterator) {
|
func NewArrayIteratorFromArray(a *array.ArrayType, args []any) (it *ArrayIterator) {
|
||||||
var argc int = 0
|
var argc int = 0
|
||||||
listLen := int64(len(([]any)(*list)))
|
listLen := int64(len(([]any)(*a)))
|
||||||
if args != nil {
|
if args != nil {
|
||||||
argc = len(args)
|
argc = len(args)
|
||||||
}
|
}
|
||||||
it = &ListIterator{a: list, count: 0, index: -1, start: 0, stop: listLen - 1, step: 1}
|
it = &ArrayIterator{a: a, count: 0, index: -1, start: 0, stop: listLen - 1, step: 1}
|
||||||
if argc >= 1 {
|
if argc >= 1 {
|
||||||
if i, err := types.ToGoInt64(args[0], "start index"); err == nil {
|
if i, err := types.ToGoInt64(args[0], "start index"); err == nil {
|
||||||
if i < 0 {
|
if i < 0 {
|
||||||
@@ -62,12 +62,12 @@ func NewListIterator(list *array.ArrayType, args []any) (it *ListIterator) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewArrayIterator(a []any) (it *ListIterator) {
|
func NewArrayIterator(a []any) (it *ArrayIterator) {
|
||||||
it = &ListIterator{a: (*array.ArrayType)(&a), count: 0, index: -1, start: 0, stop: int64(len(a)) - 1, step: 1}
|
it = &ArrayIterator{a: (*array.ArrayType)(&a), count: 0, index: -1, start: 0, stop: int64(len(a)) - 1, step: 1}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *ListIterator) String() string {
|
func (it *ArrayIterator) String() string {
|
||||||
var l = int64(0)
|
var l = int64(0)
|
||||||
if it.a != nil {
|
if it.a != nil {
|
||||||
l = int64(len(*it.a))
|
l = int64(len(*it.a))
|
||||||
@@ -75,17 +75,17 @@ func (it *ListIterator) String() string {
|
|||||||
return fmt.Sprintf("$([#%d])", l)
|
return fmt.Sprintf("$([#%d])", l)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *ListIterator) TypeName() string {
|
func (it *ArrayIterator) TypeName() string {
|
||||||
return "ListIterator"
|
return "ArrayIterator"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *ListIterator) HasOperation(name string) bool {
|
func (it *ArrayIterator) HasOperation(name string) bool {
|
||||||
//yes := name == expr.NextName || name == expr.ResetName || name == expr.IndexName || name == expr.CountName || name == expr.CurrentName
|
//yes := name == expr.NextName || name == expr.ResetName || name == expr.IndexName || name == expr.CountName || name == expr.CurrentName
|
||||||
yes := slices.Contains([]string{kern.NextName, kern.ResetName, kern.IndexName, kern.CountName, kern.CurrentName}, name)
|
yes := slices.Contains([]string{kern.NextName, kern.ResetName, kern.IndexName, kern.CountName, kern.CurrentName}, name)
|
||||||
return yes
|
return yes
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *ListIterator) CallOperation(name string, args map[string]any) (v any, err error) {
|
func (it *ArrayIterator) CallOperation(name string, args map[string]any) (v any, err error) {
|
||||||
switch name {
|
switch name {
|
||||||
case kern.NextName:
|
case kern.NextName:
|
||||||
v, err = it.Next()
|
v, err = it.Next()
|
||||||
@@ -105,7 +105,7 @@ func (it *ListIterator) CallOperation(name string, args map[string]any) (v any,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *ListIterator) Current() (item any, err error) {
|
func (it *ArrayIterator) Current() (item any, err error) {
|
||||||
a := *(it.a)
|
a := *(it.a)
|
||||||
if it.start <= it.stop {
|
if it.start <= it.stop {
|
||||||
if it.stop < int64(len(a)) && it.index >= it.start && it.index <= it.stop {
|
if it.stop < int64(len(a)) && it.index >= it.start && it.index <= it.stop {
|
||||||
@@ -124,7 +124,7 @@ func (it *ListIterator) Current() (item any, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *ListIterator) Next() (item any, err error) {
|
func (it *ArrayIterator) Next() (item any, err error) {
|
||||||
it.index += it.step
|
it.index += it.step
|
||||||
if item, err = it.Current(); err != io.EOF {
|
if item, err = it.Current(); err != io.EOF {
|
||||||
it.count++
|
it.count++
|
||||||
@@ -132,20 +132,20 @@ func (it *ListIterator) Next() (item any, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *ListIterator) Index() int64 {
|
func (it *ArrayIterator) Index() int64 {
|
||||||
return it.index
|
return it.index
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *ListIterator) Count() int64 {
|
func (it *ArrayIterator) Count() int64 {
|
||||||
return it.count
|
return it.count
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *ListIterator) Reset() error {
|
func (it *ArrayIterator) Reset() error {
|
||||||
it.index = it.start - it.step
|
it.index = it.start - it.step
|
||||||
it.count = 0
|
it.count = 0
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (it *ListIterator) Clean() error {
|
func (it *ArrayIterator) Clean() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ func doAdd(ctx kern.ExprContext, name string, it kern.Iterator, count, level int
|
|||||||
|
|
||||||
for v, err = it.Next(); err == nil; v, err = it.Next() {
|
for v, err = it.Next(); err == nil; v, err = it.Next() {
|
||||||
if list, ok := v.(*array.ArrayType); ok {
|
if list, ok := v.(*array.ArrayType); ok {
|
||||||
v = NewListIterator(list, nil)
|
v = NewArrayIteratorFromArray(list, nil)
|
||||||
}
|
}
|
||||||
if subIter, ok := v.(kern.Iterator); ok {
|
if subIter, ok := v.(kern.Iterator); ok {
|
||||||
if v, err = doAdd(ctx, name, subIter, count, level); err != nil {
|
if v, err = doAdd(ctx, name, subIter, count, level); err != nil {
|
||||||
@@ -108,7 +108,7 @@ func doMul(ctx kern.ExprContext, name string, it kern.Iterator, count, level int
|
|||||||
level++
|
level++
|
||||||
for v, err = it.Next(); err == nil; v, err = it.Next() {
|
for v, err = it.Next(); err == nil; v, err = it.Next() {
|
||||||
if list, ok := v.(*array.ArrayType); ok {
|
if list, ok := v.(*array.ArrayType); ok {
|
||||||
v = NewListIterator(list, nil)
|
v = NewArrayIteratorFromArray(list, nil)
|
||||||
}
|
}
|
||||||
if subIter, ok := v.(kern.Iterator); ok {
|
if subIter, ok := v.(kern.Iterator); ok {
|
||||||
if v, err = doMul(ctx, name, subIter, count, level); err != nil {
|
if v, err = doMul(ctx, name, subIter, count, level); err != nil {
|
||||||
|
|||||||
+40
-4
@@ -12,6 +12,8 @@ import (
|
|||||||
"git.portale-stac.it/go-pkg/expr/kern"
|
"git.portale-stac.it/go-pkg/expr/kern"
|
||||||
"git.portale-stac.it/go-pkg/expr/types"
|
"git.portale-stac.it/go-pkg/expr/types"
|
||||||
"git.portale-stac.it/go-pkg/expr/types/array"
|
"git.portale-stac.it/go-pkg/expr/types/array"
|
||||||
|
"git.portale-stac.it/go-pkg/expr/types/dict"
|
||||||
|
"git.portale-stac.it/go-pkg/expr/types/list"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -45,14 +47,24 @@ func joinStrFunc(ctx kern.ExprContext, name string, args map[string]any) (result
|
|||||||
if v, exists := args[kern.ParamItem]; exists {
|
if v, exists := args[kern.ParamItem]; exists {
|
||||||
argv := v.([]any)
|
argv := v.([]any)
|
||||||
if len(argv) == 1 {
|
if len(argv) == 1 {
|
||||||
if a, ok := argv[0].(*array.ArrayType); ok {
|
var it kern.Iterator
|
||||||
result, err = doJoinStr(name, sep, NewListIterator(a, nil))
|
if it, ok = argv[0].(kern.Iterator); !ok {
|
||||||
} else if it, ok := argv[0].(kern.Iterator); ok {
|
if a, ok := argv[0].(*array.ArrayType); ok {
|
||||||
|
it = NewArrayIteratorFromArray(a, nil)
|
||||||
|
} else if l, ok := argv[0].(*list.LinkedList); ok {
|
||||||
|
it = NewLinkedListIterator(l, nil)
|
||||||
|
} else if d, ok := argv[0].(*dict.DictType); ok {
|
||||||
|
if it, err = NewDictIteratorA(d, "none", "values"); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if it != nil {
|
||||||
result, err = doJoinStr(name, sep, it)
|
result, err = doJoinStr(name, sep, it)
|
||||||
} else if s, ok := argv[0].(string); ok {
|
} else if s, ok := argv[0].(string); ok {
|
||||||
result = s
|
result = s
|
||||||
} else {
|
} else {
|
||||||
err = kern.ErrInvalidParameterValue(name, kern.ParamItem, v)
|
err = kern.ErrInvalidParameterValue(name, kern.ParamItem, argv[0])
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
result, err = doJoinStr(name, sep, NewArrayIterator(argv))
|
result, err = doJoinStr(name, sep, NewArrayIterator(argv))
|
||||||
@@ -64,6 +76,30 @@ func joinStrFunc(ctx kern.ExprContext, name string, args map[string]any) (result
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func joinStrFunc(ctx kern.ExprContext, name string, args map[string]any) (result any, err error) {
|
||||||
|
// if sep, ok := args[kern.ParamSeparator].(string); ok {
|
||||||
|
// if v, exists := args[kern.ParamItem]; exists {
|
||||||
|
// argv := v.([]any)
|
||||||
|
// if len(argv) == 1 {
|
||||||
|
// if a, ok := argv[0].(*array.ArrayType); ok {
|
||||||
|
// result, err = doJoinStr(name, sep, NewListIterator(a, nil))
|
||||||
|
// } else if it, ok := argv[0].(kern.Iterator); ok {
|
||||||
|
// result, err = doJoinStr(name, sep, it)
|
||||||
|
// } else if s, ok := argv[0].(string); ok {
|
||||||
|
// result = s
|
||||||
|
// } else {
|
||||||
|
// err = kern.ErrInvalidParameterValue(name, kern.ParamItem, argv[0])
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// result, err = doJoinStr(name, sep, NewArrayIterator(argv))
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// err = kern.ErrWrongParamType(name, kern.ParamSeparator, kern.TypeString, args[kern.ParamSeparator])
|
||||||
|
// }
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
|
||||||
func subStrFunc(ctx kern.ExprContext, name string, args map[string]any) (result any, err error) {
|
func subStrFunc(ctx kern.ExprContext, name string, args map[string]any) (result any, err error) {
|
||||||
var start = 0
|
var start = 0
|
||||||
var count = -1
|
var count = -1
|
||||||
|
|||||||
@@ -70,6 +70,13 @@ func (it *DictIterator) makeKeys(m map[any]any, sort sortType) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewDictIterator creates a new DictIterator for the given dict.DictType and optional arguments.
|
||||||
|
// The first argument can be a string specifying the sort type ("asc", "desc", "none", or "default").
|
||||||
|
// The second argument can be a string specifying the iteration mode ("keys", "values", "items", or "default").
|
||||||
|
func NewDictIteratorA(dict *dict.DictType, args ...any) (it *DictIterator, err error) {
|
||||||
|
return NewDictIterator(dict, args)
|
||||||
|
}
|
||||||
|
|
||||||
func NewDictIterator(dict *dict.DictType, args []any) (it *DictIterator, err error) {
|
func NewDictIterator(dict *dict.DictType, args []any) (it *DictIterator, err error) {
|
||||||
var sortType = sortTypeNone
|
var sortType = sortTypeNone
|
||||||
var s string
|
var s string
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ func NewIterator(ctx kern.ExprContext, value any, ops []*scan.Term) (it kern.Ite
|
|||||||
|
|
||||||
switch v := value.(type) {
|
switch v := value.(type) {
|
||||||
case *array.ArrayType:
|
case *array.ArrayType:
|
||||||
it = NewListIterator(v, nil)
|
it = NewArrayIteratorFromArray(v, nil)
|
||||||
case *list.LinkedList:
|
case *list.LinkedList:
|
||||||
it = NewLinkedListIterator(v, nil)
|
it = NewLinkedListIterator(v, nil)
|
||||||
case *dict.DictType:
|
case *dict.DictType:
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ func ErrFuncDivisionByZero(funcName string) error {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
func ErrInvalidParameterValue(funcName, paramName string, paramValue any) error {
|
func ErrInvalidParameterValue(funcName, paramName string, paramValue any) error {
|
||||||
return fmt.Errorf("%s(): invalid value %s (%#v) for parameter %q", funcName, TypeName(paramValue), paramValue, paramName)
|
return fmt.Errorf("%s(): invalid value %s (%s) for parameter %q", funcName, paramValue, TypeName(paramValue), paramName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func undefArticle(s string) (article string) {
|
func undefArticle(s string) (article string) {
|
||||||
|
|||||||
+1
-1
@@ -140,7 +140,7 @@ func evalIterator(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
|
|||||||
} else if a, ok := firstChildValue.(*array.ArrayType); ok {
|
} else if a, ok := firstChildValue.(*array.ArrayType); ok {
|
||||||
var args []any
|
var args []any
|
||||||
if args, err = evalSiblings(ctx, opTerm.Children, nil); err == nil {
|
if args, err = evalSiblings(ctx, opTerm.Children, nil); err == nil {
|
||||||
v = NewListIterator(a, args)
|
v = NewArrayIteratorFromArray(a, args)
|
||||||
}
|
}
|
||||||
} else if ll, ok := firstChildValue.(*list.LinkedList); ok {
|
} else if ll, ok := firstChildValue.(*list.LinkedList); ok {
|
||||||
var args []any
|
var args []any
|
||||||
|
|||||||
+12
-1
@@ -10,6 +10,7 @@ import (
|
|||||||
"git.portale-stac.it/go-pkg/expr/kern"
|
"git.portale-stac.it/go-pkg/expr/kern"
|
||||||
"git.portale-stac.it/go-pkg/expr/scan"
|
"git.portale-stac.it/go-pkg/expr/scan"
|
||||||
"git.portale-stac.it/go-pkg/expr/sym"
|
"git.portale-stac.it/go-pkg/expr/sym"
|
||||||
|
"git.portale-stac.it/go-pkg/expr/types/list"
|
||||||
"git.portale-stac.it/go-pkg/expr/types/str"
|
"git.portale-stac.it/go-pkg/expr/types/str"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -35,7 +36,17 @@ func evalBuiltin(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
|
|||||||
count := 0
|
count := 0
|
||||||
if str.IsString(childValue) {
|
if str.IsString(childValue) {
|
||||||
module, _ := childValue.(string)
|
module, _ := childValue.(string)
|
||||||
count, err = ImportInContextByGlobPattern(ctx, module)
|
if module == "" {
|
||||||
|
ll := list.NewLinkedList()
|
||||||
|
IterateBuiltinModules(func(name, description string, imported bool) bool {
|
||||||
|
ll.PushBack(name)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
v = ll
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
count, err = ImportInContextByGlobPattern(ctx, module)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
var moduleSpec any
|
var moduleSpec any
|
||||||
var it kern.Iterator
|
var it kern.Iterator
|
||||||
|
|||||||
+4
-2
@@ -35,7 +35,9 @@ func TestExpr(t *testing.T) {
|
|||||||
/* 19 */ {`a=2; ${a}`, int64(2), nil},
|
/* 19 */ {`a=2; ${a}`, int64(2), nil},
|
||||||
/* 20 */ {`$_=2; $_`, int64(2), nil},
|
/* 20 */ {`$_=2; $_`, int64(2), nil},
|
||||||
/* 21 */ {`$$`, dict.NewDict(map[any]any{"vars": dict.NewDict(nil), "funcs": dict.NewDict(nil)}), nil},
|
/* 21 */ {`$$`, dict.NewDict(map[any]any{"vars": dict.NewDict(nil), "funcs": dict.NewDict(nil)}), nil},
|
||||||
/* 22 */ {`
|
/* 22 */ {`builtin "string"; strJoin("-", [<"a", "b", "c">])`, nil, `strJoin(): invalid value [<"a", "b", "c">] (linked-list) for parameter "item"`},
|
||||||
|
/* 22 */ {`builtin ""`, nil, `strJoin(): invalid value [<"a", "b", "c">] (linked-list) for parameter "item"`},
|
||||||
|
/* 23 */ {`
|
||||||
ds={
|
ds={
|
||||||
"init":func(@end){@current=0 but true},
|
"init":func(@end){@current=0 but true},
|
||||||
//"current":func(){current},
|
//"current":func(){current},
|
||||||
@@ -50,6 +52,6 @@ func TestExpr(t *testing.T) {
|
|||||||
}
|
}
|
||||||
// t.Setenv("EXPR_PATH", ".")
|
// t.Setenv("EXPR_PATH", ".")
|
||||||
|
|
||||||
// RunTestSuiteSpec(t, section, inputs, 19)
|
// RunTestSuiteSpec(t, section, inputs, 22)
|
||||||
RunTestSuite(t, section, inputs)
|
RunTestSuite(t, section, inputs)
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-8
@@ -13,7 +13,7 @@ import (
|
|||||||
|
|
||||||
func TestNewListIterator(t *testing.T) {
|
func TestNewListIterator(t *testing.T) {
|
||||||
a := array.NewArrayA("a", "b", "c", "d")
|
a := array.NewArrayA("a", "b", "c", "d")
|
||||||
it := NewListIterator(a, []any{1, 3, 1})
|
it := NewArrayIteratorFromArray(a, []any{1, 3, 1})
|
||||||
if item, err := it.Next(); err != nil {
|
if item, err := it.Next(); err != nil {
|
||||||
t.Errorf("error: %v", err)
|
t.Errorf("error: %v", err)
|
||||||
} else if item != "b" {
|
} else if item != "b" {
|
||||||
@@ -25,7 +25,7 @@ func TestNewListIterator(t *testing.T) {
|
|||||||
|
|
||||||
func TestNewListIterator2(t *testing.T) {
|
func TestNewListIterator2(t *testing.T) {
|
||||||
a := array.NewArrayA("a", "b", "c", "d")
|
a := array.NewArrayA("a", "b", "c", "d")
|
||||||
it := NewListIterator(a, []any{3, 1, -1})
|
it := NewArrayIteratorFromArray(a, []any{3, 1, -1})
|
||||||
if item, err := it.Next(); err != nil {
|
if item, err := it.Next(); err != nil {
|
||||||
t.Errorf("error: %v", err)
|
t.Errorf("error: %v", err)
|
||||||
} else if item != "d" {
|
} else if item != "d" {
|
||||||
@@ -37,7 +37,7 @@ func TestNewListIterator2(t *testing.T) {
|
|||||||
|
|
||||||
func TestNewListIterator3(t *testing.T) {
|
func TestNewListIterator3(t *testing.T) {
|
||||||
a := array.NewArrayA("a", "b", "c", "d")
|
a := array.NewArrayA("a", "b", "c", "d")
|
||||||
it := NewListIterator(a, []any{1, -1, 1})
|
it := NewArrayIteratorFromArray(a, []any{1, -1, 1})
|
||||||
if item, err := it.Next(); err != nil {
|
if item, err := it.Next(); err != nil {
|
||||||
t.Errorf("error: %v", err)
|
t.Errorf("error: %v", err)
|
||||||
} else if item != "b" {
|
} else if item != "b" {
|
||||||
@@ -116,7 +116,7 @@ func TestNewString(t *testing.T) {
|
|||||||
func TestHasOperation(t *testing.T) {
|
func TestHasOperation(t *testing.T) {
|
||||||
|
|
||||||
a := array.NewArrayA("a", "b", "c", "d")
|
a := array.NewArrayA("a", "b", "c", "d")
|
||||||
it := NewListIterator(a, []any{1, 3, 1})
|
it := NewArrayIteratorFromArray(a, []any{1, 3, 1})
|
||||||
hasOp := it.HasOperation("reset")
|
hasOp := it.HasOperation("reset")
|
||||||
if !hasOp {
|
if !hasOp {
|
||||||
t.Errorf("HasOperation(reset) must be true, got false")
|
t.Errorf("HasOperation(reset) must be true, got false")
|
||||||
@@ -126,7 +126,7 @@ func TestHasOperation(t *testing.T) {
|
|||||||
func TestCallOperationReset(t *testing.T) {
|
func TestCallOperationReset(t *testing.T) {
|
||||||
|
|
||||||
a := array.NewArrayA("a", "b", "c", "d")
|
a := array.NewArrayA("a", "b", "c", "d")
|
||||||
it := NewListIterator(a, []any{1, 3, 1})
|
it := NewArrayIteratorFromArray(a, []any{1, 3, 1})
|
||||||
if v, err := it.CallOperation("reset", nil); err != nil {
|
if v, err := it.CallOperation("reset", nil); err != nil {
|
||||||
t.Errorf("Error on CallOperation(reset): %v", err)
|
t.Errorf("Error on CallOperation(reset): %v", err)
|
||||||
} else {
|
} else {
|
||||||
@@ -137,7 +137,7 @@ func TestCallOperationReset(t *testing.T) {
|
|||||||
func TestCallOperationIndex(t *testing.T) {
|
func TestCallOperationIndex(t *testing.T) {
|
||||||
|
|
||||||
a := array.NewArrayA("a", "b", "c", "d")
|
a := array.NewArrayA("a", "b", "c", "d")
|
||||||
it := NewListIterator(a, []any{1, 3, 1})
|
it := NewArrayIteratorFromArray(a, []any{1, 3, 1})
|
||||||
if v, err := it.CallOperation("index", nil); err != nil {
|
if v, err := it.CallOperation("index", nil); err != nil {
|
||||||
t.Errorf("Error on CallOperation(index): %v", err)
|
t.Errorf("Error on CallOperation(index): %v", err)
|
||||||
} else {
|
} else {
|
||||||
@@ -148,7 +148,7 @@ func TestCallOperationIndex(t *testing.T) {
|
|||||||
func TestCallOperationCount(t *testing.T) {
|
func TestCallOperationCount(t *testing.T) {
|
||||||
|
|
||||||
a := array.NewArrayA("a", "b", "c", "d")
|
a := array.NewArrayA("a", "b", "c", "d")
|
||||||
it := NewListIterator(a, []any{1, 3, 1})
|
it := NewArrayIteratorFromArray(a, []any{1, 3, 1})
|
||||||
if v, err := it.CallOperation("count", nil); err != nil {
|
if v, err := it.CallOperation("count", nil); err != nil {
|
||||||
t.Errorf("Error on CallOperation(count): %v", err)
|
t.Errorf("Error on CallOperation(count): %v", err)
|
||||||
} else {
|
} else {
|
||||||
@@ -159,7 +159,7 @@ func TestCallOperationCount(t *testing.T) {
|
|||||||
func TestCallOperationUnknown(t *testing.T) {
|
func TestCallOperationUnknown(t *testing.T) {
|
||||||
|
|
||||||
a := array.NewArrayA("a", "b", "c", "d")
|
a := array.NewArrayA("a", "b", "c", "d")
|
||||||
it := NewListIterator(a, []any{1, 3, 1})
|
it := NewArrayIteratorFromArray(a, []any{1, 3, 1})
|
||||||
if v, err := it.CallOperation("unknown", nil); err == nil {
|
if v, err := it.CallOperation("unknown", nil); err == nil {
|
||||||
t.Errorf("Expected error on CallOperation(unknown), got %v", v)
|
t.Errorf("Expected error on CallOperation(unknown), got %v", v)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
"git.portale-stac.it/go-pkg/expr/kern"
|
"git.portale-stac.it/go-pkg/expr/kern"
|
||||||
)
|
)
|
||||||
|
|
||||||
const LinkedListTypeName = "lisked-list"
|
const LinkedListTypeName = "linked-list"
|
||||||
|
|
||||||
func IsLinkedList(v any) (ok bool) {
|
func IsLinkedList(v any) (ok bool) {
|
||||||
_, ok = v.(*LinkedList)
|
_, ok = v.(*LinkedList)
|
||||||
|
|||||||
Reference in New Issue
Block a user