onnx_test.cpp 36.6 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
52
53
54
55
56
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    auto l1 = p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type}, {1}});
    auto m0 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l0);
    auto m1 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
    p.add_instruction(migraphx::op::add{}, m0, m1);
    auto prog = migraphx::parse_onnx("add_scalar_test.onnx");
57
58
59
60

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
61
TEST_CASE(argmax_test)
Khalique's avatar
Khalique committed
62
{
Paul's avatar
Paul committed
63
    migraphx::program p;
Khalique's avatar
Khalique committed
64
65
66
67
    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
68
69
70
71

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
72
TEST_CASE(argmin_test)
73
{
Paul's avatar
Paul committed
74
    migraphx::program p;
Khalique's avatar
Khalique committed
75
76
77
78
    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");
79
80
81
82

    EXPECT(p == prog);
}

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

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
94
TEST_CASE(atan_test)
Khalique's avatar
Khalique committed
95
{
Paul's avatar
Paul committed
96
    migraphx::program p;
Khalique's avatar
Khalique committed
97
98
    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
99

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
105
TEST_CASE(cast_test)
Khalique's avatar
Khalique committed
106
{
Paul's avatar
Paul committed
107
    migraphx::program p;
Khalique's avatar
Khalique committed
108
109
    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
110

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

Khalique's avatar
Khalique committed
115
TEST_CASE(clip_test)
Khalique's avatar
Khalique committed
116
117
{
    migraphx::program p;
Khalique's avatar
Khalique committed
118
119
120
    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
121

122
123
124
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
125
TEST_CASE(concat_test)
Shucai Xiao's avatar
Shucai Xiao committed
126
127
{
    migraphx::program p;
Khalique's avatar
Khalique committed
128
129
130
131
    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
132
133
134
135

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
136
TEST_CASE(constant_test)
Shucai Xiao's avatar
Shucai Xiao committed
137
138
{
    migraphx::program p;
Khalique's avatar
Khalique committed
139
140
    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
141
142
143
144

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
145
TEST_CASE(constant_fill_test)
Shucai Xiao's avatar
Shucai Xiao committed
146
{
Khalique's avatar
Khalique committed
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169

    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
170
171
}

Khalique's avatar
Khalique committed
172
TEST_CASE(constant_scalar_test)
173
174
{
    migraphx::program p;
Khalique's avatar
Khalique committed
175
176
    p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::int32_type, {1}}, {1}});
    auto prog = migraphx::parse_onnx("constant_scalar_test.onnx");
177
178
179
180

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
181
TEST_CASE(const_of_shape_empty_input_test)
Shucai Xiao's avatar
Shucai Xiao committed
182
183
{
    migraphx::program p;
Khalique's avatar
Khalique committed
184
185
186
187
    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
188

Khalique's avatar
Khalique committed
189
    auto prog = migraphx::parse_onnx("const_of_shape_empty_input_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
190
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
191
192
}

Khalique's avatar
Khalique committed
193
TEST_CASE(const_of_shape_float_test)
194
195
{
    migraphx::program p;
Khalique's avatar
Khalique committed
196
197
198
199
200
    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));
201

Khalique's avatar
Khalique committed
202
    auto prog = migraphx::parse_onnx("const_of_shape_float_test.onnx");
203
204
205
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
206
TEST_CASE(const_of_shape_int64_test)
207
208
{
    migraphx::program p;
Khalique's avatar
Khalique committed
209
210
211
212
213
    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));
214

Khalique's avatar
Khalique committed
215
    auto prog = migraphx::parse_onnx("const_of_shape_int64_test.onnx");
216
217
218
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
219
TEST_CASE(const_of_shape_no_value_attr_test)
220
221
{
    migraphx::program p;
Khalique's avatar
Khalique committed
222
223
224
225
226
    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));
227

Khalique's avatar
Khalique committed
228
    auto prog = migraphx::parse_onnx("const_of_shape_no_value_attr_test.onnx");
229
230
231
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
232
TEST_CASE(conv_autopad_fail_test)
233
{
Khalique's avatar
Khalique committed
234
235
    EXPECT(test::throws([&] { migraphx::parse_onnx("conv_autopad_fail_test.onnx"); }));
}
236

Khalique's avatar
Khalique committed
237
238
239
240
241
242
243
244
245
246
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
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
318
TEST_CASE(cos_test)
319
320
321
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
Khalique's avatar
Khalique committed
322
    p.add_instruction(migraphx::op::cos{}, input);
323

Khalique's avatar
Khalique committed
324
    auto prog = migraphx::parse_onnx("cos_test.onnx");
325
326
327
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
328
TEST_CASE(cosh_test)
329
330
331
332
333
334
335
336
337
338
{
    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
339
TEST_CASE(dropout_test)
Shucai Xiao's avatar
Shucai Xiao committed
340
341
{
    migraphx::program p;
Khalique's avatar
Khalique committed
342
343
    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
344

Khalique's avatar
Khalique committed
345
    auto prog = migraphx::parse_onnx("dropout_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
346
347
348
349

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
350
351
352
353
354
355
356
357
358
359
360
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
361
TEST_CASE(erf_test)
362
363
{
    migraphx::program p;
Khalique's avatar
Khalique committed
364
365
    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
366

Khalique's avatar
Khalique committed
367
    auto prog = migraphx::parse_onnx("erf_test.onnx");
Khalique's avatar
Khalique committed
368
369
370
    EXPECT(p == prog);
}

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

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

Khalique's avatar
Khalique committed
381
TEST_CASE(expand_test)
382
383
{
    migraphx::program p;
Khalique's avatar
Khalique committed
384
385
386
387
388
    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
389

Khalique's avatar
Khalique committed
390
    auto prog = migraphx::parse_onnx("expand_test.onnx");
Khalique's avatar
Khalique committed
391
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
392
393
}

Khalique's avatar
Khalique committed
394
TEST_CASE(flatten_test)
395
396
397
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
398
399
400
    p.add_instruction(migraphx::op::flatten{2}, l0);
    p.add_instruction(migraphx::op::flatten{1}, l0);
    auto prog = migraphx::parse_onnx("flatten_test.onnx");
401
402
403
404

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
405
TEST_CASE(gather_test)
406
407
{
    migraphx::program p;
Khalique's avatar
Khalique committed
408
409
410
411
412
    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");
413
414
415
416

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
417
TEST_CASE(gemm_test)
418
419
{
    migraphx::program p;
Khalique's avatar
Khalique committed
420
421
422
423
424
425
426
427
428
    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}});
    p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {}});
    auto t0    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l0);
    auto t1    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l1);
    auto alpha = 2.f;
    auto beta  = 2.0f;
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, t1);
    auto prog = migraphx::parse_onnx("gemm_test.onnx");
429
430
431
432

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
433
TEST_CASE(gemm_ex_test)
434
435
{
    migraphx::program p;
Khalique's avatar
Khalique committed
436
437
438
439
440
441
442
443
    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");
444
445
446
447

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
448
TEST_CASE(gemm_ex_brcst_test)
449
450
{
    migraphx::program p;
Khalique's avatar
Khalique committed
451
452
453
454
455
456
457
458
459
    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
460
    auto prog = migraphx::parse_onnx("gemm_ex_brcst_test.onnx");
461
462
463
464

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
465
TEST_CASE(globalavgpool_test)
466
467
{
    migraphx::program p;
Khalique's avatar
Khalique committed
468
469
470
471
472
473
474
    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");
475
476
477
478

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
479
TEST_CASE(globalmaxpool_test)
Khalique's avatar
Khalique committed
480
481
{
    migraphx::program p;
Khalique's avatar
Khalique committed
482
483
484
485
486
487
488
    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
489
490
491
492

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
493
TEST_CASE(group_conv_test)
494
495
{
    migraphx::program p;
Khalique's avatar
Khalique committed
496
497
498
499
500
501
    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");
502
503
504
505

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
506
TEST_CASE(imagescaler_test)
507
508
{
    migraphx::program p;
Khalique's avatar
Khalique committed
509
510
511
512
513
514
515
516
517
518
519
    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");
520
521
522
523

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
524
TEST_CASE(implicit_add_bcast_test)
525
526
{
    migraphx::program p;
Khalique's avatar
Khalique committed
527
528
529
530
531
532
533
    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 l2 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l0);
    auto l3 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
    p.add_instruction(migraphx::op::add{}, l2, l3);

    auto prog = migraphx::parse_onnx("implicit_add_bcast_test.onnx");
534
535
536
537

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
538
TEST_CASE(implicit_pow_bcast_test)
539
540
{
    migraphx::program p;
Khalique's avatar
Khalique committed
541
542
543
544
545
546
547
    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 l2 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l0);
    auto l3 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
    p.add_instruction(migraphx::op::pow{}, l2, l3);

    auto prog = migraphx::parse_onnx("implicit_pow_bcast_test.onnx");
548
549
550
551

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
552
TEST_CASE(implicit_sub_bcast_test)
553
554
555
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
556
557
558
559
560
561
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {4, 5}});
    auto l2 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l0);
    auto l3 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
    p.add_instruction(migraphx::op::sub{}, l2, l3);

    auto prog = migraphx::parse_onnx("implicit_sub_bcast_test.onnx");
562
563
564
565

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
566
TEST_CASE(leaky_relu_test)
567
568
{
    migraphx::program p;
Khalique's avatar
Khalique committed
569
570
571
572
573
    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");
574
575
576
577

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
578
TEST_CASE(log_test)
579
580
{
    migraphx::program p;
Khalique's avatar
Khalique committed
581
582
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::log{}, input);
583

Khalique's avatar
Khalique committed
584
    auto prog = migraphx::parse_onnx("log_test.onnx");
585
586
587
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
588
TEST_CASE(logsoftmax_test)
589
590
{
    migraphx::program p;
Khalique's avatar
Khalique committed
591
592
593
594
    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");
595
596
597
598

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
599
TEST_CASE(lrn_test)
600
601
{
    migraphx::program p;
Khalique's avatar
Khalique committed
602
603
604
605
606
607
608
609
    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");
610
611
612
613

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
614
TEST_CASE(matmul_bmbm_test)
615
616
{
    migraphx::program p;
Khalique's avatar
Khalique committed
617
618
619
620
621
622
623
    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");
624
625
626
627

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
628
TEST_CASE(matmul_bmv_test)
629
{
Khalique's avatar
Khalique committed
630
631
632
633
634
635
636
    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);
637

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

Khalique's avatar
Khalique committed
640
    EXPECT(p == prog);
641
642
}

Khalique's avatar
Khalique committed
643
TEST_CASE(matmul_mv_test)
644
645
{
    migraphx::program p;
Khalique's avatar
Khalique committed
646
647
648
649
650
651
652
    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");
653
654
655
656

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
657
TEST_CASE(matmul_vbm_test)
658
659
{
    migraphx::program p;
Khalique's avatar
Khalique committed
660
661
662
663
664
665
666
667
668
669
    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");
670
671
672
673

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
674
TEST_CASE(matmul_vm_test)
675
676
{
    migraphx::program p;
Khalique's avatar
Khalique committed
677
678
679
680
681
682
683
    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");
684
685
686
687

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
688
TEST_CASE(matmul_vv_test)
689
690
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
691
692
    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}});
693
694
695
696
697
698
    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
699
    auto prog = migraphx::parse_onnx("matmul_vv_test.onnx");
700
701
702
703

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
704
TEST_CASE(max_test)
705
706
{
    migraphx::program p;
Khalique's avatar
Khalique committed
707
708
709
710
711
    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);
712

Khalique's avatar
Khalique committed
713
714
    migraphx::parse_onnx("max_test.onnx");
}
715

Khalique's avatar
Khalique committed
716
717
718
719
720
721
722
723
724
725
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");
726
727
}

Khalique's avatar
Khalique committed
728
TEST_CASE(no_pad_test)
729
730
{
    migraphx::program p;
Khalique's avatar
Khalique committed
731
732
733
    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");
734

Khalique's avatar
Khalique committed
735
736
737
738
739
740
741
742
743
    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");
744
745
746
747

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
748
TEST_CASE(pow_test)
749
750
{
    migraphx::program p;
Khalique's avatar
Khalique committed
751
752
753
    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);
754

Khalique's avatar
Khalique committed
755
    auto prog = migraphx::parse_onnx("pow_test.onnx");
756
757
758
759

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
760
761
762
763
764
765
766
767
768
769
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
770
TEST_CASE(reducemean_test)
771
772
{
    migraphx::program p;
Khalique's avatar
Khalique committed
773
774
775
776
    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");
777
778
779
780

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
781
TEST_CASE(reducemean_keepdims_test)
782
783
{
    migraphx::program p;
Khalique's avatar
Khalique committed
784
785
786
    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");
787
788
789
790

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
791
792
793
794
795
796
797
798
799
800
801
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
802
TEST_CASE(reducesum_test)
Khalique's avatar
Khalique committed
803
804
{
    migraphx::program p;
Khalique's avatar
Khalique committed
805
806
807
    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
808
    auto prog = migraphx::parse_onnx("reducesum_test.onnx");
809
810

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
811
812
}

Khalique's avatar
Khalique committed
813
TEST_CASE(reducesum_multiaxis_test)
Khalique's avatar
Khalique committed
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}});
    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
819
    auto prog = migraphx::parse_onnx("reducesum_multiaxis_test.onnx");
820
821

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
822
823
}

Khalique's avatar
Khalique committed
824
TEST_CASE(reducesum_keepdims_test)
Khalique's avatar
Khalique committed
825
826
{
    migraphx::program p;
Khalique's avatar
Khalique committed
827
828
    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
829
    auto prog = migraphx::parse_onnx("reducesum_keepdims_test.onnx");
830
831
832
833

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
834
TEST_CASE(reshape_test)
835
{
Khalique's avatar
Khalique committed
836
    migraphx::program p;
Khalique's avatar
Khalique committed
837
838
839
840
841
842
843
844
845
    migraphx::op::reshape op;
    std::vector<int64_t> reshape_dims{3, 8};
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {4, 2, 3}});
    p.add_literal(
        migraphx::literal{migraphx::shape{migraphx::shape::int64_type, {2}}, reshape_dims});
    op.dims = reshape_dims;
    p.add_instruction(op, l0);
    p.add_instruction(op, l0);
    auto prog = migraphx::parse_onnx("reshape_test.onnx");
846
847

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
848
849
}

Khalique's avatar
Khalique committed
850
TEST_CASE(reshape_non_standard_test)
851
852
{
    migraphx::program p;
Khalique's avatar
Khalique committed
853
854
855
856
857
858
859
    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
860
    auto prog = migraphx::parse_onnx("reshape_non_standard_test.onnx");
861
862
863
864

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
865
866
867
868
869
870
871
872
873
874
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
875
TEST_CASE(shape_test)
876
877
{
    migraphx::program p;
Khalique's avatar
Khalique committed
878
879
880
881
882
    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");
883
884
885
886

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
887
TEST_CASE(shape_gather_test)
888
889
{
    migraphx::program p;
Khalique's avatar
Khalique committed
890
891
892
893
894
895
896
    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
897
    auto prog = migraphx::parse_onnx("shape_gather_test.onnx");
898
899
900
901

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
902
TEST_CASE(sign_test)
Khalique's avatar
Khalique committed
903
904
{
    migraphx::program p;
Khalique's avatar
Khalique committed
905
906
    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
907

Khalique's avatar
Khalique committed
908
    auto prog = migraphx::parse_onnx("sign_test.onnx");
Khalique's avatar
Khalique committed
909
910
911
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
912
TEST_CASE(sin_test)
913
914
{
    migraphx::program p;
Khalique's avatar
Khalique committed
915
916
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::sin{}, input);
917

Khalique's avatar
Khalique committed
918
    auto prog = migraphx::parse_onnx("sin_test.onnx");
919
920
921
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
922
TEST_CASE(sinh_test)
923
924
{
    migraphx::program p;
Khalique's avatar
Khalique committed
925
926
927
928
    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");
929
930
931
932

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
933
TEST_CASE(slice_test)
934
935
{
    migraphx::program p;
Khalique's avatar
Khalique committed
936
937
938
    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");
939
940
941
942

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
943
TEST_CASE(softmax_test)
Shucai Xiao's avatar
Shucai Xiao committed
944
945
{
    migraphx::program p;
Khalique's avatar
Khalique committed
946
947
948
    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
949
950
951
952

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
953
TEST_CASE(sqrt_test)
Shucai Xiao's avatar
Shucai Xiao committed
954
955
{
    migraphx::program p;
Khalique's avatar
Khalique committed
956
957
    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
958

Khalique's avatar
Khalique committed
959
    auto prog = migraphx::parse_onnx("sqrt_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
960
961
962
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
963
TEST_CASE(squeeze_unsqueeze_test)
Khalique's avatar
Khalique committed
964
965
{
    migraphx::program p;
Khalique's avatar
Khalique committed
966
967
968
969
970
971
972
    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
973
974
975
976

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
977
TEST_CASE(sub_bcast_test)
Shucai Xiao's avatar
Shucai Xiao committed
978
979
980
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
981
982
983
    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
984

Khalique's avatar
Khalique committed
985
    auto prog = migraphx::parse_onnx("sub_bcast_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
986
987
988
989

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
990
TEST_CASE(sub_scalar_test)
Shucai Xiao's avatar
Shucai Xiao committed
991
992
993
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
994
995
996
997
998
999
    auto l1 =
        p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type, {1}}, {1}});
    auto m0 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l0);
    auto m1 = p.add_instruction(migraphx::op::multibroadcast{{2, 3, 4, 5}}, l1);
    p.add_instruction(migraphx::op::sub{}, m0, m1);
    auto prog = migraphx::parse_onnx("sub_scalar_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
1000
1001
1002
1003

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1004
TEST_CASE(sum_test)
1005
1006
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1007
1008
1009
1010
1011
    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);
1012

Khalique's avatar
Khalique committed
1013
    auto prog = migraphx::parse_onnx("sum_test.onnx");
1014
1015
1016
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1017
TEST_CASE(tan_test)
1018
1019
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1020
1021
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::tan{}, input);
1022

Khalique's avatar
Khalique committed
1023
    auto prog = migraphx::parse_onnx("tan_test.onnx");
1024
1025
1026
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1027
TEST_CASE(tanh_test)
1028
1029
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1030
1031
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::tanh{}, input);
1032

Khalique's avatar
Khalique committed
1033
    auto prog = migraphx::parse_onnx("tanh_test.onnx");
1034
1035
1036
1037

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1038
TEST_CASE(transpose_test)
1039
1040
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1041
1042
1043
1044
1045
    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");
1046
1047
1048
1049

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1050
TEST_CASE(transpose_gather_test)
1051
1052
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
    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");
1072
1073
1074
1075

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1076
TEST_CASE(unknown_test)
1077
1078
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1079
1080
1081
1082
1083
    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");
1084
1085
1086
1087

    EXPECT(p == prog);
}

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