35 lines
801 B
Plaintext
35 lines
801 B
Plaintext
(module main)
|
|
|
|
(enum Color Red Blue Green)
|
|
|
|
(fn make_palette () -> (array Color 3)
|
|
(array Color (Color.Red) (Color.Blue) (Color.Green)))
|
|
|
|
(fn echo_palette ((colors (array Color 3))) -> (array Color 3)
|
|
colors)
|
|
|
|
(fn at ((colors (array Color 3)) (i i32)) -> Color
|
|
(index colors i))
|
|
|
|
(fn local_pick () -> Color
|
|
(let colors (array Color 3) (make_palette))
|
|
(index colors 1))
|
|
|
|
(test "enum array immediate index"
|
|
(= (index (array Color (Color.Red) (Color.Blue) (Color.Green)) 2) (Color.Green)))
|
|
|
|
(test "enum array local index"
|
|
(= (local_pick) (Color.Blue)))
|
|
|
|
(test "enum array param return dynamic index"
|
|
(= (at (echo_palette (make_palette)) 0) (Color.Red)))
|
|
|
|
(fn main () -> i32
|
|
(match (at (make_palette) 1)
|
|
((Color.Blue)
|
|
0)
|
|
((Color.Red)
|
|
1)
|
|
((Color.Green)
|
|
1)))
|