1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
#!../../src/liquidsoap ../../libs/stdlib.liq
%include "test.liq"
def c(x, y) =
if x != y then
print("#{x} != #{y}")
test.fail()
end
end
def f() =
# Tuples
let tuple = (123, "aabbcc", true, {foo=1})
let (x, y, z, t) = tuple
c(x, 123)
c(y, "aabbcc")
c(z, true)
c(t, {foo=1})
# List
let l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let [x, y, ...z, t, u, v] = l
c(x, 1)
c(y, 2)
c(z, [3, 4, 5, 6])
c(t, 7)
c(u, 8)
c(v, 9)
let [x,y] = [1,2,3]
c(x, 1)
c(y, 2)
let [..._,x,y] = [1,2,3]
c(x, 2)
c(y, 3)
let [...,x,y] = [1,2,3]
c(x, 2)
c(y, 3)
let [x,_,...z] = [1,2,3]
c(x, 1)
c(z, [3])
# Record
record = {foo=123, gni="gno", bla=3.24}
let {foo, gni, bla} = record
c(foo, 123)
c(gni, "gno")
c(bla, 3.24)
# Values with methods
record = 123.{foo=123, gni="gno", bla=3.24}
let v.{foo, gni, bla} = record
c(v, 123)
c(foo, 123)
c(gni, "gno")
c(bla, 3.24)
record = 123.{foo=321, gni="gnu", bla=4.12}
let _.{foo, gni, bla} = record
c(foo, 321)
c(gni, "gnu")
c(bla, 4.12)
# Combined patterns
# Patterns inside records
record' = {foo=tuple, gni=l, r=record}
let {foo = (x,y,z,t), gni=[a,b,...s,d], r=v.{gni}} = record'
c(foo, tuple)
c(x, 123)
c(y, "aabbcc")
c(z, true)
c(t, {foo=1})
c(a, 1)
c(b, 2)
c(s, [3, 4, 5, 6, 7, 8])
c(d, 9)
c(r, record)
c(v, 123)
c(gni, "gnu")
x = {foo=123, gni="gno", bla=3.24}
y = {foo=123, gni="gnu", bla=3.24}
z = {foo=123, gni="gno", bla=3.24}
t = {foo=123, gni="gno", bla=4.24}
l = [x, y, z, t]
let [{foo}, {gni}, ..._, {bla}] = l
c(foo, 123)
c(gni, "gnu")
c(bla, 4.24)
let ({foo = [{foo}, {gni}, ..._, {bla}]}, z) = ({foo = l}, "the letter z")
c(foo, 123)
c(gni, "gnu")
c(bla, 4.24)
c(z, "the letter z")
test.pass()
end
test.check(f)
|