about summary refs log tree commit diff
path: root/tests/ui/structs/basic-newtype-pattern.rs
blob: 38ccd0ea8e0c28d2c053a3927c645e9bdd31d3a5 (plain)
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
//! Test basic newtype pattern functionality.

//@ run-pass

#[derive(Copy, Clone)]
struct Counter(CounterData);

#[derive(Copy, Clone)]
struct CounterData {
    compute: fn(Counter) -> isize,
    val: isize,
}

fn compute_value(counter: Counter) -> isize {
    let Counter(data) = counter;
    data.val + 20
}

pub fn main() {
    let my_counter = Counter(CounterData { compute: compute_value, val: 30 });

    // Test destructuring and function pointer call
    let Counter(data) = my_counter;
    assert_eq!((data.compute)(my_counter), 50);
}