1
// Tencent is pleased to support the open source community by making ncnn available.
3
// Copyright (C) 2023 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 ncnn::Mat IntArrayMat(int a0)
25
static ncnn::Mat IntArrayMat(int a0, int a1)
34
static ncnn::Mat IntArrayMat(int a0, int a1, int a2)
44
static ncnn::Mat IntArrayMat(int a0, int a1, int a2, int a3)
55
static void print_int_array(const ncnn::Mat& a)
60
for (int i = 0; i < a.w; i++)
62
fprintf(stderr, " %d", pa[i]);
64
fprintf(stderr, " ]");
67
static int test_copyto(const ncnn::Mat& self, const ncnn::Mat& src, const ncnn::Mat& starts, const ncnn::Mat& axes)
70
pd.set(9, starts); // starts
71
pd.set(11, axes); // axes
73
std::vector<ncnn::Mat> weights(0);
75
std::vector<ncnn::Mat> as(2);
79
int ret = test_layer("CopyTo", pd, weights, as, 1);
82
fprintf(stderr, "test_copyto failed self.dims=%d self=(%d %d %d %d) src.dims=%d src=(%d %d %d %d)", self.dims, self.w, self.h, self.d, self.c, src.dims, src.w, src.h, src.d, src.c);
83
fprintf(stderr, " starts=");
84
print_int_array(starts);
85
fprintf(stderr, " axes=");
86
print_int_array(axes);
87
fprintf(stderr, "\n");
93
static int test_copyto_0()
106
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
108
for (int j = 0; j < sizeof(b) / sizeof(b[0]); j++)
110
const ncnn::Mat& self = a[i];
111
const ncnn::Mat& src = b[j];
114
|| test_copyto(self, src, IntArrayMat(0), IntArrayMat(0))
115
|| test_copyto(self, src, IntArrayMat(13), IntArrayMat(-1))
116
|| test_copyto(self, src, IntArrayMat(28), IntArrayMat(0))
117
|| test_copyto(self, src, IntArrayMat(32), ncnn::Mat());
127
static int test_copyto_1()
143
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
145
for (int j = 0; j < sizeof(b) / sizeof(b[0]); j++)
147
const ncnn::Mat& self = a[i];
148
const ncnn::Mat& src = b[j];
151
|| test_copyto(self, src, IntArrayMat(0, 0), IntArrayMat(0, 1))
152
|| test_copyto(self, src, IntArrayMat(13, 1), IntArrayMat(-2, -1))
153
|| test_copyto(self, src, IntArrayMat(28, 3), IntArrayMat(0, 1))
154
|| test_copyto(self, src, IntArrayMat(32, 10), IntArrayMat(0, 1));
164
static int test_copyto_2()
167
RandomMat(32, 42, 81),
168
RandomMat(33, 57, 80),
169
RandomMat(36, 34, 88)
172
RandomMat(1, 14, 23),
173
RandomMat(12, 1, 28),
174
RandomMat(11, 8, 32),
183
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
185
for (int j = 0; j < sizeof(b) / sizeof(b[0]); j++)
187
const ncnn::Mat& self = a[i];
188
const ncnn::Mat& src = b[j];
191
|| test_copyto(self, src, IntArrayMat(0, 0, 0), IntArrayMat(0, 1, 2))
192
|| test_copyto(self, src, IntArrayMat(13, 1, 0), IntArrayMat(-3, -2, -1))
193
|| test_copyto(self, src, IntArrayMat(28, 3, 4), IntArrayMat(0, 1, 2))
194
|| test_copyto(self, src, IntArrayMat(32, 0, 5), IntArrayMat(0, 1, 2));
204
static int test_copyto_3()
207
RandomMat(12, 42, 7, 81),
208
RandomMat(13, 57, 5, 80),
209
RandomMat(16, 34, 6, 88)
212
RandomMat(1, 14, 2, 23),
213
RandomMat(12, 1, 3, 28),
214
RandomMat(11, 8, 1, 32),
226
for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
228
for (int j = 0; j < sizeof(b) / sizeof(b[0]); j++)
230
const ncnn::Mat& self = a[i];
231
const ncnn::Mat& src = b[j];
234
|| test_copyto(self, src, IntArrayMat(0, 0, 0, 0), IntArrayMat(0, 1, 2, 3))
235
|| test_copyto(self, src, IntArrayMat(13, 1, 1, 0), IntArrayMat(-4, -3, 2, 3))
236
|| test_copyto(self, src, IntArrayMat(28, 0, 3, 4), IntArrayMat(0, 1, 2, 3))
237
|| test_copyto(self, src, IntArrayMat(32, 2, 0, 5), IntArrayMat(0, 1, 2, 3));