several changes:
1. moved scan/symbol.go to new package sym and adapted all files that reference Symbol type and its values. 2. new type interval defined by begin, end and step values. 3. replaced operator-range.go with operator-interval.go. 4. replaced range operator begin:end with begin..end..step. 5. new implementation of sub-collection extraction based on new interval literal.
This commit is contained in:
+44
-42
@@ -9,57 +9,59 @@ import (
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.portale-stac.it/go-pkg/expr/sym"
|
||||
)
|
||||
|
||||
func TestScanner(t *testing.T) {
|
||||
type inputType struct {
|
||||
source string
|
||||
wantSym Symbol
|
||||
wantSym sym.Symbol
|
||||
wantValue any
|
||||
wantErr error
|
||||
}
|
||||
|
||||
inputs := []inputType{
|
||||
/* 1 */ {`123`, SymInteger, int64(123), nil},
|
||||
/* 2 */ {"=", SymEqual, nil, nil},
|
||||
/* 3 */ {`--`, SymDoubleMinus, nil, nil},
|
||||
/* 4 */ {`++`, SymDoublePlus, nil, nil},
|
||||
/* 5 */ {`**`, SymDoubleStar, nil, nil},
|
||||
/* 6 */ {`&&`, SymDoubleAmpersand, nil, nil},
|
||||
/* 7 */ {`||`, SymDoubleVertBar, nil, nil},
|
||||
/* 8 */ {`NOT`, SymKwNot, nil, nil},
|
||||
/* 9 */ {`AND`, SymKwAnd, nil, nil},
|
||||
/* 10 */ {`or`, SymKwOr, nil, nil},
|
||||
/* 11 */ {`+=`, SymPlusEqual, nil, nil},
|
||||
/* 12 */ {`-=`, SymMinusEqual, nil, nil},
|
||||
/* 13 */ {`|`, SymVertBar, nil, nil},
|
||||
/* 14 */ {`:`, SymColon, nil, nil},
|
||||
/* 15 */ {`;`, SymSemiColon, nil, nil},
|
||||
/* 16 */ {`.`, SymDot, nil, nil},
|
||||
/* 17 */ {`0.5`, SymFloat, float64(0.5), nil},
|
||||
/* 18 */ {`\\`, SymBackSlash, nil, nil},
|
||||
/* 19 */ {"`", SymBackTick, nil, nil},
|
||||
/* 20 */ {"?", SymQuestion, nil, nil},
|
||||
/* 21 */ {"&", SymAmpersand, nil, nil},
|
||||
/* 22 */ {"@", SymAt, nil, nil},
|
||||
/* 23 */ {`#`, SymHash, nil, nil},
|
||||
/* 24 */ {`%`, SymPercent, nil, nil},
|
||||
/* 25 */ {`\'`, SymQuote, nil, nil},
|
||||
/* 26 */ {`\"`, SymDoubleQuote, nil, nil},
|
||||
/* 27 */ {`_`, SymUndescore, nil, nil},
|
||||
/* 28 */ {`<>`, SymLessGreater, nil, nil},
|
||||
/* 29 */ {`[`, SymOpenSquare, nil, nil},
|
||||
/* 30 */ {`]`, SymClosedSquare, nil, nil},
|
||||
/* 31 */ {`{`, SymOpenBrace, nil, nil},
|
||||
/* 32 */ {`}`, SymClosedBrace, nil, nil},
|
||||
/* 33 */ {`(`, SymOpenRound, nil, nil},
|
||||
/* 34 */ {`)`, SymClosedRound, nil, nil},
|
||||
/* 35 */ {`1E+2`, SymFloat, float64(100), nil},
|
||||
/* 36 */ {`1E+x`, SymError, errors.New("[1:5] expected integer exponent, got x"), nil},
|
||||
/* 37 */ {`$`, SymDollar, nil, nil},
|
||||
/* 38 */ {`\`, SymError, errors.New("incomplete escape sequence"), nil},
|
||||
/* 39 */ {`"string"`, SymString, "string", nil},
|
||||
/* 40 */ {`identifier`, SymIdentifier, "identifier", nil},
|
||||
/* 1 */ {`123`, sym.SymInteger, int64(123), nil},
|
||||
/* 2 */ {"=", sym.SymEqual, nil, nil},
|
||||
/* 3 */ {`--`, sym.SymDoubleMinus, nil, nil},
|
||||
/* 4 */ {`++`, sym.SymDoublePlus, nil, nil},
|
||||
/* 5 */ {`**`, sym.SymDoubleStar, nil, nil},
|
||||
/* 6 */ {`&&`, sym.SymDoubleAmpersand, nil, nil},
|
||||
/* 7 */ {`||`, sym.SymDoubleVertBar, nil, nil},
|
||||
/* 8 */ {`NOT`, sym.SymKwNot, nil, nil},
|
||||
/* 9 */ {`AND`, sym.SymKwAnd, nil, nil},
|
||||
/* 10 */ {`or`, sym.SymKwOr, nil, nil},
|
||||
/* 11 */ {`+=`, sym.SymPlusEqual, nil, nil},
|
||||
/* 12 */ {`-=`, sym.SymMinusEqual, nil, nil},
|
||||
/* 13 */ {`|`, sym.SymVertBar, nil, nil},
|
||||
/* 14 */ {`:`, sym.SymColon, nil, nil},
|
||||
/* 15 */ {`;`, sym.SymSemiColon, nil, nil},
|
||||
/* 16 */ {`.`, sym.SymDot, nil, nil},
|
||||
/* 17 */ {`0.5`, sym.SymFloat, float64(0.5), nil},
|
||||
/* 18 */ {`\\`, sym.SymBackSlash, nil, nil},
|
||||
/* 19 */ {"`", sym.SymBackTick, nil, nil},
|
||||
/* 20 */ {"?", sym.SymQuestion, nil, nil},
|
||||
/* 21 */ {"&", sym.SymAmpersand, nil, nil},
|
||||
/* 22 */ {"@", sym.SymAt, nil, nil},
|
||||
/* 23 */ {`#`, sym.SymHash, nil, nil},
|
||||
/* 24 */ {`%`, sym.SymPercent, nil, nil},
|
||||
/* 25 */ {`\'`, sym.SymQuote, nil, nil},
|
||||
/* 26 */ {`\"`, sym.SymDoubleQuote, nil, nil},
|
||||
/* 27 */ {`_`, sym.SymUndescore, nil, nil},
|
||||
/* 28 */ {`<>`, sym.SymLessGreater, nil, nil},
|
||||
/* 29 */ {`[`, sym.SymOpenSquare, nil, nil},
|
||||
/* 30 */ {`]`, sym.SymClosedSquare, nil, nil},
|
||||
/* 31 */ {`{`, sym.SymOpenBrace, nil, nil},
|
||||
/* 32 */ {`}`, sym.SymClosedBrace, nil, nil},
|
||||
/* 33 */ {`(`, sym.SymOpenRound, nil, nil},
|
||||
/* 34 */ {`)`, sym.SymClosedRound, nil, nil},
|
||||
/* 35 */ {`1E+2`, sym.SymFloat, float64(100), nil},
|
||||
/* 36 */ {`1E+x`, sym.SymError, errors.New("[1:5] expected integer exponent, got x"), nil},
|
||||
/* 37 */ {`$`, sym.SymDollar, nil, nil},
|
||||
/* 38 */ {`\`, sym.SymError, errors.New("incomplete escape sequence"), nil},
|
||||
/* 39 */ {`"string"`, sym.SymString, "string", nil},
|
||||
/* 40 */ {`identifier`, sym.SymIdentifier, "identifier", nil},
|
||||
}
|
||||
|
||||
for i, input := range inputs {
|
||||
@@ -79,7 +81,7 @@ func TestScanner(t *testing.T) {
|
||||
t.Errorf("%d: %q -> got = (nil), want %v (value %v [%T])", i+1, input.source, input.wantSym, input.wantValue, input.wantValue)
|
||||
// } else if tk.Sym != input.wantSym || tk.Value != input.wantValue {
|
||||
} else if tk.Sym != input.wantSym || !reflect.DeepEqual(tk.Value, input.wantValue) {
|
||||
if tk.Sym == SymError && input.wantSym == tk.Sym {
|
||||
if tk.Sym == sym.SymError && input.wantSym == tk.Sym {
|
||||
if tkErr, tkOk := tk.Value.(error); tkOk {
|
||||
if inputErr, inputOk := input.wantValue.(error); inputOk {
|
||||
if tkErr.Error() != inputErr.Error() {
|
||||
|
||||
Reference in New Issue
Block a user