// Test arrays. // Ref: false --- // Ref: true #set page(width: 150pt) // Empty. {()} // Not an array, just a parenthesized expression. {(1)} // One item and trailing comma. {(-1,)} // No trailing comma. {(true, false)} // Multiple lines and items and trailing comma. {("1" , rgb("002") ,)} --- // Test lvalue and rvalue access. { let array = (1, 2) array(1) += 5 + array(0) test(array, (1, 8)) } --- // Test rvalue out of bounds. // Error: 2-14 array index out of bounds (index: 5, len: 3) {(1, 2, 3)(5)} --- // Test lvalue out of bounds. { let array = (1, 2, 3) // Error: 3-11 array index out of bounds (index: 3, len: 3) array(3) = 5 } --- // Test negative indices. { let array = (1, 2, 3, 4) test(array(0), 1) test(array(-1), 4) test(array(-2), 3) test(array(-3), 2) test(array(-4), 1) } --- // Error: 2-15 array index out of bounds (index: -4, len: 3) {(1, 2, 3)(-4)} --- // Test non-collection indexing. { let x = 10pt // Error: 3-4 expected collection, found length x() = 1 } --- // Error: 3 expected closing paren {(} // Error: 2-3 expected expression, found closing paren {)} // Error: 4 expected comma // Error: 4-6 unexpected end of block comment {(1*/2)} // Error: 6-8 invalid number suffix {(1, 1u 2)} // Error: 3-4 expected expression, found comma {(,1)} // Missing expression makes named pair incomplete, making this an empty array. // Error: 5 expected expression {(a:)} // Named pair after this is already identified as an array. // Error: 6-10 expected expression, found named pair {(1, b: 2)} // Keyed pair after this is already identified as an array. // Error: 6-14 expected expression, found keyed pair {(1, "key": 2)}