From 77d0ea46b3f1de99357c7706c4c05eb44c237412 Mon Sep 17 00:00:00 2001 From: Bobby Date: Thu, 4 Apr 2024 16:25:56 +0000 Subject: arrays and array indexes --- parser/parser_test.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'parser/parser_test.go') diff --git a/parser/parser_test.go b/parser/parser_test.go index f1b8b8c..7b347f5 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -519,6 +519,14 @@ func TestOperatorPrecedenceParsing(t *testing.T) { "add(a + b + c * d / f + g)", "add((((a + b) + ((c * d) / f)) + g))", }, + { + "a * [1, 2, 3, 4][b * c] * d", + "((a * ([1, 2, 3, 4][(b * c)])) * d)", + }, + { + "add(a * b[2], b[1], 2 * [1, 2][1])", + "add((a * (b[2])), (b[1]), (2 * ([1, 2][1])))", + }, } for _, tt := range tests { @@ -802,6 +810,11 @@ func TestParsingArrayLiterals(t *testing.T) { checkParserErrors(t, p) stmt, ok := program.Statements[0].(*ast.ExpressionStatement) + + if !ok { + t.Fatalf("program.Statements[0] is not ast.ExpressionStatement. got=%T", program.Statements[0]) + } + array, ok := stmt.Expression.(*ast.ArrayLiteral) if !ok { @@ -816,3 +829,33 @@ func TestParsingArrayLiterals(t *testing.T) { testInfixExpression(t, array.Elements[1], 2, "*", 2) testInfixExpression(t, array.Elements[2], 3, "+", 3) } + +func TestParsingIndexExpressions(t *testing.T) { + input := "myArray[1 + 1]" + + var l *lexer.Lexer = lexer.New(input) + var p *Parser = New(l) + + var program *ast.Program = p.ParseProgram() + checkParserErrors(t, p) + + stmt, ok := program.Statements[0].(*ast.ExpressionStatement) + + if !ok { + t.Fatalf("program.Statements[0] is not ast.ExpressionStatement. got=%T", program.Statements[0]) + } + + indexExp, ok := stmt.Expression.(*ast.IndexExpression) + + if !ok { + t.Fatalf("exp is not ast.IndexExpression. got=%T", stmt.Expression) + } + + if !testIdentifier(t, indexExp.Left, "myArray") { + return + } + + if !testInfixExpression(t, indexExp.Index, 1, "+", 1) { + return + } +} -- cgit v1.2.3