onnx_test.cpp 34.8 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
7
#include <migraphx/literal.hpp>
#include <migraphx/operators.hpp>
#include <migraphx/program.hpp>
#include <migraphx/instruction.hpp>
#include <migraphx/onnx.hpp>
Scott Thornton's avatar
Scott Thornton committed
8
9
#include "test.hpp"

Khalique's avatar
Khalique committed
10
TEST_CASE(acos_test)
Scott Thornton's avatar
Scott Thornton committed
11
{
Paul's avatar
Paul committed
12
    migraphx::program p;
Khalique's avatar
Khalique committed
13
14
    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
15

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
21
TEST_CASE(add_bcast_test)
22
{
Paul's avatar
Paul committed
23
    migraphx::program p;
Khalique's avatar
Khalique committed
24
25
26
27
    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
28

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

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

Khalique's avatar
Khalique committed
34
TEST_CASE(add_fp16_test)
Scott Thornton's avatar
Scott Thornton committed
35
{
Paul's avatar
Paul committed
36
    migraphx::program p;
Khalique's avatar
Khalique committed
37
38
39
40
41
42
    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
43
44
45
46

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
47
TEST_CASE(add_scalar_test)
48
{
Paul's avatar
Paul committed
49
    migraphx::program p;
Khalique's avatar
Khalique committed
50
51
52
53
54
55
    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");
56
57
58
59

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
60
TEST_CASE(argmax)
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)
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);
}

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

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

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

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

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

    EXPECT(p == prog);
}

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

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

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

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

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

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

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

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

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

Khalique's avatar
Khalique committed
236
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
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
317
TEST_CASE(cos_test)
318
319
320
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
Khalique's avatar
Khalique committed
321
    p.add_instruction(migraphx::op::cos{}, input);
322

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

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

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

    EXPECT(p == prog);
}

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

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

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

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

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

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

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
416
TEST_CASE(gemm_test)
417
418
{
    migraphx::program p;
Khalique's avatar
Khalique committed
419
420
421
422
423
424
425
426
427
    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");
428
429
430
431

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
523
TEST_CASE(implicit_add_bcast_test)
524
525
{
    migraphx::program p;
Khalique's avatar
Khalique committed
526
527
528
529
530
531
532
    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");
533
534
535
536

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
537
TEST_CASE(implicit_pow_bcast_test)
538
539
{
    migraphx::program p;
Khalique's avatar
Khalique committed
540
541
542
543
544
545
546
    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");
547
548
549
550

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
551
TEST_CASE(implicit_sub_bcast_test)
552
553
554
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
555
556
557
558
559
560
    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");
561
562
563
564

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

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

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

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

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

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

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

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

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

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

    EXPECT(p == prog);
}

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

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
759
TEST_CASE(reducemean_test)
760
761
{
    migraphx::program p;
Khalique's avatar
Khalique committed
762
763
764
765
    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");
766
767
768
769

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
770
TEST_CASE(reducemean_keepdims_test)
771
772
{
    migraphx::program p;
Khalique's avatar
Khalique committed
773
774
775
    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");
776
777
778
779

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
780
TEST_CASE(reducesum_test)
Khalique's avatar
Khalique committed
781
782
{
    migraphx::program p;
Khalique's avatar
Khalique committed
783
784
785
    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
786
    auto prog = migraphx::parse_onnx("reducesum_test.onnx");
787
788

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
789
790
}

Khalique's avatar
Khalique committed
791
TEST_CASE(reducesum_multiaxis_test)
Khalique's avatar
Khalique committed
792
793
{
    migraphx::program p;
Khalique's avatar
Khalique committed
794
795
796
    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
797
    auto prog = migraphx::parse_onnx("reducesum_multiaxis_test.onnx");
798
799

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
800
801
}

Khalique's avatar
Khalique committed
802
TEST_CASE(reducesum_keepdims_test)
Khalique's avatar
Khalique committed
803
804
{
    migraphx::program p;
Khalique's avatar
Khalique committed
805
806
    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
807
    auto prog = migraphx::parse_onnx("reducesum_keepdims_test.onnx");
808
809
810
811

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
812
TEST_CASE(reshape_test)
813
{
Khalique's avatar
Khalique committed
814
    migraphx::program p;
Khalique's avatar
Khalique committed
815
816
817
818
819
820
821
822
823
    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");
824
825

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
826
827
}

Khalique's avatar
Khalique committed
828
TEST_CASE(reshape_non_standard_test)
829
830
{
    migraphx::program p;
Khalique's avatar
Khalique committed
831
832
833
834
835
836
837
    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
838
    auto prog = migraphx::parse_onnx("reshape_non_standard_test.onnx");
839
840
841
842

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
843
TEST_CASE(shape_test)
844
845
{
    migraphx::program p;
Khalique's avatar
Khalique committed
846
847
848
849
850
    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");
851
852
853
854

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
855
TEST_CASE(shape_gather_test)
856
857
{
    migraphx::program p;
Khalique's avatar
Khalique committed
858
859
860
861
862
863
864
    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
865
    auto prog = migraphx::parse_onnx("shape_gather_test.onnx");
866
867
868
869

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
870
TEST_CASE(sign_test)
Khalique's avatar
Khalique committed
871
872
{
    migraphx::program p;
Khalique's avatar
Khalique committed
873
874
    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
875

Khalique's avatar
Khalique committed
876
    auto prog = migraphx::parse_onnx("sign_test.onnx");
Khalique's avatar
Khalique committed
877
878
879
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
880
TEST_CASE(sin_test)
881
882
{
    migraphx::program p;
Khalique's avatar
Khalique committed
883
884
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::sin{}, input);
885

Khalique's avatar
Khalique committed
886
    auto prog = migraphx::parse_onnx("sin_test.onnx");
887
888
889
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
890
TEST_CASE(sinh_test)
891
892
{
    migraphx::program p;
Khalique's avatar
Khalique committed
893
894
895
896
    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");
897
898
899
900

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
911
TEST_CASE(softmax_test)
Shucai Xiao's avatar
Shucai Xiao committed
912
913
{
    migraphx::program p;
Khalique's avatar
Khalique committed
914
915
916
    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
917
918
919
920

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
921
TEST_CASE(sqrt_test)
Shucai Xiao's avatar
Shucai Xiao committed
922
923
{
    migraphx::program p;
Khalique's avatar
Khalique committed
924
925
    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
926

Khalique's avatar
Khalique committed
927
    auto prog = migraphx::parse_onnx("sqrt_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
928
929
930
    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
945
TEST_CASE(sub_bcast_test)
Shucai Xiao's avatar
Shucai Xiao committed
946
947
948
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
949
950
951
    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
952

Khalique's avatar
Khalique committed
953
    auto prog = migraphx::parse_onnx("sub_bcast_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
954
955
956
957

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
958
TEST_CASE(sub_scalar_test)
Shucai Xiao's avatar
Shucai Xiao committed
959
960
961
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
962
963
964
965
966
967
    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
968
969
970
971

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
972
TEST_CASE(sum_test)
973
974
{
    migraphx::program p;
Khalique's avatar
Khalique committed
975
976
977
978
979
    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);
980

Khalique's avatar
Khalique committed
981
    auto prog = migraphx::parse_onnx("sum_test.onnx");
982
983
984
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
985
TEST_CASE(tan_test)
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}});
    p.add_instruction(migraphx::op::tan{}, input);
990

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

Khalique's avatar
Khalique committed
995
TEST_CASE(tanh_test)
996
997
{
    migraphx::program p;
Khalique's avatar
Khalique committed
998
999
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::tanh{}, input);
1000

Khalique's avatar
Khalique committed
1001
    auto prog = migraphx::parse_onnx("tanh_test.onnx");
1002
1003
1004
1005

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1006
TEST_CASE(transpose_test)
1007
1008
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1009
1010
1011
1012
1013
    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");
1014
1015
1016
1017

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1018
TEST_CASE(unknown_test)
1019
1020
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1021
1022
1023
1024
1025
    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");
1026
1027
1028
1029

    EXPECT(p == prog);
}

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