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

Khalique's avatar
Khalique committed
10
TEST_CASE(pytorch_conv_bias_test)
Scott Thornton's avatar
Scott Thornton committed
11
{
Paul's avatar
Paul committed
12
13
14
15
    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
16
    uint64_t axis = 1;
Paul's avatar
Paul committed
17
18
19
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape()}, l2);
    p.add_instruction(migraphx::op::add{}, l3, l4);
Scott Thornton's avatar
Scott Thornton committed
20

Paul's avatar
Paul committed
21
    auto prog = migraphx::parse_onnx("conv.onnx");
Scott Thornton's avatar
Scott Thornton committed
22
23
24
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
25
TEST_CASE(pytorch_conv_relu_maxpool)
Scott Thornton's avatar
Scott Thornton committed
26
{
Paul's avatar
Paul committed
27
28
29
30
    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
31
    uint64_t axis = 1;
Paul's avatar
Paul committed
32
33
34
35
36
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape()}, 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);
Scott Thornton's avatar
Scott Thornton committed
37

Paul's avatar
Paul committed
38
    auto prog = migraphx::parse_onnx("conv_relu_maxpool.onnx");
Scott Thornton's avatar
Scott Thornton committed
39
40
41
    EXPECT(p == prog);
}

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

Khalique's avatar
Khalique committed
65
TEST_CASE(pytorch_conv_relu_maxpool_x2)
Scott Thornton's avatar
Scott Thornton committed
66
{
Paul's avatar
Paul committed
67
68
69
70
    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
71
    uint64_t axis = 1;
Paul's avatar
Paul committed
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape()}, 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()}, 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_maxpoolX2.onnx");
Scott Thornton's avatar
Scott Thornton committed
87
88
89
90

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
91
TEST_CASE(leaky_relu_test)
92
{
Paul's avatar
Paul committed
93
    migraphx::program p;
94
    float alpha = 0.01f;
Paul's avatar
Paul committed
95
96
    auto l0     = p.add_parameter("0", {migraphx::shape::float_type, {3}});
    p.add_instruction(migraphx::op::leaky_relu{alpha}, l0);
97

Paul's avatar
Paul committed
98
    auto prog = migraphx::parse_onnx("leaky_relu.onnx");
99
100
101
102

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
103
TEST_CASE(imagescaler_test)
Khalique's avatar
Khalique committed
104
{
Paul's avatar
Paul committed
105
106
    migraphx::program p;
    migraphx::shape s{migraphx::shape::float_type, {1, 3, 16, 16}};
Khalique's avatar
Khalique committed
107
    auto l0        = p.add_parameter("0", s);
Khalique's avatar
Khalique committed
108
    auto scale_val = p.add_literal(0.5f);
Khalique's avatar
Khalique committed
109
    auto bias_vals = p.add_literal(
Paul's avatar
Paul committed
110
111
112
113
114
        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}, 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}, bias_vals);
    p.add_instruction(migraphx::op::add{}, img_scaled, bias_bcast);
Khalique's avatar
Khalique committed
115

Paul's avatar
Paul committed
116
    auto prog = migraphx::parse_onnx("imagescaler_test.onnx");
Khalique's avatar
Khalique committed
117
118
119
120

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
121
TEST_CASE(globalavgpool_test)
122
{
Paul's avatar
Paul committed
123
124
125
    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"};
126
    auto lens  = input->get_shape().lens();
Khalique's avatar
Khalique committed
127
    op.lengths = {lens[2], lens[3]};
128
129
    p.add_instruction(op, input);

Paul's avatar
Paul committed
130
    auto prog = migraphx::parse_onnx("globalavgpool_test.onnx");
131
132
133
134

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
135
TEST_CASE(globalmaxpool_test)
136
{
Paul's avatar
Paul committed
137
138
139
    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"};
140
    auto lens  = input->get_shape().lens();
Khalique's avatar
Khalique committed
141
    op.lengths = {lens[2], lens[3]};
142
143
    p.add_instruction(op, input);

Paul's avatar
Paul committed
144
    auto prog = migraphx::parse_onnx("globalmaxpool_test.onnx");
145
146
147
148

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
149
TEST_CASE(transpose_test)
Khalique's avatar
Khalique committed
150
{
Paul's avatar
Paul committed
151
152
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 2, 2, 3}});
Khalique's avatar
Khalique committed
153
    std::vector<int64_t> perm{0, 3, 1, 2};
Paul's avatar
Paul committed
154
    p.add_instruction(migraphx::op::transpose{perm}, input);
Khalique's avatar
Khalique committed
155

Paul's avatar
Paul committed
156
    auto prog = migraphx::parse_onnx("transpose_test.onnx");
Khalique's avatar
Khalique committed
157
158
159
160

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
161
TEST_CASE(dropout_test)
Khalique's avatar
Khalique committed
162
{
Paul's avatar
Paul committed
163
164
165
    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
166

Paul's avatar
Paul committed
167
    auto prog = migraphx::parse_onnx("dropout_test.onnx");
Khalique's avatar
Khalique committed
168
169
170
171

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
172
TEST_CASE(sum_test)
Khalique's avatar
Khalique committed
173
174
175
176
177
{
    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
178
    auto l0     = p.add_instruction(migraphx::op::add{}, input0, input1);
Khalique's avatar
Khalique committed
179
180
181
    p.add_instruction(migraphx::op::add{}, l0, input2);

    auto prog = migraphx::parse_onnx("sum_test.onnx");
182
183
184
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
185
TEST_CASE(exp_test)
Shucai Xiao's avatar
Shucai Xiao committed
186
187
188
189
190
191
192
193
194
{
    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);
}

Khalique's avatar
Khalique committed
195
TEST_CASE(log_test)
Shucai Xiao's avatar
Shucai Xiao committed
196
197
198
199
200
201
202
{
    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
203
204
}

Khalique's avatar
Khalique committed
205
TEST_CASE(sin_test)
206
207
208
209
210
211
212
213
214
{
    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
215
TEST_CASE(cos_test)
216
217
218
219
220
221
222
223
224
{
    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
225
TEST_CASE(tan_test)
226
227
228
229
230
231
{
    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");
232
233
234
    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
235
TEST_CASE(sinh_test)
236
237
238
239
240
241
242
243
244
245
{
    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
246
TEST_CASE(cosh_test)
247
248
249
250
251
252
253
254
255
256
{
    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
257
TEST_CASE(tanh_test)
Shucai Xiao's avatar
Shucai Xiao committed
258
259
260
261
262
263
264
265
266
267
{
    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
268
269
270
271
272
273
274
275
276
277
278
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
279
TEST_CASE(asin_test)
280
281
282
283
284
285
{
    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
286
287
288
289

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
290
TEST_CASE(max_test)
Khalique's avatar
Khalique committed
291
292
293
294
295
{
    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
296
    auto l0     = p.add_instruction(migraphx::op::max{}, input0, input1);
Khalique's avatar
Khalique committed
297
298
    p.add_instruction(migraphx::op::max{}, l0, input2);

Paul's avatar
Paul committed
299
    migraphx::parse_onnx("max_test.onnx");
Khalique's avatar
Khalique committed
300
301
}

Khalique's avatar
Khalique committed
302
TEST_CASE(acos_test)
303
304
305
306
307
308
{
    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
309
310

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
311
312
}

Khalique's avatar
Khalique committed
313
TEST_CASE(min_test)
Khalique's avatar
Khalique committed
314
315
316
317
318
{
    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
319
    auto l0     = p.add_instruction(migraphx::op::min{}, input0, input1);
Khalique's avatar
Khalique committed
320
321
    p.add_instruction(migraphx::op::min{}, l0, input2);

Paul's avatar
Paul committed
322
    migraphx::parse_onnx("min_test.onnx");
Khalique's avatar
Khalique committed
323
324
}

Khalique's avatar
Khalique committed
325
TEST_CASE(atan_test)
326
327
328
329
330
331
{
    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
332

Khalique's avatar
Khalique committed
333
    EXPECT(p == prog);
Khalique's avatar
Khalique committed
334
335
}

Khalique's avatar
Khalique committed
336
TEST_CASE(add_bcast_test)
337
338
339
340
341
342
343
344
345
346
347
348
{
    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}});
    auto l2 = p.add_instruction(migraphx::op::broadcast{1, l0->get_shape()}, l1);
    p.add_instruction(migraphx::op::add{}, l0, l2);

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

    EXPECT(p == prog);
}

349
TEST_CASE(implicit_add_bcast_test)
350
351
352
353
{
    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}});
Khalique's avatar
Khalique committed
354
355
    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);
356
357
358
359
360
361
362
    p.add_instruction(migraphx::op::add{}, l2, l3);

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

    EXPECT(p == prog);
}

363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
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}});
    auto l2 = p.add_instruction(migraphx::op::broadcast{1, l0->get_shape()}, l1);
    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}});
    auto l1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3, 4}});
    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
390
TEST_CASE(unknown_test)
391
392
393
394
{
    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}});
Khalique's avatar
Khalique committed
395
396
    auto l2 = p.add_instruction(migraphx::unknown{"Unknown"}, l0, l1);
    p.add_instruction(migraphx::unknown{"Unknown"}, l2);
397
398
399
400
401
    auto prog = migraphx::parse_onnx("unknown_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
402
TEST_CASE(softmax_test)
403
404
405
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3}});
Khalique's avatar
Khalique committed
406
407
    auto r  = p.add_instruction(migraphx::op::reshape{{1, 3, 1, 1}}, l0);
    auto s  = p.add_instruction(migraphx::op::softmax{}, r);
Khalique's avatar
Khalique committed
408
    p.add_instruction(migraphx::op::reshape{{1, 3}}, s);
409
410
411
412
413
    auto prog = migraphx::parse_onnx("softmax_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
414
TEST_CASE(reshape_test)
Khalique's avatar
Khalique committed
415
416
417
418
419
{
    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
420
421
    p.add_literal(
        migraphx::literal{migraphx::shape{migraphx::shape::int64_type, {2}}, reshape_dims});
Khalique's avatar
Khalique committed
422
423
424
425
426
427
428
429
    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);
}

430
431
432
433
434
435
436
437
438
439
440
441
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);
}

442
443
444
TEST_CASE(gather_test)
{
    migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
445
446
    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}});
447
    int axis = 1;
448
    p.add_instruction(migraphx::op::gather{axis}, l0, l1);
449
450
451
452
453
    auto prog = migraphx::parse_onnx("gather_test.onnx");

    EXPECT(p == prog);
}

454
455
456
457
458
459
460
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
461
    auto l2  = p.add_literal(migraphx::literal{const_shape, {1}});
462
    int axis = 0;
463
464
465
466
467
468
    p.add_instruction(migraphx::op::gather{axis}, l1, l2);
    auto prog = migraphx::parse_onnx("shape_gather.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
469
TEST_CASE(flatten_test)
470
471
472
473
474
475
476
477
478
479
{
    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{1}, l0);
    p.add_instruction(migraphx::op::flatten{2}, l0);
    auto prog = migraphx::parse_onnx("flatten_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
480
TEST_CASE(squeeze_unsqueeze_test)
481
482
483
484
{
    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
485
486
    auto l0 =
        p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 1, 1, 2, 1}});
487
488
489
490
491
492
493
    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
494
TEST_CASE(concat_test)
495
496
497
498
499
500
501
502
503
504
{
    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
505
TEST_CASE(slice_test)
506
507
508
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3, 2}});
Khalique's avatar
Khalique committed
509
    p.add_instruction(migraphx::op::slice{{0, 1}, {1, 0}, {2, 2}}, l0);
510
511
512
513
514
    auto prog = migraphx::parse_onnx("slice_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
515
TEST_CASE(constant_test)
516
517
518
519
520
521
522
523
{
    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);
}

524
525
526
527
528
529
530
531
532
TEST_CASE(constant_test_scalar)
{
    migraphx::program p;
    p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::int32_type, {1}, {0}}, {1}});
    auto prog = migraphx::parse_onnx("constant_scalar.onnx");

    EXPECT(p == prog);
}

533
534
535
536
TEST_CASE(constant_fill_test)
{
    {
        migraphx::program p;
Shucai Xiao's avatar
Shucai Xiao committed
537
        auto l0 = p.add_literal(migraphx::literal{{migraphx::shape::int32_type, {2}}, {2, 3}});
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
        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
560
TEST_CASE(gemm_test)
561
562
563
564
{
    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
565
    p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {}});
Khalique's avatar
Khalique committed
566
567
    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
568
569
    auto alpha = 2.f;
    p.add_instruction(migraphx::op::dot{alpha}, t0, t1);
570
571
572
573
574
    auto prog = migraphx::parse_onnx("gemm_test.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
575
TEST_CASE(add_scalar_test)
576
577
578
{
    migraphx::program p;
    auto l0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {2, 3, 4, 5}});
Khalique's avatar
Khalique committed
579
580
    auto l1 =
        p.add_literal(migraphx::literal{migraphx::shape{migraphx::shape::float_type, {1}}, {1}});
Khalique's avatar
Khalique committed
581
582
    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);
583
584
585
586
587
588
    p.add_instruction(migraphx::op::add{}, m0, m1);
    auto prog = migraphx::parse_onnx("add_scalar_test.onnx");

    EXPECT(p == prog);
}

589
590
591
592
593
594
595
596
597
598
599
600
601
602
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
603
604
605
606
607
608
609
610
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);
611
612
613
    auto prog = migraphx::parse_onnx("group_conv_test.onnx");

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
614
615
}

Khalique's avatar
Khalique committed
616
617
618
619
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
620
    p.add_instruction(migraphx::op::pad{{1, 1, 1, 1}}, l0);
621
622
623
    auto prog = migraphx::parse_onnx("pad_test.onnx");

    EXPECT(p == prog);
Khalique's avatar
Khalique committed
624
625
}

Khalique's avatar
Khalique committed
626
627
628
629
630
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
631
    op.size  = 5;
Khalique's avatar
Khalique committed
632
    op.alpha = 0.0001;
Khalique's avatar
Khalique committed
633
634
    op.beta  = 0.75;
    op.bias  = 1.0;
Khalique's avatar
Khalique committed
635
    p.add_instruction(op, l0);
636
637
638
639
640
641
642
    auto prog = migraphx::parse_onnx("lrn_test.onnx");

    EXPECT(p == prog);
}

TEST_CASE(add_fp16_test)
{
Khalique's avatar
Khalique committed
643
644
645
646
647
    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}});
648
649
650
651
    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
652
653
}

654
655
656
657
658
659
660
661
662
663
664
TEST_CASE(logsoftmax)
{
    migraphx::program p;
    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");

    EXPECT(p == prog);
}

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