This commit is contained in:
allexanderbergmns
2026-08-24 15:40:16 +02:00
parent f77f9d4dff
commit 18b0b38490
8 changed files with 572 additions and 54 deletions
+73
View File
@@ -0,0 +1,73 @@
// arrays.vr — arrays and for loops.
// Run with: vr run examples/arrays.vr
fn sum(items) {
let total = 0
for x in items {
total = total + x
}
return total
}
fn main() {
// array literal
let a = [10, 20, 30]
println(a) // [10, 20, 30]
println(len(a)) // 3
// indexing: read and write
println(a[0]) // 10
a[1] = 99
println(a) // [10, 99, 30]
// growing with push (mutates in place)
push(a, 40)
println(a) // [10, 99, 30, 40]
println(len(a)) // 4
// iterate the array
let total = sum(a)
println("sum = ")
println(total) // 179
// range for loops
for i in 0..5 {
println("i = " + i) // 0 1 2 3 4
}
for n in 1...3 {
println("n = " + n) // 1 2 3 (inclusive)
}
// nested loops
let grid = [[1, 2], [3, 4]]
for row in grid {
for cell in row {
print(cell)
print(" ")
}
println("")
}
println(grid[1][0]) // 3
// build an array in a loop
let squares = []
for i in 0..5 {
push(squares, i * i)
}
println(squares) // [0, 1, 4, 9, 16]
// loop variables are scoped to the loop
let i = 100
for i in 0..3 {
println(i)
}
println("i is back to ")
println(i) // 100
assert sum([1, 2, 3, 4]) == 10
assert len(squares) == 5
assert squares[4] == 16
assert a == a // arrays compare by identity
println("all array asserts passed")
}
+43
View File
@@ -35,6 +35,49 @@ fn test_booleans() {
assert not (x == 0)
}
fn test_arrays() {
let a = [1, 2, 3]
assert len(a) == 3
assert a[0] == 1
assert a[2] == 3
a[1] = 42
assert a[1] == 42
push(a, 4)
assert len(a) == 4
assert a[3] == 4
let m = [[1, 2], [3, 4]]
assert m[1][0] == 3
}
fn test_for_range() {
let total = 0
for i in 0..5 {
total = total + i
}
assert total == 10 // 0+1+2+3+4
let inc = 0
for i in 1...3 {
inc = inc + i
}
assert inc == 6 // 1+2+3 (inclusive)
}
fn test_for_in() {
let a = [5, 6, 7]
let total = 0
for x in a {
total = total + x
}
assert total == 18
let squares = []
for i in 0..4 {
push(squares, i * i)
}
assert squares == squares // identity comparison
assert len(squares) == 4
assert squares[3] == 9
}
fn test_failing() {
// this one is meant to fail — shows up in `vr test` output
assert 1 == 2