rust/src/test/run-pass/macro-by-example-2.rs
2011-07-27 15:54:33 +02:00

34 lines
1.1 KiB
Rust

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, #<t>, body, #<s>),
{
fn result(x: t) -> s { ret body }
result
}]);
assert (#lambda(i, #<uint>, i + 4u, #<uint>)(12u) == 16u)
}