Made structural change to lexer test definitions

This commit is contained in:
Sasha Koshka 2022-08-18 11:02:49 -04:00
parent 54de3d1270
commit be9a3603d2

View File

@ -5,7 +5,11 @@ import "git.tebibyte.media/sashakoshka/arf/file"
import "git.tebibyte.media/sashakoshka/arf/types"
import "git.tebibyte.media/sashakoshka/arf/infoerr"
func checkTokenSlice (filePath string, correct []Token, test *testing.T) {
func quickToken (kind TokenKind, value any) (token Token) {
return Token { kind: kind, value: value }
}
func checkTokenSlice (filePath string, test *testing.T, correct ...Token) {
test.Log("checking lexer results for", filePath)
file, err := file.Open(filePath)
if err != nil {
@ -108,119 +112,119 @@ func compareErr (
}
func TestTokenizeAll (test *testing.T) {
checkTokenSlice("../tests/lexer/all.arf", []Token {
Token { kind: TokenKindSeparator },
Token { kind: TokenKindPermission, value: types.Permission {
checkTokenSlice("../tests/lexer/all.arf", test,
quickToken(TokenKindSeparator, nil),
quickToken (TokenKindPermission, types.Permission {
Internal: types.ModeRead,
External: types.ModeWrite,
}},
Token { kind: TokenKindReturnDirection },
Token { kind: TokenKindInt, value: int64(-349820394) },
Token { kind: TokenKindUInt, value: uint64(932748397) },
Token { kind: TokenKindFloat, value: 239485.37520 },
Token { kind: TokenKindString, value: "hello world!\n" },
Token { kind: TokenKindRune, value: 'E' },
Token { kind: TokenKindName, value: "helloWorld" },
Token { kind: TokenKindColon },
Token { kind: TokenKindDot },
Token { kind: TokenKindComma },
Token { kind: TokenKindElipsis },
Token { kind: TokenKindLBracket },
Token { kind: TokenKindRBracket },
Token { kind: TokenKindLBrace },
Token { kind: TokenKindRBrace },
Token { kind: TokenKindNewline },
Token { kind: TokenKindPlus },
Token { kind: TokenKindMinus },
Token { kind: TokenKindIncrement },
Token { kind: TokenKindDecrement },
Token { kind: TokenKindAsterisk },
Token { kind: TokenKindSlash },
Token { kind: TokenKindAt },
Token { kind: TokenKindExclamation },
Token { kind: TokenKindPercent },
Token { kind: TokenKindTilde },
Token { kind: TokenKindLessThan },
Token { kind: TokenKindLShift },
Token { kind: TokenKindGreaterThan },
Token { kind: TokenKindRShift },
Token { kind: TokenKindBinaryOr },
Token { kind: TokenKindLogicalOr },
Token { kind: TokenKindBinaryAnd },
Token { kind: TokenKindLogicalAnd },
Token { kind: TokenKindNewline },
}, test)
}),
quickToken(TokenKindReturnDirection, nil),
quickToken(TokenKindInt, int64(-349820394)),
quickToken(TokenKindUInt, uint64(932748397)),
quickToken(TokenKindFloat, 239485.37520),
quickToken(TokenKindString, "hello world!\n"),
quickToken(TokenKindRune, 'E'),
quickToken(TokenKindName, "helloWorld"),
quickToken(TokenKindColon, nil),
quickToken(TokenKindDot, nil),
quickToken(TokenKindComma, nil),
quickToken(TokenKindElipsis, nil),
quickToken(TokenKindLBracket, nil),
quickToken(TokenKindRBracket, nil),
quickToken(TokenKindLBrace, nil),
quickToken(TokenKindRBrace, nil),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindPlus, nil),
quickToken(TokenKindMinus, nil),
quickToken(TokenKindIncrement, nil),
quickToken(TokenKindDecrement, nil),
quickToken(TokenKindAsterisk, nil),
quickToken(TokenKindSlash, nil),
quickToken(TokenKindAt, nil),
quickToken(TokenKindExclamation, nil),
quickToken(TokenKindPercent, nil),
quickToken(TokenKindTilde, nil),
quickToken(TokenKindLessThan, nil),
quickToken(TokenKindLShift, nil),
quickToken(TokenKindGreaterThan, nil),
quickToken(TokenKindRShift, nil),
quickToken(TokenKindBinaryOr, nil),
quickToken(TokenKindLogicalOr, nil),
quickToken(TokenKindBinaryAnd, nil),
quickToken(TokenKindLogicalAnd, nil),
quickToken(TokenKindNewline, nil),
)
}
func TestTokenizeNumbers (test *testing.T) {
checkTokenSlice("../tests/lexer/numbers.arf", []Token {
Token { kind: TokenKindUInt, value: uint64(0) },
Token { kind: TokenKindNewline },
Token { kind: TokenKindUInt, value: uint64(8) },
Token { kind: TokenKindNewline },
Token { kind: TokenKindUInt, value: uint64(83628266) },
Token { kind: TokenKindNewline },
Token { kind: TokenKindUInt, value: uint64(83628266) },
Token { kind: TokenKindNewline },
Token { kind: TokenKindUInt, value: uint64(83628266) },
Token { kind: TokenKindNewline },
Token { kind: TokenKindUInt, value: uint64(83628266) },
Token { kind: TokenKindNewline },
checkTokenSlice("../tests/lexer/numbers.arf", test,
quickToken(TokenKindUInt, uint64(0)),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindUInt, uint64(8)),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindUInt, uint64(83628266)),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindUInt, uint64(83628266)),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindUInt, uint64(83628266)),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindUInt, uint64(83628266)),
quickToken(TokenKindNewline, nil),
Token { kind: TokenKindInt, value: int64(-83628266) },
Token { kind: TokenKindNewline },
Token { kind: TokenKindInt, value: int64(-83628266) },
Token { kind: TokenKindNewline },
Token { kind: TokenKindInt, value: int64(-83628266) },
Token { kind: TokenKindNewline },
Token { kind: TokenKindInt, value: int64(-83628266) },
Token { kind: TokenKindNewline },
quickToken(TokenKindInt, int64(-83628266)),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindInt, int64(-83628266)),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindInt, int64(-83628266)),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindInt, int64(-83628266)),
quickToken(TokenKindNewline, nil),
Token { kind: TokenKindFloat, value: float64(0.123478) },
Token { kind: TokenKindNewline },
Token { kind: TokenKindFloat, value: float64(234.3095) },
Token { kind: TokenKindNewline },
Token { kind: TokenKindFloat, value: float64(-2.312) },
Token { kind: TokenKindNewline },
}, test)
quickToken(TokenKindFloat, float64(0.123478)),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindFloat, float64(234.3095)),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindFloat, float64(-2.312)),
quickToken(TokenKindNewline, nil),
)
}
func TestTokenizeText (test *testing.T) {
checkTokenSlice("../tests/lexer/text.arf", []Token {
Token { kind: TokenKindString, value: "hello world!\a\b\f\n\r\t\v'\"\\" },
Token { kind: TokenKindNewline },
Token { kind: TokenKindRune, value: '\a' },
Token { kind: TokenKindRune, value: '\b' },
Token { kind: TokenKindRune, value: '\f' },
Token { kind: TokenKindRune, value: '\n' },
Token { kind: TokenKindRune, value: '\r' },
Token { kind: TokenKindRune, value: '\t' },
Token { kind: TokenKindRune, value: '\v' },
Token { kind: TokenKindRune, value: '\'' },
Token { kind: TokenKindRune, value: '"' },
Token { kind: TokenKindRune, value: '\\' },
Token { kind: TokenKindNewline },
Token { kind: TokenKindString, value: "hello world \x40\u0040\U00000040!" },
Token { kind: TokenKindNewline },
}, test)
checkTokenSlice("../tests/lexer/text.arf", test,
quickToken(TokenKindString, "hello world!\a\b\f\n\r\t\v'\"\\"),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindRune, '\a'),
quickToken(TokenKindRune, '\b'),
quickToken(TokenKindRune, '\f'),
quickToken(TokenKindRune, '\n'),
quickToken(TokenKindRune, '\r'),
quickToken(TokenKindRune, '\t'),
quickToken(TokenKindRune, '\v'),
quickToken(TokenKindRune, '\''),
quickToken(TokenKindRune, '"' ),
quickToken(TokenKindRune, '\\'),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindString, "hello world \x40\u0040\U00000040!"),
quickToken(TokenKindNewline, nil),
)
}
func TestTokenizeIndent (test *testing.T) {
checkTokenSlice("../tests/lexer/indent.arf", []Token {
Token { kind: TokenKindName, value: "line1" },
Token { kind: TokenKindNewline },
Token { kind: TokenKindIndent, value: 1 },
Token { kind: TokenKindName, value: "line2" },
Token { kind: TokenKindNewline },
Token { kind: TokenKindIndent, value: 4 },
Token { kind: TokenKindName, value: "line3" },
Token { kind: TokenKindNewline },
Token { kind: TokenKindName, value: "line4" },
Token { kind: TokenKindNewline },
Token { kind: TokenKindIndent, value: 2 },
Token { kind: TokenKindName, value: "line5" },
Token { kind: TokenKindNewline },
}, test)
checkTokenSlice("../tests/lexer/indent.arf", test,
quickToken(TokenKindName, "line1"),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindIndent, 1),
quickToken(TokenKindName, "line2"),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindIndent, 4),
quickToken(TokenKindName, "line3"),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindName, "line4"),
quickToken(TokenKindNewline, nil),
quickToken(TokenKindIndent, 2),
quickToken(TokenKindName, "line5"),
quickToken(TokenKindNewline, nil),
)
}
func TestTokenizeErr (test *testing.T) {