summaryrefslogtreecommitdiff
path: root/tests/methods/array-length-type.vala
blob: 942bd5fcd07fd84c6686afab20ad3e2bb919d304 (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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
[CCode (array_length_type = "guint8")]
delegate int[] FooFunc ([CCode (array_length_type = "guint8")] owned int[] p);

interface IFoo {
	[CCode (array_length_type = "guint8")]
	public abstract int[] manam { get; set; }

	[CCode (array_length_type = "guint8")]
	public abstract int[] get_foo ();
	public abstract void set_foo ([CCode (array_length_type = "guint8")] out int[] p);
}

class Foo : IFoo {
	public int[] manam { get; set; }

	[CCode (array_length_type = "guint8")]
	public virtual int[] manar { get; set; }

	public int[] get_foo () {
		var res = new int[255];
		res[254] = 4711;
		return res;
	}

	public void set_foo (out int[] p) {
		p = new int[255];
		p[254] = 4711;
	}

	[CCode (array_length_type = "guint8")]
	public virtual int[] get_bar () {
		var res = new int[255];
		res[254] = 4711;
		return res;
	}

	public virtual void set_bar ([CCode (array_length_type = "guint8")] out int[] p) {
		p = new int[255];
		p[254] = 4711;
	}

	public Foo () {
		{
			var a = get_foo ();
			assert (a.length == 255);
			assert (a[254] == 4711);
		}
		{
			int[] a = null;
			set_foo (out a);
			assert (a.length == 255);
			assert (a[254] == 4711);
		}
	}
}

class Bar : Foo {
	public override int[] manar { get; set; }

	public override int[] get_bar () {
		var res = new int[255];
		res[254] = 4711;
		return res;
	}

	public override void set_bar (out int[] p) {
		p = new int[255];
		p[254] = 4711;
	}

	public Bar () {
		{
			var a = get_foo ();
			assert (a.length == 255);
			assert (a[254] == 4711);
		}
		{
			int[] a = null;
			set_foo (out a);
			assert (a.length == 255);
			assert (a[254] == 4711);
		}
		{
			var a = get_bar ();
			assert (a.length == 255);
			assert (a[254] == 4711);
		}
		{
			int[] a = null;
			set_bar (out a);
			assert (a.length == 255);
			assert (a[254] == 4711);
		}
	}
}

[CCode (array_length_type = "guint8")]
int[] get_foo () {
	var res = new int[255];
	res[254] = 4711;
	return res;
}

void set_foo ([CCode (array_length_type = "guint8")] out int[] p) {
	p = new int[255];
	p[254] = 4711;
}

[CCode (array_length_type = "guint8")]
int[] foo_func ([CCode (array_length_type = "guint8")] owned int[] p) {
	return p;
}

void main () {
	{
		FooFunc f = (a) => { return a; };
		int[] a = new int[255];
		a[254] = 4711;
		a = f ((owned) a);
		assert (a.length == 255);
		assert (a[254] == 4711);
	}
	{
		FooFunc f = (FooFunc) foo_func;
		int[] a = new int[255];
		a[254] = 4711;
		a = f ((owned) a);
		assert (a.length == 255);
		assert (a[254] == 4711);
	}
	{
		var a = get_foo ();
		assert (a.length == 255);
		assert (a[254] == 4711);
	}
	{
		int[] a = null;
		set_foo (out a);
		assert (a.length == 255);
		assert (a[254] == 4711);
	}
	{
		var foo = new Foo ();
		foo.manam = new int[255];
		foo.manam[254] = 4711;
		assert (foo.manam.length == 255);
		assert (foo.manam[254] == 4711);
	}
	{
		var bar = new Bar ();
		bar.manar = new int[255];
		bar.manar[254] = 4711;
		assert (bar.manar.length == 255);
		assert (bar.manar[254] == 4711);
	}
}