1
// Tencent is pleased to support the open source community by making ncnn available.
3
// Copyright (C) 2022 THL A29 Limited, a Tencent company. All rights reserved.
5
// Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
6
// in compliance with the License. You may obtain a copy of the License at
8
// https://opensource.org/licenses/BSD-3-Clause
10
// Unless required by applicable law or agreed to in writing, software distributed
11
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
12
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
13
// specific language governing permissions and limitations under the License.
17
static int test_tile(const ncnn::Mat& a, int axis, int tiles)
23
std::vector<ncnn::Mat> weights(0);
25
int ret = test_layer("Tile", pd, weights, a);
28
fprintf(stderr, "test_tile failed a.dims=%d a=(%d %d %d %d) axis=%d tiles=%d\n", a.dims, a.w, a.h, a.d, a.c, axis, tiles);
34
static ncnn::Mat IntArrayMat(int a0)
42
static ncnn::Mat IntArrayMat(int a0, int a1)
51
static ncnn::Mat IntArrayMat(int a0, int a1, int a2)
61
static ncnn::Mat IntArrayMat(int a0, int a1, int a2, int a3)
72
static void print_int_array(const ncnn::Mat& a)
77
for (int i = 0; i < a.w; i++)
79
fprintf(stderr, " %d", pa[i]);
81
fprintf(stderr, " ]");
84
static int test_tile(const ncnn::Mat& a, const ncnn::Mat& repeats)
89
std::vector<ncnn::Mat> weights(0);
91
int ret = test_layer("Tile", pd, weights, a);
94
fprintf(stderr, "test_tile failed a.dims=%d a=(%d %d %d %d) repeats=", a.dims, a.w, a.h, a.d, a.c);
95
print_int_array(repeats);
96
fprintf(stderr, "\n");
102
static int test_tile_0()
104
ncnn::Mat a = RandomMat(5, 6, 7, 24);
105
ncnn::Mat b = RandomMat(7, 8, 9, 12);
106
ncnn::Mat c = RandomMat(3, 4, 5, 13);
109
|| test_tile(a, 0, 3)
110
|| test_tile(a, 1, 4)
111
|| test_tile(a, 2, 5)
112
|| test_tile(a, 3, 2)
113
|| test_tile(b, 0, 3)
114
|| test_tile(b, 1, 4)
115
|| test_tile(b, 2, 1)
116
|| test_tile(b, 3, 2)
117
|| test_tile(c, 0, 3)
118
|| test_tile(c, 1, 4)
119
|| test_tile(c, 2, 5)
120
|| test_tile(c, 3, 2)
122
|| test_tile(a, IntArrayMat(3))
123
|| test_tile(a, IntArrayMat(2, 4))
124
|| test_tile(a, IntArrayMat(2, 2, 5))
125
|| test_tile(a, IntArrayMat(3, 1, 3, 2))
126
|| test_tile(b, IntArrayMat(3, 1))
127
|| test_tile(b, IntArrayMat(4, 1, 4))
128
|| test_tile(b, IntArrayMat(2, 2, 2, 1))
129
|| test_tile(b, IntArrayMat(3, 2, 1))
130
|| test_tile(c, IntArrayMat(3))
131
|| test_tile(c, IntArrayMat(1, 1, 4))
132
|| test_tile(c, IntArrayMat(2, 2, 5))
133
|| test_tile(c, IntArrayMat(3, 2, 1, 9));
136
static int test_tile_1()
138
ncnn::Mat a = RandomMat(5, 7, 24);
139
ncnn::Mat b = RandomMat(7, 9, 12);
140
ncnn::Mat c = RandomMat(3, 5, 13);
143
|| test_tile(a, 0, 5)
144
|| test_tile(a, 1, 4)
145
|| test_tile(a, 2, 4)
146
|| test_tile(b, 0, 3)
147
|| test_tile(b, 1, 3)
148
|| test_tile(b, 2, 3)
149
|| test_tile(c, 0, 1)
150
|| test_tile(c, 1, 2)
151
|| test_tile(c, 2, 2)
153
|| test_tile(a, IntArrayMat(5))
154
|| test_tile(a, IntArrayMat(1, 4))
155
|| test_tile(a, IntArrayMat(2, 1, 4))
156
|| test_tile(a, IntArrayMat(1, 2, 1, 4))
157
|| test_tile(b, IntArrayMat(3))
158
|| test_tile(b, IntArrayMat(1, 3, 3))
159
|| test_tile(b, IntArrayMat(2, 3))
160
|| test_tile(b, IntArrayMat(2, 3, 3, 3))
161
|| test_tile(c, IntArrayMat(1))
162
|| test_tile(c, IntArrayMat(2, 1))
163
|| test_tile(c, IntArrayMat(2, 2, 2))
164
|| test_tile(c, IntArrayMat(2, 1, 2, 1));
167
static int test_tile_2()
169
ncnn::Mat a = RandomMat(15, 24);
170
ncnn::Mat b = RandomMat(17, 12);
171
ncnn::Mat c = RandomMat(19, 13);
174
|| test_tile(a, 0, 2)
175
|| test_tile(a, 1, 1)
176
|| test_tile(b, 0, 3)
177
|| test_tile(b, 1, 4)
178
|| test_tile(c, 0, 5)
179
|| test_tile(c, 1, 6)
181
|| test_tile(a, IntArrayMat(2))
182
|| test_tile(a, IntArrayMat(1, 1))
183
|| test_tile(a, IntArrayMat(4, 1, 1))
184
|| test_tile(a, IntArrayMat(2, 4, 4, 1))
185
|| test_tile(b, IntArrayMat(3))
186
|| test_tile(b, IntArrayMat(2, 4))
187
|| test_tile(b, IntArrayMat(2, 4, 3, 1))
188
|| test_tile(b, IntArrayMat(1, 2, 1, 4))
189
|| test_tile(c, IntArrayMat(5))
190
|| test_tile(c, IntArrayMat(6, 1))
191
|| test_tile(c, IntArrayMat(6, 1, 6))
192
|| test_tile(c, IntArrayMat(3, 2, 1, 1));
195
static int test_tile_3()
197
ncnn::Mat a = RandomMat(128);
198
ncnn::Mat b = RandomMat(124);
199
ncnn::Mat c = RandomMat(127);
202
|| test_tile(a, 0, 1)
203
|| test_tile(a, 0, 2)
204
|| test_tile(b, 0, 3)
205
|| test_tile(c, 0, 4)
207
|| test_tile(a, IntArrayMat(10))
208
|| test_tile(a, IntArrayMat(10, 1))
209
|| test_tile(a, IntArrayMat(5, 2, 1))
210
|| test_tile(a, IntArrayMat(2, 2, 2, 3))
211
|| test_tile(b, IntArrayMat(2))
212
|| test_tile(b, IntArrayMat(2, 2))
213
|| test_tile(b, IntArrayMat(2, 2, 1))
214
|| test_tile(b, IntArrayMat(4, 1, 2, 2))
215
|| test_tile(c, IntArrayMat(3))
216
|| test_tile(c, IntArrayMat(4, 3))
217
|| test_tile(c, IntArrayMat(1))
218
|| test_tile(c, IntArrayMat(1, 1))
219
|| test_tile(c, IntArrayMat(1, 1, 1))
220
|| test_tile(c, IntArrayMat(1, 3, 2, 2));