mirror of
https://github.com/bearlanguageorg/bear.git
synced 2026-08-26 14:57:18 +00:00
Loops
This commit is contained in:
@@ -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")
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user