]> git.lizzy.rs Git - metalua.git/blob - src/samples/xmatch_test.mlua
Merge remote branch 'origin/master'
[metalua.git] / src / samples / xmatch_test.mlua
1 -{ extension 'xmatch' }
2
3 WIDTH=60
4 function p(msg) io.write(msg..' ':rep(WIDTH-#msg)) end
5
6 ----------------------------------------------------------------------
7 p "match as an expression"
8 print(match 1 with 1 -> 'ok' | 2 -> 'KO')
9
10 ----------------------------------------------------------------------
11 p "global match function"
12 match function g
13 | x if x<10 -> return 'o'
14 | _         -> return 'k'
15 end
16 print(g(1)..g(11))
17
18 ----------------------------------------------------------------------
19 p "global match function, multi-args"
20 match function cmp
21 | x, y if x<y -> return 'increasing'
22 | _, _        -> return 'decreasing'
23       end
24
25 if cmp(1,2)=='increasing' and cmp(2,1)=='decreasing' then
26    print "ok" else print "KO"
27 end
28
29 ----------------------------------------------------------------------
30 p "local match function"
31 do
32    local match function x
33    | 1 -> print 'ok'
34    end
35    x(1)
36 end
37 assert(not x)
38
39 ----------------------------------------------------------------------
40 p "global bind assignment"
41 bind {a, b} = {'o', 'k'}
42 print(a..b)
43
44 ----------------------------------------------------------------------
45 p "local bind assignment"
46 c, d = 'k', 'o'
47 do
48    local bind {c, {d}} = {'o', {'k'}}
49    print(c..d)
50 end
51
52 ----------------------------------------------------------------------
53 p "local bind assignment scope"
54 print(d..c)