onnx_test.cpp 38 KB
Newer Older
Scott Thornton's avatar
Scott Thornton committed
1
2
#include <iostream>
#include <vector>
Paul's avatar
Paul committed
3
4
5
6
#include <migraphx/literal.hpp>
#include <migraphx/operators.hpp>
#include <migraphx/program.hpp>
#include <migraphx/instruction.hpp>
Shucai Xiao's avatar
Shucai Xiao committed
7
#include <migraphx/instruction_ref.hpp>
Paul's avatar
Paul committed
8
#include <migraphx/onnx.hpp>
Scott Thornton's avatar
Scott Thornton committed
9
10
#include "test.hpp"

Khalique's avatar
Khalique committed
11
TEST_CASE(acos_test)
Scott Thornton's avatar
Scott Thornton committed
12
{
Paul's avatar
Paul committed
13
    migraphx::program p;
Khalique's avatar
Khalique committed
14
15
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::acos{}, input);
Scott Thornton's avatar
Scott Thornton committed
16

Khalique's avatar
Khalique committed
17
    auto prog = migraphx::parse_onnx("acos_test.onnx");
Scott Thornton's avatar
Scott Thornton committed
18
19
20
21

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
22
TEST_CASE(add_bcast_test)
23
{
Paul's avatar
Paul committed
24
    migraphx::program p;
Khalique's avatar
Khalique committed
25
26
27
28
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4}});
    auto l2 = p.add_instruction(migraphx::op::broadcast{1, l0->get_shape().lens()}, l1);
    p.add_instruction(migraphx::op::add{}, l0, l2);
Paul's avatar
Paul committed
29

Khalique's avatar
Khalique committed
30
    auto prog = migraphx::parse_onnx("add_bcast_test.onnx");
Paul's avatar
Paul committed
31

32
33
34
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
35
TEST_CASE(add_fp16_test)
Scott Thornton's avatar
Scott Thornton committed
36
{
Paul's avatar
Paul committed
37
    migraphx::program p;
Khalique's avatar
Khalique committed
38
39
40
41
42
43
    auto l0 =
        p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::half_type, {1}}, {1.5}});
    auto l1 =
        p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::half_type, {1}}, {2.5}});
    p.add_instruction(migraphx::op::add{}, l0, l1);
    auto prog = migraphx::parse_onnx("add_fp16_test.onnx");
Scott Thornton's avatar
Scott Thornton committed
44
45
46
47

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
48
TEST_CASE(add_scalar_test)
49
{
Paul's avatar
Paul committed
50
    migraphx::program p;
Khalique's avatar
Khalique committed
51
    auto l1 = p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type}, {1}});
52
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
53
    auto m1 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
54
    p.add_instruction(migraphx::op::add{}, l0, m1);
Khalique's avatar
Khalique committed
55
    auto prog = migraphx::parse_onnx("add_scalar_test.onnx");
56
57
58
59

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
60
TEST_CASE(argmax_test)
Khalique's avatar
Khalique committed
61
{
Paul's avatar
Paul committed
62
    migraphx::program p;
Khalique's avatar
Khalique committed
63
64
65
66
    auto l0  = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto ins = p.add_instruction(migraphx::op::argmax{2}, l0);
    p.add_instruction(migraphx::op::squeeze{{2}}, ins);
    auto prog = migraphx::parse_onnx("argmax_test.onnx");
Khalique's avatar
Khalique committed
67
68
69
70

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
71
TEST_CASE(argmin_test)
72
{
Paul's avatar
Paul committed
73
    migraphx::program p;
Khalique's avatar
Khalique committed
74
75
76
77
    auto l0  = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto ins = p.add_instruction(migraphx::op::argmin{3}, l0);
    p.add_instruction(migraphx::op::squeeze{{3}}, ins);
    auto prog = migraphx::parse_onnx("argmin_test.onnx");
78
79
80
81

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
82
TEST_CASE(asin_test)
83
{
Paul's avatar
Paul committed
84
    migraphx::program p;
Khalique's avatar
Khalique committed
85
86
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::asin{}, input);
87

Khalique's avatar
Khalique committed
88
    auto prog = migraphx::parse_onnx("asin_test.onnx");
89
90
91
92

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
93
TEST_CASE(atan_test)
Khalique's avatar
Khalique committed
94
{
Paul's avatar
Paul committed
95
    migraphx::program p;
Khalique's avatar
Khalique committed
96
97
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::atan{}, input);
Khalique's avatar
Khalique committed
98

Khalique's avatar
Khalique committed
99
    auto prog = migraphx::parse_onnx("atan_test.onnx");
Khalique's avatar
Khalique committed
100
101
102
103

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
104
TEST_CASE(cast_test)
Khalique's avatar
Khalique committed
105
{
Paul's avatar
Paul committed
106
    migraphx::program p;
Khalique's avatar
Khalique committed
107
108
    auto l = p.add_parameter("x", migraphx::shape{migraphx::shape::half_type, {10}});
    p.add_instruction(migraphx::op::convert{migraphx::shape::float_type}, l);
Khalique's avatar
Khalique committed
109

Khalique's avatar
Khalique committed
110
    auto prog = migraphx::parse_onnx("cast_test.onnx");
Khalique's avatar
Khalique committed
111
112
113
    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
114
115
116
117
118
119
120
121
122
123
124
TEST_CASE(ceil_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::ceil{}, input);

    auto prog = migraphx::parse_onnx("ceil_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
125
TEST_CASE(clip_test)
Khalique's avatar
Khalique committed
126
127
{
    migraphx::program p;
Khalique's avatar
Khalique committed
128
129
130
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    p.add_instruction(migraphx::op::clip{6.0, 0.0}, l0);
    auto prog = migraphx::parse_onnx("clip_test.onnx");
Khalique's avatar
Khalique committed
131

132
133
134
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
135
TEST_CASE(concat_test)
Shucai Xiao's avatar
Shucai Xiao committed
136
137
{
    migraphx::program p;
Khalique's avatar
Khalique committed
138
139
140
141
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 4, 3}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {7, 4, 3}});
    p.add_instruction(migraphx::op::concat{0}, l0, l1);
    auto prog = migraphx::parse_onnx("concat_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
142
143
144
145

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
146
TEST_CASE(constant_test)
Shucai Xiao's avatar
Shucai Xiao committed
147
148
{
    migraphx::program p;
Khalique's avatar
Khalique committed
149
150
    p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type, {3}}, {0, 1, 2}});
    auto prog = migraphx::parse_onnx("constant_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
151
152
153
154

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
155
TEST_CASE(constant_fill_test)
Shucai Xiao's avatar
Shucai Xiao committed
156
{
Khalique's avatar
Khalique committed
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179

    migraphx::program p;
    migraphx::shape s{migraphx::shape::float_type, {2, 3}};
    std::vector<float> value(s.elements(), 1.0);
    p.add_literal(migraphx::literal{s, value});
    auto prog = migraphx::parse_onnx("constant_fill_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(constant_fill_input_as_shape_test)
{
    migraphx::program p;
    auto l0 = p.add_literal(migraphx::literal{{migraphx::shape::int32_type, {2}}, {2, 3}});
    std::vector<std::size_t> dims(l0->get_shape().elements());
    migraphx::literal ls = l0->get_literal();
    ls.visit([&](auto s) { dims.assign(s.begin(), s.end()); });
    migraphx::shape s{migraphx::shape::float_type, dims};
    std::vector<float> value(s.elements(), 1.0);
    p.add_literal(migraphx::literal{s, value});
    auto prog = migraphx::parse_onnx("constant_fill_input_as_shape_test.onnx");

    EXPECT(p == prog);
Shucai Xiao's avatar
Shucai Xiao committed
180
181
}

Khalique's avatar
Khalique committed
182
TEST_CASE(constant_scalar_test)
183
184
{
    migraphx::program p;
Khalique's avatar
Khalique committed
185
186
    p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::int32_type, {1}}, {1}});
    auto prog = migraphx::parse_onnx("constant_scalar_test.onnx");
187
188
189
190

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
191
TEST_CASE(const_of_shape_empty_input_test)
Shucai Xiao's avatar
Shucai Xiao committed
192
193
{
    migraphx::program p;
Khalique's avatar
Khalique committed
194
195
196
197
    p.add_literal(migraphx::literal());
    migraphx::shape s(migraphx::shape::int64_type, {1}, {0});
    std::vector<int64_t> vec(s.elements(), 10);
    p.add_literal(migraphx::literal(s, vec));
Shucai Xiao's avatar
Shucai Xiao committed
198

Khalique's avatar
Khalique committed
199
    auto prog = migraphx::parse_onnx("const_of_shape_empty_input_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
200
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
201
202
}

Khalique's avatar
Khalique committed
203
TEST_CASE(const_of_shape_float_test)
204
205
{
    migraphx::program p;
Khalique's avatar
Khalique committed
206
207
208
209
210
    migraphx::shape ss(migraphx::shape::int32_type, {3});
    p.add_literal(migraphx::literal(ss, {2, 3, 4}));
    migraphx::shape s(migraphx::shape::float_type, {2, 3, 4});
    std::vector<float> vec(s.elements(), 10.0f);
    p.add_literal(migraphx::literal(s, vec));
211

Khalique's avatar
Khalique committed
212
    auto prog = migraphx::parse_onnx("const_of_shape_float_test.onnx");
213
214
215
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
216
TEST_CASE(const_of_shape_int64_test)
217
218
{
    migraphx::program p;
Khalique's avatar
Khalique committed
219
220
221
222
223
    migraphx::shape ss(migraphx::shape::int32_type, {3});
    p.add_literal(migraphx::literal(ss, {2, 3, 4}));
    migraphx::shape s(migraphx::shape::int64_type, {2, 3, 4});
    std::vector<int64_t> vec(s.elements(), 10);
    p.add_literal(migraphx::literal(s, vec));
224

Khalique's avatar
Khalique committed
225
    auto prog = migraphx::parse_onnx("const_of_shape_int64_test.onnx");
226
227
228
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
229
TEST_CASE(const_of_shape_no_value_attr_test)
230
231
{
    migraphx::program p;
Khalique's avatar
Khalique committed
232
233
234
235
236
    migraphx::shape ss(migraphx::shape::int32_type, {3});
    p.add_literal(migraphx::literal(ss, {2, 3, 4}));
    migraphx::shape s(migraphx::shape::float_type, {2, 3, 4});
    std::vector<float> vec(s.elements(), 0.0f);
    p.add_literal(migraphx::literal(s, vec));
237

Khalique's avatar
Khalique committed
238
    auto prog = migraphx::parse_onnx("const_of_shape_no_value_attr_test.onnx");
239
240
241
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
242
TEST_CASE(conv_autopad_fail_test)
243
{
Khalique's avatar
Khalique committed
244
245
    EXPECT(test::throws([&] { migraphx::parse_onnx("conv_autopad_fail_test.onnx"); }));
}
246

Khalique's avatar
Khalique committed
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
TEST_CASE(conv_bias_test)
{
    migraphx::program p;
    auto l0       = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1       = p.add_parameter("1", {migraphx::shape::float_type, {1, 3, 5, 5}});
    auto l2       = p.add_parameter("2", {migraphx::shape::float_type, {1}});
    uint64_t axis = 1;
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
    p.add_instruction(migraphx::op::add{}, l3, l4);

    auto prog = migraphx::parse_onnx("conv_bias_test.onnx");
    EXPECT(p == prog);
}

TEST_CASE(conv_bn_relu_maxpool_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1 = p.add_parameter("1", {migraphx::shape::float_type, {1, 3, 5, 5}});
    auto l2 = p.add_parameter("2", {migraphx::shape::float_type, {1}});

    auto p3       = p.add_parameter("3", {migraphx::shape::float_type, {1}});
    auto p4       = p.add_parameter("4", {migraphx::shape::float_type, {1}});
    auto p5       = p.add_parameter("5", {migraphx::shape::float_type, {1}});
    auto p6       = p.add_parameter("6", {migraphx::shape::float_type, {1}});
    uint64_t axis = 1;
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
    auto l5       = p.add_instruction(migraphx::op::add{}, l3, l4);
    auto l6 = p.add_instruction(migraphx::op::batch_norm_inference{1.0e-5f}, l5, p3, p4, p5, p6);
    auto l7 = p.add_instruction(migraphx::op::relu{}, l6);
    p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l7);

    auto prog = migraphx::parse_onnx("conv_bn_relu_maxpool_test.onnx");
    EXPECT(p == prog);
}

TEST_CASE(conv_relu_maxpool_test)
{
    migraphx::program p;
    auto l0       = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1       = p.add_parameter("1", {migraphx::shape::float_type, {1, 3, 5, 5}});
    auto l2       = p.add_parameter("2", {migraphx::shape::float_type, {1}});
    uint64_t axis = 1;
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
    auto l5       = p.add_instruction(migraphx::op::add{}, l3, l4);
    auto l6       = p.add_instruction(migraphx::op::relu{}, l5);
    p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l6);

    auto prog = migraphx::parse_onnx("conv_relu_maxpool_test.onnx");
    EXPECT(p == prog);
}

TEST_CASE(conv_relu_maxpool_x2_test)
{
    migraphx::program p;
    auto l0       = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1       = p.add_parameter("1", {migraphx::shape::float_type, {5, 3, 5, 5}});
    auto l2       = p.add_parameter("2", {migraphx::shape::float_type, {5}});
    uint64_t axis = 1;
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
    auto l5       = p.add_instruction(migraphx::op::add{}, l3, l4);
    auto l6       = p.add_instruction(migraphx::op::relu{}, l5);
    auto l7 = p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l6);

    auto l8  = p.add_parameter("3", {migraphx::shape::float_type, {1, 5, 5, 5}});
    auto l9  = p.add_parameter("4", {migraphx::shape::float_type, {1}});
    auto l10 = p.add_instruction(migraphx::op::convolution{}, l7, l8);
    auto l11 = p.add_instruction(migraphx::op::broadcast{axis, l10->get_shape().lens()}, l9);
    auto l12 = p.add_instruction(migraphx::op::add{}, l10, l11);
    auto l13 = p.add_instruction(migraphx::op::relu{}, l12);
    p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l13);

    auto prog = migraphx::parse_onnx("conv_relu_maxpool_x2_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
328
TEST_CASE(cos_test)
329
330
331
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
Khalique's avatar
Khalique committed
332
    p.add_instruction(migraphx::op::cos{}, input);
333

Khalique's avatar
Khalique committed
334
    auto prog = migraphx::parse_onnx("cos_test.onnx");
335
336
337
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
338
TEST_CASE(cosh_test)
339
340
341
342
343
344
345
346
347
348
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::cosh{}, input);

    auto prog = migraphx::parse_onnx("cosh_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
349
TEST_CASE(dropout_test)
Shucai Xiao's avatar
Shucai Xiao committed
350
351
{
    migraphx::program p;
Khalique's avatar
Khalique committed
352
353
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 2, 2}});
    p.add_instruction(migraphx::op::identity{}, input);
Shucai Xiao's avatar
Shucai Xiao committed
354

Khalique's avatar
Khalique committed
355
    auto prog = migraphx::parse_onnx("dropout_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
356
357
358
359

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
360
361
362
363
364
365
366
367
368
369
370
TEST_CASE(elu_test)
{
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    p.add_instruction(migraphx::op::elu{0.01}, input);

    auto prog = migraphx::parse_onnx("elu_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
371
TEST_CASE(erf_test)
372
373
{
    migraphx::program p;
Khalique's avatar
Khalique committed
374
375
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10, 15}});
    p.add_instruction(migraphx::op::erf{}, input);
Khalique's avatar
Khalique committed
376

Khalique's avatar
Khalique committed
377
    auto prog = migraphx::parse_onnx("erf_test.onnx");
Khalique's avatar
Khalique committed
378
379
380
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
381
TEST_CASE(exp_test)
382
383
384
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
Khalique's avatar
Khalique committed
385
    p.add_instruction(migraphx::op::exp{}, input);
Khalique's avatar
Khalique committed
386

Khalique's avatar
Khalique committed
387
    auto prog = migraphx::parse_onnx("exp_test.onnx");
Khalique's avatar
Khalique committed
388
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
389
390
}

Khalique's avatar
Khalique committed
391
TEST_CASE(expand_test)
392
393
{
    migraphx::program p;
Khalique's avatar
Khalique committed
394
395
396
397
398
    migraphx::shape s(migraphx::shape::float_type, {3, 1, 1});
    auto param = p.add_parameter("x", s);
    migraphx::shape ss(migraphx::shape::int32_type, {4});
    p.add_literal(migraphx::literal(ss, {2, 3, 4, 5}));
    p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, param);
Khalique's avatar
Khalique committed
399

Khalique's avatar
Khalique committed
400
    auto prog = migraphx::parse_onnx("expand_test.onnx");
Khalique's avatar
Khalique committed
401
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
402
403
}

Khalique's avatar
Khalique committed
404
TEST_CASE(flatten_test)
405
406
407
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
408
409
410
    p.add_instruction(migraphx::op::flatten{2}, l0);
    p.add_instruction(migraphx::op::flatten{1}, l0);
    auto prog = migraphx::parse_onnx("flatten_test.onnx");
411
412
413
414

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
415
416
417
418
419
420
421
422
423
424
425
TEST_CASE(floor_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::floor{}, input);

    auto prog = migraphx::parse_onnx("floor_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
426
TEST_CASE(gather_test)
427
428
{
    migraphx::program p;
Khalique's avatar
Khalique committed
429
430
431
432
433
    auto l0  = p.add_parameter("data", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1  = p.add_parameter("indices", migraphx::shape{migraphx::shape::int32_type, {2, 3}});
    int axis = 1;
    p.add_instruction(migraphx::op::gather{axis}, l0, l1);
    auto prog = migraphx::parse_onnx("gather_test.onnx");
434
435
436
437

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
438
TEST_CASE(gemm_test)
439
440
{
    migraphx::program p;
441
442
443
    auto l0    = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {5, 7}});
    auto l1    = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {11, 5}});
    auto l2    = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type});
Khalique's avatar
Khalique committed
444
445
    auto t0    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l0);
    auto t1    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l1);
446
    auto bl2   = p.add_instruction(migraphx::op::multibroadcast{{7, 11}}, l2);
Khalique's avatar
Khalique committed
447
448
    auto alpha = 2.f;
    auto beta  = 2.0f;
449
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, t1, bl2);
Khalique's avatar
Khalique committed
450
    auto prog = migraphx::parse_onnx("gemm_test.onnx");
451
452
453
454

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
455
TEST_CASE(gemm_ex_test)
456
457
{
    migraphx::program p;
Khalique's avatar
Khalique committed
458
459
460
461
462
463
464
465
    auto l0    = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 6}});
    auto l1    = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 7}});
    auto l2    = p.add_parameter("3", migraphx::shape{migraphx::shape::float_type, {1, 1, 6, 7}});
    auto t0    = p.add_instruction(migraphx::op::transpose{{0, 1, 3, 2}}, l0);
    auto alpha = 0.5f;
    auto beta  = 0.8f;
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, l1, l2);
    auto prog = migraphx::parse_onnx("gemm_ex_test.onnx");
466
467
468
469

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
470
TEST_CASE(gemm_ex_brcst_test)
471
472
{
    migraphx::program p;
Khalique's avatar
Khalique committed
473
474
475
476
477
478
479
480
481
    auto l0 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 6}});
    auto l1 = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {1, 1, 5, 7}});
    auto l2 = p.add_parameter("3", migraphx::shape{migraphx::shape::float_type, {1, 1, 6, 1}});
    auto t0 = p.add_instruction(migraphx::op::transpose{{0, 1, 3, 2}}, l0);
    std::vector<std::size_t> out_lens{1, 1, 6, 7};
    auto t2    = p.add_instruction(migraphx::op::multibroadcast{out_lens}, l2);
    auto alpha = 0.5f;
    auto beta  = 0.8f;
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, l1, t2);
Khalique's avatar
Khalique committed
482
    auto prog = migraphx::parse_onnx("gemm_ex_brcst_test.onnx");
483
484
485
486

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
487
TEST_CASE(globalavgpool_test)
488
489
{
    migraphx::program p;
Khalique's avatar
Khalique committed
490
491
492
493
494
495
496
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    auto op    = migraphx::op::pooling{"average"};
    auto lens  = input->get_shape().lens();
    op.lengths = {lens[2], lens[3]};
    p.add_instruction(op, input);

    auto prog = migraphx::parse_onnx("globalavgpool_test.onnx");
497
498
499
500

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
501
TEST_CASE(globalmaxpool_test)
Khalique's avatar
Khalique committed
502
503
{
    migraphx::program p;
Khalique's avatar
Khalique committed
504
505
506
507
508
509
510
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    auto op    = migraphx::op::pooling{"max"};
    auto lens  = input->get_shape().lens();
    op.lengths = {lens[2], lens[3]};
    p.add_instruction(op, input);

    auto prog = migraphx::parse_onnx("globalmaxpool_test.onnx");
Khalique's avatar
Khalique committed
511
512
513
514

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
515
TEST_CASE(group_conv_test)
516
517
{
    migraphx::program p;
Khalique's avatar
Khalique committed
518
519
520
521
522
523
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 4, 16, 16}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {4, 1, 3, 3}});
    migraphx::op::convolution op;
    op.group = 4;
    p.add_instruction(op, l0, l1);
    auto prog = migraphx::parse_onnx("group_conv_test.onnx");
524
525
526
527

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
528
TEST_CASE(imagescaler_test)
529
530
{
    migraphx::program p;
Khalique's avatar
Khalique committed
531
532
533
534
535
536
537
538
539
540
541
    migraphx::shape s{migraphx::shape::float_type, {1, 3, 16, 16}};
    auto l0        = p.add_parameter("0", s);
    auto scale_val = p.add_literal(0.5f);
    auto bias_vals = p.add_literal(
        migraphx::literal{migraphx::shape{migraphx::shape::float_type, {3}}, {0.01, 0.02, 0.03}});
    auto scaled_tensor = p.add_instruction(migraphx::op::scalar{s.lens()}, scale_val);
    auto img_scaled    = p.add_instruction(migraphx::op::mul{}, l0, scaled_tensor);
    auto bias_bcast    = p.add_instruction(migraphx::op::broadcast{1, s.lens()}, bias_vals);
    p.add_instruction(migraphx::op::add{}, img_scaled, bias_bcast);

    auto prog = migraphx::parse_onnx("imagescaler_test.onnx");
542
543
544
545

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
546
TEST_CASE(implicit_add_bcast_test)
547
548
{
    migraphx::program p;
Khalique's avatar
Khalique committed
549
550
551
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4, 1}});
    auto l3 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
552
    p.add_instruction(migraphx::op::add{}, l0, l3);
Khalique's avatar
Khalique committed
553
554

    auto prog = migraphx::parse_onnx("implicit_add_bcast_test.onnx");
555
556
557
558

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
559
TEST_CASE(implicit_pow_bcast_test)
560
561
{
    migraphx::program p;
Khalique's avatar
Khalique committed
562
563
564
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4, 1}});
    auto l3 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
565
    p.add_instruction(migraphx::op::pow{}, l0, l3);
Khalique's avatar
Khalique committed
566
567

    auto prog = migraphx::parse_onnx("implicit_pow_bcast_test.onnx");
568
569
570
571

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
572
TEST_CASE(implicit_sub_bcast_test)
573
574
575
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
576
577
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {4, 5}});
    auto l3 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
578
    p.add_instruction(migraphx::op::sub{}, l0, l3);
Khalique's avatar
Khalique committed
579
580

    auto prog = migraphx::parse_onnx("implicit_sub_bcast_test.onnx");
581
582
583
584

    EXPECT(p == prog);
}

585
586
587
588
589
590
591
592
593
594
595
596
597
TEST_CASE(initializer_not_an_input)
{
    migraphx::program p;
    std::vector<float> w = {1, 2, 3, 4, 5, 6, 7, 8};
    auto l1 = p.add_literal(migraphx::literal({migraphx::shape::float_type, {2, 4}}, w));
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {5, 2}});
    p.add_instruction(migraphx::op::dot{}, l0, l1);

    auto prog = migraphx::parse_onnx("initializer_not_an_input.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
598
TEST_CASE(leaky_relu_test)
599
600
{
    migraphx::program p;
Khalique's avatar
Khalique committed
601
602
603
604
605
    float alpha = 0.01f;
    auto l0     = p.add_parameter("0", {migraphx::shape::float_type, {3}});
    p.add_instruction(migraphx::op::leaky_relu{alpha}, l0);

    auto prog = migraphx::parse_onnx("leaky_relu_test.onnx");
606
607
608
609

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
610
TEST_CASE(log_test)
611
612
{
    migraphx::program p;
Khalique's avatar
Khalique committed
613
614
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::log{}, input);
615

Khalique's avatar
Khalique committed
616
    auto prog = migraphx::parse_onnx("log_test.onnx");
617
618
619
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
620
TEST_CASE(logsoftmax_test)
621
622
{
    migraphx::program p;
Khalique's avatar
Khalique committed
623
624
625
626
    auto l0  = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    int axis = 1;
    p.add_instruction(migraphx::op::logsoftmax{axis}, l0);
    auto prog = migraphx::parse_onnx("logsoftmax_test.onnx");
627
628
629
630

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
631
TEST_CASE(lrn_test)
632
633
{
    migraphx::program p;
Khalique's avatar
Khalique committed
634
635
636
637
638
639
640
641
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 28, 24, 24}});
    migraphx::op::lrn op;
    op.size  = 5;
    op.alpha = 0.0001;
    op.beta  = 0.75;
    op.bias  = 1.0;
    p.add_instruction(op, l0);
    auto prog = migraphx::parse_onnx("lrn_test.onnx");
642
643
644
645

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
646
TEST_CASE(matmul_bmbm_test)
647
648
{
    migraphx::program p;
Khalique's avatar
Khalique committed
649
650
651
652
653
654
655
    auto l0  = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 6, 7}});
    auto l1  = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {5, 2, 1, 7, 8}});
    auto bl0 = p.add_instruction(migraphx::op::multibroadcast{{5, 2, 3, 6, 7}}, l0);
    auto bl1 = p.add_instruction(migraphx::op::multibroadcast{{5, 2, 3, 7, 8}}, l1);
    p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, bl0, bl1);

    auto prog = migraphx::parse_onnx("matmul_bmbm_test.onnx");
656
657
658
659

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
660
TEST_CASE(matmul_bmv_test)
661
{
Khalique's avatar
Khalique committed
662
663
664
665
666
667
668
    migraphx::program p;
    auto l0   = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 6, 7}});
    auto l1   = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {7}});
    auto sl1  = p.add_instruction(migraphx::op::unsqueeze{{1}}, l1);
    auto bsl1 = p.add_instruction(migraphx::op::multibroadcast{{3, 7, 1}}, sl1);
    auto res  = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, l0, bsl1);
    p.add_instruction(migraphx::op::squeeze{{2}}, res);
669

Khalique's avatar
Khalique committed
670
    auto prog = migraphx::parse_onnx("matmul_bmv_test.onnx");
671

Khalique's avatar
Khalique committed
672
    EXPECT(p == prog);
673
674
}

Khalique's avatar
Khalique committed
675
TEST_CASE(matmul_mv_test)
676
677
{
    migraphx::program p;
Khalique's avatar
Khalique committed
678
679
680
681
682
683
684
    auto l0  = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {6, 7}});
    auto l1  = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {7}});
    auto sl1 = p.add_instruction(migraphx::op::unsqueeze{{1}}, l1);
    auto res = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, l0, sl1);
    p.add_instruction(migraphx::op::squeeze{{1}}, res);

    auto prog = migraphx::parse_onnx("matmul_mv_test.onnx");
685
686
687
688

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
689
TEST_CASE(matmul_vbm_test)
690
691
{
    migraphx::program p;
Khalique's avatar
Khalique committed
692
693
694
695
696
697
698
699
700
701
    auto l0   = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {7}});
    auto l1   = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {5, 7, 8}});
    auto sl0  = p.add_instruction(migraphx::op::unsqueeze{{0}}, l0);
    auto bsl0 = p.add_instruction(migraphx::op::multibroadcast{{5, 1, 7}}, sl0);
    std::cout << "ONNX_TEST" << std::endl;
    auto res = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, bsl0, l1);
    std::cout << "After Dot" << std::endl;
    p.add_instruction(migraphx::op::squeeze{{1}}, res);

    auto prog = migraphx::parse_onnx("matmul_vbm_test.onnx");
702
703
704
705

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
706
TEST_CASE(matmul_vm_test)
707
708
{
    migraphx::program p;
Khalique's avatar
Khalique committed
709
710
711
712
713
714
715
    auto l0  = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {7}});
    auto l1  = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {7, 8}});
    auto sl0 = p.add_instruction(migraphx::op::unsqueeze{{0}}, l0);
    auto res = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, sl0, l1);
    p.add_instruction(migraphx::op::squeeze{{0}}, res);

    auto prog = migraphx::parse_onnx("matmul_vm_test.onnx");
716
717
718
719

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
720
TEST_CASE(matmul_vv_test)
721
722
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
723
724
    auto l0  = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {7}});
    auto l1  = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {7}});
725
726
727
728
729
730
    auto sl0 = p.add_instruction(migraphx::op::unsqueeze{{0}}, l0);
    auto sl1 = p.add_instruction(migraphx::op::unsqueeze{{1}}, l1);
    auto res = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, sl0, sl1);
    auto sr0 = p.add_instruction(migraphx::op::squeeze{{0}}, res);
    p.add_instruction(migraphx::op::squeeze{{0}}, sr0);

Khalique's avatar
Khalique committed
731
    auto prog = migraphx::parse_onnx("matmul_vv_test.onnx");
732
733
734
735

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
736
TEST_CASE(max_test)
737
738
{
    migraphx::program p;
Khalique's avatar
Khalique committed
739
740
741
742
743
    auto input0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input2 = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {3}});
    auto l0     = p.add_instruction(migraphx::op::max{}, input0, input1);
    p.add_instruction(migraphx::op::max{}, l0, input2);
744

Khalique's avatar
Khalique committed
745
746
    migraphx::parse_onnx("max_test.onnx");
}
747

Khalique's avatar
Khalique committed
748
749
750
751
752
753
754
755
756
757
TEST_CASE(min_test)
{
    migraphx::program p;
    auto input0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input2 = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {3}});
    auto l0     = p.add_instruction(migraphx::op::min{}, input0, input1);
    p.add_instruction(migraphx::op::min{}, l0, input2);

    migraphx::parse_onnx("min_test.onnx");
758
759
}

Khalique's avatar
Khalique committed
760
TEST_CASE(no_pad_test)
761
762
{
    migraphx::program p;
Khalique's avatar
Khalique committed
763
764
765
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 2}});
    p.add_instruction(migraphx::op::identity{}, l0);
    auto prog = migraphx::parse_onnx("no_pad_test.onnx");
766

Khalique's avatar
Khalique committed
767
768
769
770
771
772
773
774
775
    EXPECT(p == prog);
}

TEST_CASE(pad_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 2}});
    p.add_instruction(migraphx::op::pad{{1, 1, 1, 1}}, l0);
    auto prog = migraphx::parse_onnx("pad_test.onnx");
776
777
778
779

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
780
TEST_CASE(pow_test)
781
782
{
    migraphx::program p;
Khalique's avatar
Khalique committed
783
784
785
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    p.add_instruction(migraphx::op::pow{}, l0, l1);
786

Khalique's avatar
Khalique committed
787
    auto prog = migraphx::parse_onnx("pow_test.onnx");
788
789
790
791

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
792
793
794
795
796
797
798
799
800
801
TEST_CASE(reducemax_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    p.add_instruction(migraphx::op::reduce_max{{2}}, l0);
    auto prog = migraphx::parse_onnx("reducemax_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
802
TEST_CASE(reducemean_test)
803
804
{
    migraphx::program p;
Khalique's avatar
Khalique committed
805
806
807
808
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_mean{{2, 3}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2, 3}}, l1);
    auto prog = migraphx::parse_onnx("reducemean_test.onnx");
809
810
811
812

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
813
TEST_CASE(reducemean_keepdims_test)
814
815
{
    migraphx::program p;
Khalique's avatar
Khalique committed
816
817
818
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    p.add_instruction(migraphx::op::reduce_mean{{2}}, l0);
    auto prog = migraphx::parse_onnx("reducemean_keepdims_test.onnx");
819
820
821
822

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
823
824
825
826
827
828
829
830
831
832
833
TEST_CASE(reducemin_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_min{{2, 3}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2, 3}}, l1);
    auto prog = migraphx::parse_onnx("reducemin_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
834
TEST_CASE(reducesum_test)
Khalique's avatar
Khalique committed
835
836
{
    migraphx::program p;
Khalique's avatar
Khalique committed
837
838
839
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_sum{{2}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2}}, l1);
Khalique's avatar
Khalique committed
840
    auto prog = migraphx::parse_onnx("reducesum_test.onnx");
841
842

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
843
844
}

Khalique's avatar
Khalique committed
845
TEST_CASE(reducesum_multiaxis_test)
Khalique's avatar
Khalique committed
846
847
{
    migraphx::program p;
Khalique's avatar
Khalique committed
848
849
850
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_sum{{2, 3}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2, 3}}, l1);
Khalique's avatar
Khalique committed
851
    auto prog = migraphx::parse_onnx("reducesum_multiaxis_test.onnx");
852
853

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
854
855
}

Khalique's avatar
Khalique committed
856
TEST_CASE(reducesum_keepdims_test)
Khalique's avatar
Khalique committed
857
858
{
    migraphx::program p;
Khalique's avatar
Khalique committed
859
860
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    p.add_instruction(migraphx::op::reduce_sum{{2, 3}}, l0);
Khalique's avatar
Khalique committed
861
    auto prog = migraphx::parse_onnx("reducesum_keepdims_test.onnx");
862
863
864
865

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
866
TEST_CASE(reshape_test)
867
{
Khalique's avatar
Khalique committed
868
    migraphx::program p;
Khalique's avatar
Khalique committed
869
870
871
872
    migraphx::op::reshape op;
    std::vector<int64_t> reshape_dims{3, 8};
    p.add_literal(
        migraphx::literal{migraphx::shape{migraphx::shape::int64_type, {2}}, reshape_dims});
873
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {4, 2, 3}});
Khalique's avatar
Khalique committed
874
875
876
877
    op.dims = reshape_dims;
    p.add_instruction(op, l0);
    p.add_instruction(op, l0);
    auto prog = migraphx::parse_onnx("reshape_test.onnx");
878
879

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
880
881
}

Khalique's avatar
Khalique committed
882
TEST_CASE(reshape_non_standard_test)
883
884
{
    migraphx::program p;
Khalique's avatar
Khalique committed
885
886
887
888
889
890
891
    migraphx::op::reshape op;
    std::vector<int64_t> reshape_dims{4, 3, 2};
    migraphx::shape s{migraphx::shape::float_type, {2, 3, 4}};
    auto x      = p.add_parameter("x", s);
    auto tran_x = p.add_instruction(migraphx::op::transpose{{0, 2, 1}}, x);
    auto cont_x = p.add_instruction(migraphx::op::contiguous{}, tran_x);
    p.add_instruction(migraphx::op::reshape{{4, 3, 2}}, cont_x);
Khalique's avatar
Khalique committed
892
    auto prog = migraphx::parse_onnx("reshape_non_standard_test.onnx");
893
894
895
896

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
897
898
899
900
901
902
903
904
905
906
TEST_CASE(round_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::double_type, {10, 5}});
    p.add_instruction(migraphx::op::round{}, input);

    auto prog = migraphx::parse_onnx("round_test.onnx");
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
907
TEST_CASE(shape_test)
908
909
{
    migraphx::program p;
Khalique's avatar
Khalique committed
910
911
912
913
914
    migraphx::shape s{migraphx::shape::float_type, {3, 4, 5, 6}};
    auto l0 = p.add_parameter("x", s);
    migraphx::shape s_shape{migraphx::shape::int64_type, {4}};
    p.add_literal(s_shape, l0->get_shape().lens());
    auto prog = migraphx::parse_onnx("shape_test.onnx");
915
916
917
918

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
919
TEST_CASE(shape_gather_test)
920
921
{
    migraphx::program p;
Khalique's avatar
Khalique committed
922
923
924
925
926
927
928
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {7, 3, 10}});
    auto l1 =
        p.add_literal(migraphx::shape{migraphx::shape::int64_type, {3}}, l0->get_shape().lens());
    migraphx::shape const_shape{migraphx::shape::int32_type, {1}};
    auto l2  = p.add_literal(migraphx::literal{const_shape, {1}});
    int axis = 0;
    p.add_instruction(migraphx::op::gather{axis}, l1, l2);
Khalique's avatar
Khalique committed
929
    auto prog = migraphx::parse_onnx("shape_gather_test.onnx");
930
931
932
933

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
934
TEST_CASE(sign_test)
Khalique's avatar
Khalique committed
935
936
{
    migraphx::program p;
Khalique's avatar
Khalique committed
937
938
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::double_type, {10, 5}});
    p.add_instruction(migraphx::op::sign{}, input);
Khalique's avatar
Khalique committed
939

Khalique's avatar
Khalique committed
940
    auto prog = migraphx::parse_onnx("sign_test.onnx");
Khalique's avatar
Khalique committed
941
942
943
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
944
TEST_CASE(sin_test)
945
946
{
    migraphx::program p;
Khalique's avatar
Khalique committed
947
948
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::sin{}, input);
949

Khalique's avatar
Khalique committed
950
    auto prog = migraphx::parse_onnx("sin_test.onnx");
951
952
953
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
954
TEST_CASE(sinh_test)
955
956
{
    migraphx::program p;
Khalique's avatar
Khalique committed
957
958
959
960
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::sinh{}, input);

    auto prog = migraphx::parse_onnx("sinh_test.onnx");
961
962
963
964

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
965
TEST_CASE(slice_test)
966
967
{
    migraphx::program p;
Khalique's avatar
Khalique committed
968
969
970
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3, 2}});
    p.add_instruction(migraphx::op::slice{{0, 1}, {1, 0}, {2, 2}}, l0);
    auto prog = migraphx::parse_onnx("slice_test.onnx");
971
972
973
974

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
975
TEST_CASE(softmax_test)
Shucai Xiao's avatar
Shucai Xiao committed
976
977
{
    migraphx::program p;
Khalique's avatar
Khalique committed
978
979
980
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3}});
    p.add_instruction(migraphx::op::softmax{1}, l0);
    auto prog = migraphx::parse_onnx("softmax_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
981
982
983
984

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
985
TEST_CASE(sqrt_test)
Shucai Xiao's avatar
Shucai Xiao committed
986
987
{
    migraphx::program p;
Khalique's avatar
Khalique committed
988
989
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10, 15}});
    p.add_instruction(migraphx::op::sqrt{}, input);
Shucai Xiao's avatar
Shucai Xiao committed
990

Khalique's avatar
Khalique committed
991
    auto prog = migraphx::parse_onnx("sqrt_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
992
993
994
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
995
TEST_CASE(squeeze_unsqueeze_test)
Khalique's avatar
Khalique committed
996
997
{
    migraphx::program p;
Khalique's avatar
Khalique committed
998
999
1000
1001
1002
1003
1004
    std::vector<int64_t> squeeze_axes{0, 2, 3, 5};
    std::vector<int64_t> unsqueeze_axes{0, 1, 3, 5};
    auto l0 =
        p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 1, 1, 2, 1}});
    auto l1 = p.add_instruction(migraphx::op::squeeze{squeeze_axes}, l0);
    p.add_instruction(migraphx::op::unsqueeze{unsqueeze_axes}, l1);
    auto prog = migraphx::parse_onnx("squeeze_unsqueeze_test.onnx");
Khalique's avatar
Khalique committed
1005
1006
1007
1008

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1009
TEST_CASE(sub_bcast_test)
Shucai Xiao's avatar
Shucai Xiao committed
1010
1011
1012
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
1013
1014
1015
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4}});
    auto l2 = p.add_instruction(migraphx::op::broadcast{1, l0->get_shape().lens()}, l1);
    p.add_instruction(migraphx::op::sub{}, l0, l2);
Shucai Xiao's avatar
Shucai Xiao committed
1016

Khalique's avatar
Khalique committed
1017
    auto prog = migraphx::parse_onnx("sub_bcast_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1018
1019
1020
1021

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1022
TEST_CASE(sub_scalar_test)
Shucai Xiao's avatar
Shucai Xiao committed
1023
1024
1025
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
1026
1027
1028
    auto l1 =
        p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type, {1}}, {1}});
    auto m1 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
1029
    p.add_instruction(migraphx::op::sub{}, l0, m1);
Khalique's avatar
Khalique committed
1030
    auto prog = migraphx::parse_onnx("sub_scalar_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1031
1032
1033
1034

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1035
TEST_CASE(sum_test)
1036
1037
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1038
1039
1040
1041
1042
    auto input0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input2 = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {3}});
    auto l0     = p.add_instruction(migraphx::op::add{}, input0, input1);
    p.add_instruction(migraphx::op::add{}, l0, input2);
1043

Khalique's avatar
Khalique committed
1044
    auto prog = migraphx::parse_onnx("sum_test.onnx");
1045
1046
1047
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1048
TEST_CASE(tan_test)
1049
1050
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1051
1052
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::tan{}, input);
1053

Khalique's avatar
Khalique committed
1054
    auto prog = migraphx::parse_onnx("tan_test.onnx");
1055
1056
1057
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1058
TEST_CASE(tanh_test)
1059
1060
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1061
1062
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::tanh{}, input);
1063

Khalique's avatar
Khalique committed
1064
    auto prog = migraphx::parse_onnx("tanh_test.onnx");
1065
1066
1067
1068

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1069
TEST_CASE(transpose_test)
1070
1071
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1072
1073
1074
1075
1076
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 2, 2, 3}});
    std::vector<int64_t> perm{0, 3, 1, 2};
    p.add_instruction(migraphx::op::transpose{perm}, input);

    auto prog = migraphx::parse_onnx("transpose_test.onnx");
1077
1078
1079
1080

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1081
TEST_CASE(transpose_gather_test)
1082
1083
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
    auto make_contiguous = [&p](migraphx::instruction_ref ins) {
        if(ins->get_shape().standard())
        {
            return ins;
        }

        return p.add_instruction(migraphx::op::contiguous{}, ins);
    };

    auto data = p.add_parameter("data", migraphx::shape{migraphx::shape::float_type, {3, 5, 4, 6}});
    auto ind =
        p.add_parameter("indices", migraphx::shape{migraphx::shape::int32_type, {2, 4, 3, 5}});
    auto tr_data = p.add_instruction(migraphx::op::transpose{{0, 2, 1, 3}}, data);
    auto tr_ind  = p.add_instruction(migraphx::op::transpose{{0, 2, 1, 3}}, ind);
    int axis     = 1;
    p.add_instruction(
        migraphx::op::gather{axis}, make_contiguous(tr_data), make_contiguous(tr_ind));

    auto prog = migraphx::parse_onnx("transpose_gather_test.onnx");
1103
1104
1105
1106

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1107
TEST_CASE(unknown_test)
1108
1109
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1110
1111
1112
1113
1114
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4}});
    auto l2 = p.add_instruction(migraphx::op::unknown{"Unknown"}, l0, l1);
    p.add_instruction(migraphx::op::unknown{"Unknown"}, l2);
    auto prog = migraphx::parse_onnx("unknown_test.onnx");
1115
1116
1117
1118

    EXPECT(p == prog);
}

1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
TEST_CASE(variable_batch_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    p.add_instruction(migraphx::op::identity{}, l0);
    auto prog = migraphx::parse_onnx("variable_batch_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(variable_batch_leq_zero_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    p.add_instruction(migraphx::op::add{}, l0, l1);
    auto prog = migraphx::parse_onnx("variable_batch_leq_zero_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1140
int main(int argc, const char* argv[]) { test::run(argc, argv); }