87 lines
1.4 KiB
Plaintext
Executable File
87 lines
1.4 KiB
Plaintext
Executable File
-{extension 'match'}
|
|
|
|
WIDTH = 50
|
|
function p(msg)
|
|
io.write(msg, ' ':rep(WIDTH-#msg))
|
|
io.flush()
|
|
end
|
|
|
|
p "Basic match"
|
|
match 1 with 1 -> print 'ok' end
|
|
|
|
p "Sequence match"
|
|
match 3, 4 with
|
|
| 1, 2 -> print 'KO'
|
|
| 3, 4 -> print 'ok'
|
|
end
|
|
|
|
p "Id binding"
|
|
match 3, 4 with
|
|
| 1, 2 -> print 'KO'
|
|
| x, y -> print 'ok'
|
|
end
|
|
|
|
p "Table destructuring & non-litteral tested term"
|
|
match {1, 2} with
|
|
|{a, 2} -> assert(a==1); print 'ok'
|
|
end
|
|
|
|
p "Pattern group"
|
|
match {'?'} with
|
|
|1|2|3 -> print 'KO'
|
|
|{...} -> print 'ok'
|
|
end
|
|
|
|
p "Multi-level destructuring"
|
|
match {{1000}} with
|
|
|{{2000}} -> print 'KO'
|
|
|{{3000}} -> print 'KO'
|
|
|{{1000}} -> print 'ok'
|
|
end
|
|
|
|
p "Guard"
|
|
match 1 with
|
|
| 1 if false -> print 'KO'
|
|
| 1 -> print 'ok'
|
|
end
|
|
|
|
p "Guard with bound var"
|
|
match 1 with
|
|
| a if a ~= 1 -> print 'KO'
|
|
| a if a == 1 -> print 'ok'
|
|
end
|
|
|
|
p "Non linear var & destructuring"
|
|
match {1, {2}} with
|
|
| {a, {a}} -> print 'KO'
|
|
| {a, {b}} -> print 'ok'
|
|
end
|
|
|
|
p "Non-linear vars on a sequence"
|
|
match 1, 2 with
|
|
| a, a -> print 'KO'
|
|
| a, b -> print 'ok'
|
|
end
|
|
|
|
p "Multiple _ wildcards"
|
|
match 1, 2 with
|
|
| _, _ -> print 'ok'
|
|
| a, b -> print 'KO'
|
|
end
|
|
|
|
p "Regexp & non-linear vars"
|
|
match 'toto' with
|
|
| 't(.)t(.)' / { a, a } -> print (a..'k')
|
|
end
|
|
|
|
p "Nested match & ..."
|
|
match { { 'o', 'k', '!' } } with
|
|
| { t } -> match t with
|
|
| { a, b } -> print 'KO'
|
|
| { a, b, ... } -> print (a..b)
|
|
| _ -> print 'KO'
|
|
end
|
|
| _ -> print 'KO'
|
|
end
|
|
|