onnx_test.cpp 36 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);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
781
TEST_CASE(reducesum_test)
Khalique's avatar
Khalique committed
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}});
    auto l1 = p.add_instruction(migraphx::op::reduce_sum{{2}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2}}, l1);
Khalique's avatar
Khalique committed
787
    auto prog = migraphx::parse_onnx("reducesum_test.onnx");
788
789

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

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

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

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

    EXPECT(p == prog);
}

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

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

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
844
845
846
847
848
849
850
851
852
853
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
854
TEST_CASE(shape_test)
855
856
{
    migraphx::program p;
Khalique's avatar
Khalique committed
857
858
859
860
861
    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");
862
863
864
865

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
866
TEST_CASE(shape_gather_test)
867
868
{
    migraphx::program p;
Khalique's avatar
Khalique committed
869
870
871
872
873
874
875
    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
876
    auto prog = migraphx::parse_onnx("shape_gather_test.onnx");
877
878
879
880

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
881
TEST_CASE(sign_test)
Khalique's avatar
Khalique committed
882
883
{
    migraphx::program p;
Khalique's avatar
Khalique committed
884
885
    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
886

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

Khalique's avatar
Khalique committed
891
TEST_CASE(sin_test)
892
893
{
    migraphx::program p;
Khalique's avatar
Khalique committed
894
895
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::sin{}, input);
896

Khalique's avatar
Khalique committed
897
    auto prog = migraphx::parse_onnx("sin_test.onnx");
898
899
900
    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
932
TEST_CASE(sqrt_test)
Shucai Xiao's avatar
Shucai Xiao committed
933
934
{
    migraphx::program p;
Khalique's avatar
Khalique committed
935
936
    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
937

Khalique's avatar
Khalique committed
938
    auto prog = migraphx::parse_onnx("sqrt_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
939
940
941
    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
956
TEST_CASE(sub_bcast_test)
Shucai Xiao's avatar
Shucai Xiao committed
957
958
959
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
960
961
962
    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
963

Khalique's avatar
Khalique committed
964
    auto prog = migraphx::parse_onnx("sub_bcast_test.onnx");
Shucai Xiao's avatar
Shucai Xiao committed
965
966
967
968

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
969
TEST_CASE(sub_scalar_test)
Shucai Xiao's avatar
Shucai Xiao committed
970
971
972
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
973
974
975
976
977
978
    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
979
980
981
982

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
983
TEST_CASE(sum_test)
984
985
{
    migraphx::program p;
Khalique's avatar
Khalique committed
986
987
988
989
990
    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);
991

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

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

Khalique's avatar
Khalique committed
1002
    auto prog = migraphx::parse_onnx("tan_test.onnx");
1003
1004
1005
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1006
TEST_CASE(tanh_test)
1007
1008
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1009
1010
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::tanh{}, input);
1011

Khalique's avatar
Khalique committed
1012
    auto prog = migraphx::parse_onnx("tanh_test.onnx");
1013
1014
1015
1016

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1029
TEST_CASE(transpose_gather_test)
1030
1031
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
    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");
1051
1052
1053
1054

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
1055
TEST_CASE(unknown_test)
1056
1057
{
    migraphx::program p;
Khalique's avatar
Khalique committed
1058
1059
1060
1061
1062
    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");
1063
1064
1065
1066

    EXPECT(p == prog);
}

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