// tests.vr — functions named test_* are picked up by `vr test`. // vr test examples/tests.vr fn add(a, b) { return a + b } fn test_add() { assert add(2, 3) == 5 assert add(-1, 1) == 0 } fn test_strings() { let a = "foo" let b = "bar" assert a + b == "foobar" assert a != b assert a == "foo" } fn test_loops() { let total = 0 let i = 1 while i <= 10 { total = total + i i = i + 1 } assert total == 55 } fn test_booleans() { let x = 7 assert x > 3 and x < 10 assert x == 7 or x == 8 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_break_continue() { // break exits the loop early let total = 0 for i in 0..100 { if i == 5 { break } total = total + i } assert total == 10 // 0+1+2+3+4 // continue skips to the next iteration let sum = 0 for i in 0..6 { if i == 3 { continue } sum = sum + i } assert sum == 12 // 0+1+2+4+5 (3 skipped) // break and continue in while loops let n = 0 while true { n = n + 1 if n == 3 { continue } if n == 5 { break } } assert n == 5 // continue advances the iterator in for-in loops (no infinite loop) let odds = [] for x in [1, 2, 3, 4, 5] { if x % 2 == 0 { continue } push(odds, x) } assert odds == odds assert len(odds) == 3 assert odds[2] == 5 } fn test_failing() { // this one is meant to fail — shows up in `vr test` output assert 1 == 2 }