lib/std/lang/resolver/tests/placeholderTests.rad 1.5 KiB raw
1
//! Placeholder resolver tests.
2
3
use std::testing;
4
use std::lang::resolver;
5
6
/// Test array pattern with placeholder elements.
7
/// Pattern syntax: `[_, y]` ignores first element.
8
@test unsafe fn testResolveMatchArrayPatternPlaceholder() throws (testing::TestError) {
9
    let mut testArena389 = super::testArena();
10
    let testStorage389: 'test389 = &mut testArena389 in {
11
        let mut a = super::testResolver(testStorage389);
12
        let program = "fn f(arr: [i32; 2]) -> i32 { match arr { case [_, y] => return y } }";
13
        let result = try super::resolveProgramStr(&mut a, program);
14
        try super::expectNoErrors(&result);
15
    }
16
}
17
18
/// Placeholders cannot supply values to expressions.
19
@test unsafe fn testPlaceholderValueRejected() throws (testing::TestError) {
20
    for program in [
21
        "fn value() -> u32 { return _; }",
22
        "fn take(value: u32) {} fn run() { take(_); }",
23
        "record R: Copy { value: u32 } fn run() { let value = R { value: _ }; }",
24
        "fn run() { let value: [u32; 1] = [_]; }",
25
        "union U: Copy { Value(u32) } fn run() { let value = U::Value(_); }",
26
        "union U: Copy { Value(u32) } fn run(value: &?U) { match value { case U::Value(_) => {} else => {} } }",
27
    ] {
28
        let mut arena = super::testArena();
29
        let storage: 'placeholder = &mut arena in {
30
            let mut res = super::testResolver(storage);
31
            let result = try super::resolveProgramStr(&mut res, program);
32
            try super::expectErrorKind(&result, resolver::ErrorKind::PlaceholderExpression);
33
        }
34
    }
35
}