onnx_test.cpp 35.7 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"

11
12
13
14
15
TEST_CASE(conv_autopad_fail_test)
{
    EXPECT(test::throws([&] { migraphx::parse_onnx("conv_autopad_fail_test.onnx"); }));
}

Khalique's avatar
Khalique committed
16
TEST_CASE(pytorch_conv_bias_test)
Scott Thornton's avatar
Scott Thornton committed
17
{
Paul's avatar
Paul committed
18
19
20
21
    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}});
Scott Thornton's avatar
Scott Thornton committed
22
    uint64_t axis = 1;
Paul's avatar
Paul committed
23
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
24
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
Paul's avatar
Paul committed
25
    p.add_instruction(migraphx::op::add{}, l3, l4);
Scott Thornton's avatar
Scott Thornton committed
26

Paul's avatar
Paul committed
27
    auto prog = migraphx::parse_onnx("conv.onnx");
Scott Thornton's avatar
Scott Thornton committed
28
29
30
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
31
TEST_CASE(pytorch_conv_relu_maxpool)
Scott Thornton's avatar
Scott Thornton committed
32
{
Paul's avatar
Paul committed
33
34
35
36
    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}});
Scott Thornton's avatar
Scott Thornton committed
37
    uint64_t axis = 1;
Paul's avatar
Paul committed
38
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
39
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
Paul's avatar
Paul committed
40
41
42
    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);
Scott Thornton's avatar
Scott Thornton committed
43

Paul's avatar
Paul committed
44
    auto prog = migraphx::parse_onnx("conv_relu_maxpool.onnx");
Scott Thornton's avatar
Scott Thornton committed
45
46
47
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
48
TEST_CASE(pytorch_conv_bn_relu_maxpool)
49
{
Paul's avatar
Paul committed
50
51
52
53
54
55
56
57
58
    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}});
59
    uint64_t axis = 1;
Paul's avatar
Paul committed
60
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
61
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
Paul's avatar
Paul committed
62
63
64
65
66
67
    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.onnx");
68
69
70
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
71
TEST_CASE(pytorch_conv_relu_maxpool_x2)
Scott Thornton's avatar
Scott Thornton committed
72
{
Paul's avatar
Paul committed
73
74
75
76
    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}});
Scott Thornton's avatar
Scott Thornton committed
77
    uint64_t axis = 1;
Paul's avatar
Paul committed
78
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
79
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape().lens()}, l2);
Paul's avatar
Paul committed
80
81
82
83
84
85
86
    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);
87
    auto l11 = p.add_instruction(migraphx::op::broadcast{axis, l10->get_shape().lens()}, l9);
Paul's avatar
Paul committed
88
89
90
91
92
    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_maxpoolX2.onnx");
Scott Thornton's avatar
Scott Thornton committed
93
94
95
96

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
97
TEST_CASE(leaky_relu_test)
98
{
Paul's avatar
Paul committed
99
    migraphx::program p;
100
    float alpha = 0.01f;
Paul's avatar
Paul committed
101
102
    auto l0     = p.add_parameter("0", {migraphx::shape::float_type, {3}});
    p.add_instruction(migraphx::op::leaky_relu{alpha}, l0);
103

Paul's avatar
Paul committed
104
    auto prog = migraphx::parse_onnx("leaky_relu.onnx");
105
106
107
108

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
109
TEST_CASE(imagescaler_test)
Khalique's avatar
Khalique committed
110
{
Paul's avatar
Paul committed
111
112
    migraphx::program p;
    migraphx::shape s{migraphx::shape::float_type, {1, 3, 16, 16}};
Khalique's avatar
Khalique committed
113
    auto l0        = p.add_parameter("0", s);
Khalique's avatar
Khalique committed
114
    auto scale_val = p.add_literal(0.5f);
Khalique's avatar
Khalique committed
115
    auto bias_vals = p.add_literal(
Paul's avatar
Paul committed
116
        migraphx::literal{migraphx::shape{migraphx::shape::float_type, {3}}, {0.01, 0.02, 0.03}});
117
    auto scaled_tensor = p.add_instruction(migraphx::op::scalar{s.lens()}, scale_val);
Paul's avatar
Paul committed
118
    auto img_scaled    = p.add_instruction(migraphx::op::mul{}, l0, scaled_tensor);
119
    auto bias_bcast    = p.add_instruction(migraphx::op::broadcast{1, s.lens()}, bias_vals);
Paul's avatar
Paul committed
120
    p.add_instruction(migraphx::op::add{}, img_scaled, bias_bcast);
Khalique's avatar
Khalique committed
121

Paul's avatar
Paul committed
122
    auto prog = migraphx::parse_onnx("imagescaler_test.onnx");
Khalique's avatar
Khalique committed
123
124
125
126

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
127
TEST_CASE(globalavgpool_test)
128
{
Paul's avatar
Paul committed
129
130
131
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    auto op    = migraphx::op::pooling{"average"};
132
    auto lens  = input->get_shape().lens();
Khalique's avatar
Khalique committed
133
    op.lengths = {lens[2], lens[3]};
134
135
    p.add_instruction(op, input);

Paul's avatar
Paul committed
136
    auto prog = migraphx::parse_onnx("globalavgpool_test.onnx");
137
138
139
140

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
141
TEST_CASE(globalmaxpool_test)
142
{
Paul's avatar
Paul committed
143
144
145
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    auto op    = migraphx::op::pooling{"max"};
146
    auto lens  = input->get_shape().lens();
Khalique's avatar
Khalique committed
147
    op.lengths = {lens[2], lens[3]};
148
149
    p.add_instruction(op, input);

Paul's avatar
Paul committed
150
    auto prog = migraphx::parse_onnx("globalmaxpool_test.onnx");
151
152
153
154

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
155
TEST_CASE(transpose_test)
Khalique's avatar
Khalique committed
156
{
Paul's avatar
Paul committed
157
158
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 2, 2, 3}});
Khalique's avatar
Khalique committed
159
    std::vector<int64_t> perm{0, 3, 1, 2};
Paul's avatar
Paul committed
160
    p.add_instruction(migraphx::op::transpose{perm}, input);
Khalique's avatar
Khalique committed
161

Paul's avatar
Paul committed
162
    auto prog = migraphx::parse_onnx("transpose_test.onnx");
Khalique's avatar
Khalique committed
163
164
165
166

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
167
TEST_CASE(dropout_test)
Khalique's avatar
Khalique committed
168
{
Paul's avatar
Paul committed
169
170
171
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 2, 2}});
    p.add_instruction(migraphx::op::identity{}, input);
Khalique's avatar
Khalique committed
172

Paul's avatar
Paul committed
173
    auto prog = migraphx::parse_onnx("dropout_test.onnx");
Khalique's avatar
Khalique committed
174
175
176
177

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
178
TEST_CASE(sum_test)
Khalique's avatar
Khalique committed
179
180
181
182
183
{
    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}});
Khalique's avatar
Khalique committed
184
    auto l0     = p.add_instruction(migraphx::op::add{}, input0, input1);
Khalique's avatar
Khalique committed
185
186
187
    p.add_instruction(migraphx::op::add{}, l0, input2);

    auto prog = migraphx::parse_onnx("sum_test.onnx");
188
189
190
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
191
TEST_CASE(exp_test)
Shucai Xiao's avatar
Shucai Xiao committed
192
193
194
195
196
197
198
199
200
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::exp{}, input);

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

Shucai Xiao's avatar
Shucai Xiao committed
201
202
203
204
205
206
207
208
209
210
TEST_CASE(erf_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10, 15}});
    p.add_instruction(migraphx::op::erf{}, input);

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

Shucai Xiao's avatar
Shucai Xiao committed
211
212
213
214
215
216
217
218
219
220
TEST_CASE(sqrt_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10, 15}});
    p.add_instruction(migraphx::op::sqrt{}, input);

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

221
222
223
224
225
226
227
228
229
230
TEST_CASE(sign_test)
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::double_type, {10, 5}});
    p.add_instruction(migraphx::op::sign{}, input);

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

Khalique's avatar
Khalique committed
231
TEST_CASE(log_test)
Shucai Xiao's avatar
Shucai Xiao committed
232
233
234
235
236
237
238
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::log{}, input);

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

Khalique's avatar
Khalique committed
241
TEST_CASE(sin_test)
242
243
244
245
246
247
248
249
250
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::sin{}, input);

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

Khalique's avatar
Khalique committed
251
TEST_CASE(cos_test)
252
253
254
255
256
257
258
259
260
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::cos{}, input);

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

Khalique's avatar
Khalique committed
261
TEST_CASE(tan_test)
262
263
264
265
266
267
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::tan{}, input);

    auto prog = migraphx::parse_onnx("tan_test.onnx");
268
269
270
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
271
TEST_CASE(sinh_test)
272
273
274
275
276
277
278
279
280
281
{
    migraphx::program p;
    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");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
282
TEST_CASE(cosh_test)
283
284
285
286
287
288
289
290
291
292
{
    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
293
TEST_CASE(tanh_test)
Shucai Xiao's avatar
Shucai Xiao committed
294
295
296
297
298
299
300
301
302
303
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::tanh{}, input);

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
304
305
306
307
308
309
310
311
312
313
314
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
315
TEST_CASE(asin_test)
316
317
318
319
320
321
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::asin{}, input);

    auto prog = migraphx::parse_onnx("asin_test.onnx");
Khalique's avatar
Khalique committed
322
323
324
325

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
326
TEST_CASE(max_test)
Khalique's avatar
Khalique committed
327
328
329
330
331
{
    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}});
Khalique's avatar
Khalique committed
332
    auto l0     = p.add_instruction(migraphx::op::max{}, input0, input1);
Khalique's avatar
Khalique committed
333
334
    p.add_instruction(migraphx::op::max{}, l0, input2);

Paul's avatar
Paul committed
335
    migraphx::parse_onnx("max_test.onnx");
Khalique's avatar
Khalique committed
336
337
}

Khalique's avatar
Khalique committed
338
TEST_CASE(acos_test)
339
340
341
342
343
344
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::acos{}, input);

    auto prog = migraphx::parse_onnx("acos_test.onnx");
Khalique's avatar
Khalique committed
345
346

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
347
348
}

Khalique's avatar
Khalique committed
349
TEST_CASE(min_test)
Khalique's avatar
Khalique committed
350
351
352
353
354
{
    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}});
Khalique's avatar
Khalique committed
355
    auto l0     = p.add_instruction(migraphx::op::min{}, input0, input1);
Khalique's avatar
Khalique committed
356
357
    p.add_instruction(migraphx::op::min{}, l0, input2);

Paul's avatar
Paul committed
358
    migraphx::parse_onnx("min_test.onnx");
Khalique's avatar
Khalique committed
359
360
}

Khalique's avatar
Khalique committed
361
TEST_CASE(atan_test)
362
363
364
365
366
367
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::atan{}, input);

    auto prog = migraphx::parse_onnx("atan_test.onnx");
Khalique's avatar
Khalique committed
368

Khalique's avatar
Khalique committed
369
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
370
371
}

Khalique's avatar
Khalique committed
372
TEST_CASE(add_bcast_test)
373
374
375
376
{
    migraphx::program p;
    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}});
377
    auto l2 = p.add_instruction(migraphx::op::broadcast{1, l0->get_shape().lens()}, l1);
378
379
380
381
382
383
384
    p.add_instruction(migraphx::op::add{}, l0, l2);

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

    EXPECT(p == prog);
}

385
TEST_CASE(implicit_add_bcast_test)
386
387
388
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
389
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4, 1}});
Khalique's avatar
Khalique committed
390
391
    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);
392
393
394
395
396
397
398
    p.add_instruction(migraphx::op::add{}, l2, l3);

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

    EXPECT(p == prog);
}

399
400
401
402
403
TEST_CASE(sub_bcast_test)
{
    migraphx::program p;
    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}});
404
    auto l2 = p.add_instruction(migraphx::op::broadcast{1, l0->get_shape().lens()}, l1);
405
406
407
408
409
410
411
412
413
414
415
    p.add_instruction(migraphx::op::sub{}, l0, l2);

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

    EXPECT(p == prog);
}

TEST_CASE(implicit_sub_bcast_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
416
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {4, 5}});
417
418
419
420
421
422
423
424
425
    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");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
426
TEST_CASE(unknown_test)
427
428
429
430
{
    migraphx::program p;
    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}});
431
432
    auto l2 = p.add_instruction(migraphx::op::unknown{"Unknown"}, l0, l1);
    p.add_instruction(migraphx::op::unknown{"Unknown"}, l2);
433
434
435
436
437
    auto prog = migraphx::parse_onnx("unknown_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
438
TEST_CASE(softmax_test)
439
440
441
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3}});
442
    p.add_instruction(migraphx::op::softmax{1}, l0);
443
444
445
446
447
    auto prog = migraphx::parse_onnx("softmax_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
448
TEST_CASE(reshape_test)
Khalique's avatar
Khalique committed
449
450
451
452
453
{
    migraphx::program p;
    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}});
Khalique's avatar
Khalique committed
454
455
    p.add_literal(
        migraphx::literal{migraphx::shape{migraphx::shape::int64_type, {2}}, reshape_dims});
Khalique's avatar
Khalique committed
456
457
458
459
460
461
462
463
    op.dims = reshape_dims;
    p.add_instruction(op, l0);
    p.add_instruction(op, l0);
    auto prog = migraphx::parse_onnx("reshape_test.onnx");

    EXPECT(p == prog);
}

464
465
466
467
468
469
TEST_CASE(reshape_non_standard)
{
    migraphx::program p;
    migraphx::op::reshape op;
    std::vector<int64_t> reshape_dims{4, 3, 2};
    migraphx::shape s{migraphx::shape::float_type, {2, 3, 4}};
Shucai Xiao's avatar
Shucai Xiao committed
470
    auto x      = p.add_parameter("x", s);
471
472
473
474
475
476
477
478
    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);
    auto prog = migraphx::parse_onnx("reshape_non_standard.onnx");

    EXPECT(p == prog);
}

479
480
481
482
483
484
485
486
487
488
489
490
TEST_CASE(shape_test)
{
    migraphx::program p;
    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");

    EXPECT(p == prog);
}

491
492
493
TEST_CASE(gather_test)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
494
495
    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}});
496
    int axis = 1;
497
    p.add_instruction(migraphx::op::gather{axis}, l0, l1);
498
499
500
501
502
    auto prog = migraphx::parse_onnx("gather_test.onnx");

    EXPECT(p == prog);
}

503
504
505
506
507
508
509
TEST_CASE(shape_gather_test)
{
    migraphx::program p;
    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}};
Shucai Xiao's avatar
Shucai Xiao committed
510
    auto l2  = p.add_literal(migraphx::literal{const_shape, {1}});
511
    int axis = 0;
512
513
514
515
516
517
    p.add_instruction(migraphx::op::gather{axis}, l1, l2);
    auto prog = migraphx::parse_onnx("shape_gather.onnx");

    EXPECT(p == prog);
}

518
519
520
TEST_CASE(transpose_gather_test)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
521
522
    auto make_contiguous = [&p](migraphx::instruction_ref ins) {
        if(ins->get_shape().standard())
Shucai Xiao's avatar
Shucai Xiao committed
523
524
525
526
527
528
529
        {
            return ins;
        }

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

Shucai Xiao's avatar
Shucai Xiao committed
530
531
532
    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}});
Shucai Xiao's avatar
Shucai Xiao committed
533
534
535
536
537
538
    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));

539
540
541
542
543
    auto prog = migraphx::parse_onnx("transpose_gather.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
544
TEST_CASE(flatten_test)
545
546
547
548
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
    p.add_instruction(migraphx::op::flatten{2}, l0);
Khalique's avatar
Khalique committed
549
    p.add_instruction(migraphx::op::flatten{1}, l0);
550
551
552
553
554
    auto prog = migraphx::parse_onnx("flatten_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
555
TEST_CASE(squeeze_unsqueeze_test)
556
557
558
559
{
    migraphx::program p;
    std::vector<int64_t> squeeze_axes{0, 2, 3, 5};
    std::vector<int64_t> unsqueeze_axes{0, 1, 3, 5};
Khalique's avatar
Khalique committed
560
561
    auto l0 =
        p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 1, 1, 2, 1}});
562
563
564
565
566
567
568
    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");

    EXPECT(p == prog);
}

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

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
580
TEST_CASE(slice_test)
581
582
583
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3, 2}});
Khalique's avatar
Khalique committed
584
    p.add_instruction(migraphx::op::slice{{0, 1}, {1, 0}, {2, 2}}, l0);
585
586
587
588
589
    auto prog = migraphx::parse_onnx("slice_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
590
TEST_CASE(constant_test)
591
592
593
594
595
596
597
598
{
    migraphx::program p;
    p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type, {3}}, {0, 1, 2}});
    auto prog = migraphx::parse_onnx("constant_test.onnx");

    EXPECT(p == prog);
}

599
600
601
TEST_CASE(constant_test_scalar)
{
    migraphx::program p;
Khalique's avatar
Khalique committed
602
    p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::int32_type, {1}}, {1}});
603
604
605
606
607
    auto prog = migraphx::parse_onnx("constant_scalar.onnx");

    EXPECT(p == prog);
}

608
609
610
611
TEST_CASE(constant_fill_test)
{
    {
        migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
612
        auto l0 = p.add_literal(migraphx::literal{{migraphx::shape::int32_type, {2}}, {2, 3}});
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
        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("const_fill1.onnx");

        EXPECT(p == prog);
    }

    {
        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("const_fill2.onnx");

        EXPECT(p == prog);
    }
}

Khalique's avatar
Khalique committed
635
TEST_CASE(gemm_test)
636
637
638
639
{
    migraphx::program p;
    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}});
Khalique's avatar
Khalique committed
640
    p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {}});
Khalique's avatar
Khalique committed
641
642
    auto t0    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l0);
    auto t1    = p.add_instruction(migraphx::op::transpose{{1, 0}}, l1);
Khalique's avatar
Khalique committed
643
    auto alpha = 2.f;
Shucai Xiao's avatar
Shucai Xiao committed
644
    auto beta  = 2.0f;
645
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, t1);
646
647
648
649
650
    auto prog = migraphx::parse_onnx("gemm_test.onnx");

    EXPECT(p == prog);
}

651
652
653
TEST_CASE(gemm_ex)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
654
655
656
657
658
659
    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;
660
    p.add_instruction(migraphx::op::dot{alpha, beta}, t0, l1, l2);
661
662
663
664
665
    auto prog = migraphx::parse_onnx("gemm_test_ex.onnx");

    EXPECT(p == prog);
}

666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
TEST_CASE(gemm_ex_brcst)
{
    migraphx::program p;
    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);
    auto prog = migraphx::parse_onnx("gemm_test_ex1.onnx");

    EXPECT(p == prog);
}

TEST_CASE(matmul_vv)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
686
687
    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}});
688
689
690
691
692
693
694
695
696
697
698
699
700
701
    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);

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

    EXPECT(p == prog);
}

TEST_CASE(matmul_vm)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
702
703
    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}});
704
705
706
707
708
709
710
711
712
713
714
715
    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.onnx");

    EXPECT(p == prog);
}

TEST_CASE(matmul_vbm)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
716
717
718
    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);
719
720
721
722
723
724
725
726
727
728
729
730
731
732
    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.onnx");

    EXPECT(p == prog);
}

TEST_CASE(matmul_mv)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
733
734
    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}});
735
736
737
738
739
740
741
742
743
744
745
746
    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.onnx");

    EXPECT(p == prog);
}

TEST_CASE(matmul_bmv)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
747
748
749
    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);
750
    auto bsl1 = p.add_instruction(migraphx::op::multibroadcast{{3, 7, 1}}, sl1);
Shucai Xiao's avatar
Shucai Xiao committed
751
    auto res  = p.add_instruction(migraphx::op::dot{1.0f, 0.0f}, l0, bsl1);
752
753
754
755
756
757
758
759
760
761
    p.add_instruction(migraphx::op::squeeze{{2}}, res);

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

    EXPECT(p == prog);
}

TEST_CASE(matmul_bmbm)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
762
763
    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}});
764
765
766
767
768
769
770
771
772
    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.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
773
TEST_CASE(add_scalar_test)
774
775
776
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
777
    auto l1 = p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type}, {1}});
Khalique's avatar
Khalique committed
778
779
    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);
780
781
782
783
784
785
    p.add_instruction(migraphx::op::add{}, m0, m1);
    auto prog = migraphx::parse_onnx("add_scalar_test.onnx");

    EXPECT(p == prog);
}

786
787
788
789
790
791
792
793
794
795
796
797
798
799
TEST_CASE(sub_scalar_test)
{
    migraphx::program p;
    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}}, {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");

    EXPECT(p == prog);
}

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

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

Khalique's avatar
Khalique committed
813
814
815
816
TEST_CASE(pad_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 2}});
Khalique's avatar
Khalique committed
817
    p.add_instruction(migraphx::op::pad{{1, 1, 1, 1}}, l0);
818
819
820
    auto prog = migraphx::parse_onnx("pad_test.onnx");

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

Khalique's avatar
Khalique committed
823
824
825
826
827
TEST_CASE(lrn_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 28, 24, 24}});
    migraphx::op::lrn op;
Khalique's avatar
Khalique committed
828
    op.size  = 5;
Khalique's avatar
Khalique committed
829
    op.alpha = 0.0001;
Khalique's avatar
Khalique committed
830
831
    op.beta  = 0.75;
    op.bias  = 1.0;
Khalique's avatar
Khalique committed
832
    p.add_instruction(op, l0);
833
834
835
836
837
838
839
    auto prog = migraphx::parse_onnx("lrn_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(add_fp16_test)
{
Khalique's avatar
Khalique committed
840
841
842
843
844
    migraphx::program p;
    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}});
845
846
847
848
    p.add_instruction(migraphx::op::add{}, l0, l1);
    auto prog = migraphx::parse_onnx("add_fp16_test.onnx");

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

851
852
853
TEST_CASE(logsoftmax)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
854
    auto l0  = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
855
856
857
858
859
860
861
    int axis = 1;
    p.add_instruction(migraphx::op::logsoftmax{axis}, l0);
    auto prog = migraphx::parse_onnx("logsoftmax_test.onnx");

    EXPECT(p == prog);
}

862
863
864
TEST_CASE(argmax)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
865
    auto l0  = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
866
867
    auto ins = p.add_instruction(migraphx::op::argmax{2}, l0);
    p.add_instruction(migraphx::op::squeeze{{2}}, ins);
868
869
870
871
872
873
874
875
    auto prog = migraphx::parse_onnx("argmax_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(argmin)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
876
    auto l0  = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
877
878
    auto ins = p.add_instruction(migraphx::op::argmin{3}, l0);
    p.add_instruction(migraphx::op::squeeze{{3}}, ins);
879
880
881
882
883
    auto prog = migraphx::parse_onnx("argmin_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
884
885
886
887
888
889
890
891
892
893
TEST_CASE(no_pad_test)
{
    migraphx::program p;
    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");

    EXPECT(p == prog);
}

894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
TEST_CASE(reducesum_test1)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_sum{{2}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2}}, l1);
    auto prog = migraphx::parse_onnx("reducesum_test1.onnx");

    EXPECT(p == prog);
}

TEST_CASE(reducesum_test2)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_sum{{2, 3}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2, 3}}, l1);
    auto prog = migraphx::parse_onnx("reducesum_test2.onnx");

    EXPECT(p == prog);
}

TEST_CASE(reducesum_test3)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    p.add_instruction(migraphx::op::reduce_sum{{2, 3}}, l0);
    auto prog = migraphx::parse_onnx("reducesum_test3.onnx");

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
926
927
928
929
930
931
932
933
934
935
936
937
938
939
TEST_CASE(reducemean_test1)
{
    migraphx::program p;
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
    auto l1 = p.add_instruction(migraphx::op::reduce_mean{{2, 3}}, l0);
    p.add_instruction(migraphx::op::squeeze{{2, 3}}, l1);
    auto prog = migraphx::parse_onnx("reducemean_test1.onnx");

    EXPECT(p == prog);
}

TEST_CASE(reducemean_test2)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
940
    auto l0 = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {3, 4, 5, 6}});
Shucai Xiao's avatar
Shucai Xiao committed
941
    p.add_instruction(migraphx::op::reduce_mean{{2}}, l0);
Shucai Xiao's avatar
Shucai Xiao committed
942
943
944
945
946
    auto prog = migraphx::parse_onnx("reducemean_test2.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
947
948
949
950
TEST_CASE(clip_test)
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
951
    p.add_instruction(migraphx::op::clip{6.0, 0.0}, l0);
Khalique's avatar
Khalique committed
952
953
954
955
956
    auto prog = migraphx::parse_onnx("clip_test.onnx");

    EXPECT(p == prog);
}

Shucai Xiao's avatar
Shucai Xiao committed
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
TEST_CASE(implicit_pow_bcast_test)
{
    migraphx::program p;
    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("pow_bcast_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(pow_test)
{
    migraphx::program p;
    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);

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

    EXPECT(p == prog);
}

983
984
985
986
987
988
989
990
991
992
TEST_CASE(cast_test)
{
    migraphx::program p;
    auto l = p.add_parameter("x", migraphx::shape{migraphx::shape::half_type, {10}});
    p.add_instruction(migraphx::op::convert{migraphx::shape::float_type}, l);

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

Shucai Xiao's avatar
Shucai Xiao committed
993
TEST_CASE(const_of_shape_float)
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
{
    migraphx::program p;
    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));

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

Shucai Xiao's avatar
Shucai Xiao committed
1006
TEST_CASE(const_of_shape_int64)
1007
1008
1009
1010
1011
{
    migraphx::program p;
    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});
Shucai Xiao's avatar
Shucai Xiao committed
1012
    std::vector<int64_t> vec(s.elements(), 10);
1013
1014
1015
1016
1017
1018
    p.add_literal(migraphx::literal(s, vec));

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

Shucai Xiao's avatar
Shucai Xiao committed
1019
TEST_CASE(const_of_shape_no_value_attr)
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
{
    migraphx::program p;
    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));

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

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

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

TEST_CASE(expand_test)
{
    migraphx::program p;
    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);

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

1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
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
1067
int main(int argc, const char* argv[]) { test::run(argc, argv); }