66 lines
1.2 KiB
Plaintext
66 lines
1.2 KiB
Plaintext
(module main)
|
|
|
|
(fn add_local ((a i32)) -> i32
|
|
(let one i32 1)
|
|
(var total i32 (+ a one))
|
|
(set total (+ total 1))
|
|
total)
|
|
|
|
(fn keep_flag ((flag bool)) -> bool
|
|
(let local_flag bool flag)
|
|
local_flag)
|
|
|
|
(fn flip_flag ((flag bool)) -> bool
|
|
(var current bool flag)
|
|
(set current (if current
|
|
false
|
|
true))
|
|
current)
|
|
|
|
(fn add_wide_local ((base i64)) -> i64
|
|
(var count i64 base)
|
|
(set count (+ count 2i64))
|
|
count)
|
|
|
|
(fn add_ratio_local ((base f64)) -> f64
|
|
(var amount f64 base)
|
|
(set amount (+ amount 0.5))
|
|
amount)
|
|
|
|
(test "locals work"
|
|
(let base i32 2)
|
|
(var value i32 (add_local base))
|
|
(set value (+ value 1))
|
|
(= value 5))
|
|
|
|
(test "bool let locals work"
|
|
(let expected bool true)
|
|
(let actual bool (keep_flag expected))
|
|
actual)
|
|
|
|
(test "bool let locals preserve false"
|
|
(if (keep_flag false)
|
|
false
|
|
true))
|
|
|
|
(test "bool var set flips true"
|
|
(if (flip_flag true)
|
|
false
|
|
true))
|
|
|
|
(test "bool var set flips false"
|
|
(flip_flag false))
|
|
|
|
(test "i64 var set works"
|
|
(= (add_wide_local 40i64) 42i64))
|
|
|
|
(test "f64 var set works"
|
|
(= (add_ratio_local 41.5) 42.0))
|
|
|
|
(fn main () -> i32
|
|
(var flag bool false)
|
|
(set flag (flip_flag flag))
|
|
(if flag
|
|
(add_local 2)
|
|
1))
|