summaryrefslogtreecommitdiff
path: root/tests/structs/cast-struct-boxed.vala
blob: 86fff40645542f7ffaae9f283cad99b229d65709 (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
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
struct Foo {
	public int i;
}

Foo? foo;

Foo? foo_heap_owned () {
	foo = { 23 };
	return foo;
}

unowned Foo? foo_heap_unowned () {
	foo = { 42 };
	return foo;
}

void test_without_destroy () {
	{
		Foo f = foo_heap_owned ();
		assert (f.i == 23);
	}
	{
		Foo f = (Foo) foo_heap_owned ();
		assert (f.i == 23);
	}
	{
		Foo f = (!) foo_heap_owned ();
		assert (f.i == 23);
	}
	{
		Foo f = foo_heap_unowned ();
		assert (f.i == 42);
	}
	{
		Foo f = (Foo) foo_heap_unowned ();
		assert (f.i == 42);
	}
	{
		Foo f = (!) foo_heap_unowned ();
		assert (f.i == 42);
	}
}

struct Bar {
	public string s;
}

Bar? bar;

Bar? bar_heap_owned () {
	bar = { "bar" };
	return bar;
}

unowned Bar? bar_heap_unowned () {
	bar = { "manam" };
	return bar;
}

void test_with_destroy () {
	{
		Bar b = bar_heap_owned ();
		assert (b.s == "bar");
	}
	{
		Bar b = (Bar) bar_heap_owned ();
		assert (b.s == "bar");
	}
	{
		Bar b = (!) bar_heap_owned ();
		assert (b.s == "bar");
	}
	{
		Bar b = bar_heap_unowned ();
		assert (b.s == "manam");
	}
	{
		Bar b = (Bar) bar_heap_unowned ();
		assert (b.s == "manam");
	}
	{
		Bar b = (!) bar_heap_unowned ();
		assert (b.s == "manam");
	}
	{
		unowned Bar b = bar_heap_unowned ();
		assert (b.s == "manam");
	}
	{
		unowned Bar b = (Bar) bar_heap_unowned ();
		assert (b.s == "manam");
	}
	{
		unowned Bar b = (!) bar_heap_unowned ();
		assert (b.s == "manam");
	}
}

void main () {
	test_without_destroy ();
	test_with_destroy ();
}