(module main) (struct ArrayRecord (ints (array i32 3)) (wides (array i64 2)) (ratios (array f64 3)) (flags (array bool 3)) (words (array string 3))) (fn make_record ((base i32) (head string)) -> ArrayRecord (ArrayRecord (ints (array i32 base (+ base 1) (+ base 2))) (wides (array i64 40i64 41i64)) (ratios (array f64 1.5 2.5 3.5)) (flags (array bool false true true)) (words (array string head "moon" "star")))) (fn echo_record ((record ArrayRecord)) -> ArrayRecord record) (fn local_record ((head string)) -> ArrayRecord (let record ArrayRecord (make_record 7 head)) (echo_record record)) (fn int_at ((record ArrayRecord) (i i32)) -> i32 (index (. record ints) i)) (fn wide_at ((record ArrayRecord) (i i32)) -> i64 (index (. record wides) i)) (fn ratio_at ((record ArrayRecord) (i i32)) -> f64 (index (. record ratios) i)) (fn flag_at ((record ArrayRecord) (i i32)) -> bool (index (. record flags) i)) (fn word_at ((record ArrayRecord) (i i32)) -> string (index (. record words) i)) (test "struct array i32 field access" (= (int_at (make_record 7 "sun") 2) 9)) (test "struct array i64 field access" (= (wide_at (make_record 7 "sun") 1) 41i64)) (test "struct array f64 field access" (= (ratio_at (make_record 7 "sun") 2) 3.5)) (test "struct array bool field access" (flag_at (make_record 7 "sun") 1)) (test "struct array string field access" (= (word_at (make_record 7 "sun") 1) "moon")) (test "struct array local param return call flow" (= (word_at (local_record "sun") 0) "sun")) (fn main () -> i32 (if (flag_at (local_record "sun") 2) 0 1))