fn main() { #macro([#zip_or_unzip([[x, ...], [y, ...]]), [[x, y], ...]], [#zip_or_unzip([[xx, yy], ...]), [[xx, ...], [yy, ...]]]); assert (#zip_or_unzip([[1, 2, 3, 4], [5, 6, 7, 8]]) == [[1, 5], [2, 6], [3, 7], [4, 8]]); assert (#zip_or_unzip([[1, 5], [2, 6], [3, 7], [4, 8]]) == [[1, 2, 3, 4], [5, 6, 7, 8]]); #macro([#nested([[[x, ...], ...], [[y, ...], ...]]), [[[x, y], ...], ...]]); assert (#nested([[[1, 2, 3, 4, 5], [7, 8, 9, 10, 11, 12]], [[-1, -2, -3, -4, -5], [-7, -8, -9, -10, -11, -12]]]) == [[[1, -1], [2, -2], [3, -3], [4, -4], [5, -5]], [[7, -7], [8, -8], [9, -9], [10, -10], [11, -11], [12, -12]]]); #macro([#dup([y, [x, ...]]), [[y, x], ...]]); assert (#dup([1, [1, 2, 3, 4]]) == [[1, 1], [1, 2], [1, 3], [1, 4]]); #macro([#lambda(x, #, body, #), { fn result(x: t) -> s { ret body } result }]); assert (#lambda(i, #, i + 4u, #)(12u) == 16u) }