"dockerfiles/Dockerfile_deploy" did not exist on "77f3d55e7390b943b6bc39ad0709d09ec1f617af"
eval_test.cpp 15.1 KB
Newer Older
Paul's avatar
Paul committed
1

Paul's avatar
Paul committed
2
3
4
#include <migraphx/program.hpp>
#include <migraphx/iterator_for.hpp>
#include <migraphx/instruction.hpp>
Paul's avatar
Paul committed
5
#include <migraphx/stringutils.hpp>
6
#include <migraphx/compile_options.hpp>
Paul's avatar
Paul committed
7
#include <sstream>
Paul's avatar
Paul committed
8
#include "test.hpp"
Paul's avatar
Paul committed
9
#include <basic_ops.hpp>
Paul's avatar
Paul committed
10

Paul's avatar
Paul committed
11
12
struct id_target
{
Paul's avatar
Paul committed
13
14
15
16
17
    struct context
    {
        void finish() const {}
    };
    migraphx::context ctx = context{};
Paul's avatar
Paul committed
18
    std::string name() const { return "id"; }
19
20
21
22
23
    std::vector<migraphx::pass> get_passes(migraphx::context&,
                                           const migraphx::compile_options&) const
    {
        return {};
    }
Paul's avatar
Paul committed
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    migraphx::context get_context() const { return ctx; }
};

struct id_ctx_op
{
    std::string name() const { return "id_ctx_op"; }
    migraphx::argument
    compute(id_target::context&, const migraphx::shape&, std::vector<migraphx::argument> args) const
    {
        if(args.empty())
            return {};
        return args.front();
    }

    migraphx::shape compute_shape(std::vector<migraphx::shape> inputs) const
    {
        if(inputs.empty())
            return {};
        return inputs.front();
    }
    int output_alias(const std::vector<migraphx::shape>&) const { return 0; }
};

struct id_ctx_final_op
{
    std::string name() const { return "id_ctx_final_op"; }
Paul's avatar
Paul committed
50
    migraphx::argument compute(const migraphx::shape&, std::vector<migraphx::argument> args) const
Paul's avatar
Paul committed
51
52
53
54
55
56
    {
        if(args.empty())
            return {};
        return args.front();
    }

Paul's avatar
Paul committed
57
58
59
    void finalize(id_target::context&, const migraphx::shape&, const std::vector<migraphx::shape>&)
    {
    }
Paul's avatar
Paul committed
60
61
62
63
64
65
66
67

    migraphx::shape compute_shape(std::vector<migraphx::shape> inputs) const
    {
        if(inputs.empty())
            return {};
        return inputs.front();
    }
    int output_alias(const std::vector<migraphx::shape>&) const { return 0; }
Paul's avatar
Paul committed
68
69
};

Paul's avatar
Paul committed
70
71
struct reverse_pass
{
Paul's avatar
Paul committed
72
    std::string name() const { return "reverse_pass"; }
Paul's avatar
Paul committed
73

Shucai Xiao's avatar
Shucai Xiao committed
74
    void apply(migraphx::module& m) const { std::reverse(m.begin(), m.end()); }
Paul's avatar
Paul committed
75
76
77
78
79
};

struct reverse_target
{
    std::string name() const { return "reverse"; }
80
81
82
83
84
    std::vector<migraphx::pass> get_passes(migraphx::context&,
                                           const migraphx::compile_options&) const
    {
        return {reverse_pass{}};
    }
Paul's avatar
Paul committed
85
86
87
88
89
90
91
    migraphx::context get_context() const { return {}; }
};

struct invert_pass
{
    std::string name() const { return "invert_pass"; }

92
    void apply(migraphx::module& p) const
Paul's avatar
Paul committed
93
    {
Paul's avatar
Paul committed
94
        for(auto ins : migraphx::iterator_for(p))
Paul's avatar
Paul committed
95
        {
96
            if(ins->name() == "sum")
Paul's avatar
Paul committed
97
            {
98
                p.replace_instruction(ins, minus_op{}, ins->inputs());
Paul's avatar
Paul committed
99
            }
100
            else if(ins->name() == "minus")
Paul's avatar
Paul committed
101
            {
102
                p.replace_instruction(ins, sum_op{}, ins->inputs());
Paul's avatar
Paul committed
103
104
105
106
107
            }
        }
    }
};

Paul's avatar
Paul committed
108
struct invert_target
Paul's avatar
Paul committed
109
{
Paul's avatar
Paul committed
110
    std::string name() const { return "invert"; }
111
112
113
114
115
    std::vector<migraphx::pass> get_passes(migraphx::context&,
                                           const migraphx::compile_options&) const
    {
        return {invert_pass{}};
    }
Paul's avatar
Paul committed
116
    migraphx::context get_context() const { return {}; }
Paul's avatar
Paul committed
117
118
};

Paul's avatar
Paul committed
119
struct double_invert_target
Paul's avatar
Paul committed
120
{
Paul's avatar
Paul committed
121
    std::string name() const { return "double_invert"; }
122
123
    std::vector<migraphx::pass> get_passes(migraphx::context&,
                                           const migraphx::compile_options&) const
Paul's avatar
Paul committed
124
    {
Paul's avatar
Paul committed
125
        return {invert_pass{}, invert_pass{}};
Paul's avatar
Paul committed
126
    }
Paul's avatar
Paul committed
127
    migraphx::context get_context() const { return {}; }
Paul's avatar
Paul committed
128
129
};

Paul's avatar
Paul committed
130
TEST_CASE(literal_test1)
Paul's avatar
Paul committed
131
{
Paul's avatar
Paul committed
132
    migraphx::program p;
133
134
135
136
    auto* mm = p.get_main_module();
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    mm->add_instruction(sum_op{}, one, two);
137
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
138
139
    EXPECT(result == migraphx::literal{3});
    EXPECT(result != migraphx::literal{4});
Paul's avatar
Paul committed
140
141
}

Paul's avatar
Paul committed
142
TEST_CASE(literal_test2)
Paul's avatar
Paul committed
143
{
Paul's avatar
Paul committed
144
    migraphx::program p;
145
146
147
148
149
    auto* mm  = p.get_main_module();
    auto one  = mm->add_literal(1);
    auto two  = mm->add_literal(2);
    auto sum1 = mm->add_instruction(sum_op{}, one, two);
    mm->add_instruction(sum_op{}, sum1, two);
Paul's avatar
Paul committed
150

151
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
152
153
    EXPECT(result == migraphx::literal{5});
    EXPECT(result != migraphx::literal{3});
Paul's avatar
Paul committed
154
155
}

Paul's avatar
Paul committed
156
TEST_CASE(print_test)
Paul's avatar
Paul committed
157
{
Paul's avatar
Paul committed
158
    migraphx::program p;
159
160
161
162
    auto* mm = p.get_main_module();
    auto x   = mm->add_parameter("x", {migraphx::shape::int32_type});
    auto two = mm->add_literal(2);
    mm->add_instruction(sum_op{}, x, two);
Paul's avatar
Paul committed
163
164
165
166
167
168
169

    std::stringstream ss;
    ss << p;
    std::string s = ss.str();
    EXPECT(!s.empty());
}

Paul's avatar
Paul committed
170
TEST_CASE(param_test)
Paul's avatar
Paul committed
171
{
Paul's avatar
Paul committed
172
    migraphx::program p;
173
174
175
    auto* mm = p.get_main_module();
    auto x   = mm->add_parameter("x", {migraphx::shape::int32_type});
    auto y   = mm->add_parameter("y", {migraphx::shape::int32_type});
Paul's avatar
Paul committed
176

177
    mm->add_instruction(sum_op{}, x, y);
178
179
180
    auto result = p.eval({{"x", migraphx::literal{1}.get_argument()},
                          {"y", migraphx::literal{2}.get_argument()}})
                      .back();
Paul's avatar
Paul committed
181
182
    EXPECT(result == migraphx::literal{3});
    EXPECT(result != migraphx::literal{4});
Paul's avatar
Paul committed
183
184
}

Paul's avatar
Paul committed
185
TEST_CASE(param_error_test)
Khalique's avatar
Khalique committed
186
{
Paul's avatar
Paul committed
187
    migraphx::program p;
188
189
190
    auto* mm = p.get_main_module();
    auto x   = mm->add_parameter("x", {migraphx::shape::int32_type});
    auto y   = mm->add_parameter("y", {migraphx::shape::int32_type});
Khalique's avatar
Khalique committed
191

192
    mm->add_instruction(sum_op{}, x, y);
Paul's avatar
Paul committed
193
    EXPECT(test::throws<migraphx::exception>(
Khalique's avatar
Khalique committed
194
        [&] {
Paul's avatar
Paul committed
195
            p.eval({{"x", migraphx::literal{1}.get_argument()}});
Khalique's avatar
Khalique committed
196
        },
197
        "Parameter not found: y"));
Khalique's avatar
Khalique committed
198
199
}

Paul's avatar
Paul committed
200
201
202
TEST_CASE(param_error_shape_test)
{
    migraphx::program p;
203
204
205
    auto* mm = p.get_main_module();
    auto x   = mm->add_parameter("x", {migraphx::shape::int32_type, {1, 1}});
    auto y   = mm->add_parameter("y", {migraphx::shape::int32_type, {1, 1}});
Paul's avatar
Paul committed
206

207
    mm->add_instruction(sum_op{}, x, y);
Paul's avatar
Paul committed
208
209
210
211
212
213
214
215
216
217
    EXPECT(test::throws<migraphx::exception>(
        [&] {
            p.eval({
                {"x", migraphx::literal{1}.get_argument()},
                {"y", migraphx::literal{{migraphx::shape::int32_type, {1, 1}}, {2}}.get_argument()},
            });
        },
        "Incorrect shape {int32_type, {1}, {0}} for parameter: x"));
}

Paul's avatar
Paul committed
218
TEST_CASE(get_param1)
Paul's avatar
Paul committed
219
220
{
    migraphx::program p;
221
    auto* mm = p.get_main_module();
Paul's avatar
Paul committed
222
    migraphx::shape s{migraphx::shape::int32_type, {1, 2}};
223
224
225
    auto x = mm->add_parameter("x", s);
    auto y = mm->add_parameter("y", s);
    mm->add_instruction(sum_op{}, x, y);
Paul's avatar
Paul committed
226
227
    EXPECT(bool{p.get_parameter("x") == x});
    EXPECT(bool{p.get_parameter("y") == y});
Shucai Xiao's avatar
Shucai Xiao committed
228
    EXPECT(bool{p.get_parameter("nonexistent") == mm->end()});
Paul's avatar
Paul committed
229
}
Paul's avatar
Paul committed
230

Paul's avatar
Paul committed
231
232
233
TEST_CASE(get_param2)
{
    migraphx::program p;
234
235
236
237
    auto* mm = p.get_main_module();
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    mm->add_instruction(sum_op{}, one, two);
Shucai Xiao's avatar
Shucai Xiao committed
238
    EXPECT(bool{p.get_parameter("nonexistent") == mm->end()});
Paul's avatar
Paul committed
239
}
Paul's avatar
Paul committed
240

Paul's avatar
Paul committed
241
242
243
TEST_CASE(get_param_shapes)
{
    migraphx::program p;
244
    auto* mm = p.get_main_module();
Paul's avatar
Paul committed
245
    migraphx::shape s{migraphx::shape::int32_type, {1, 2}};
246
247
248
    auto x = mm->add_parameter("x", s);
    auto y = mm->add_parameter("y", s);
    mm->add_instruction(sum_op{}, x, y);
Paul's avatar
Paul committed
249
250
251
252
    auto m = p.get_parameter_shapes();
    EXPECT(m.count("nonexistent") == 0);
    EXPECT(m.at("x") == s);
    EXPECT(m.at("y") == s);
Paul's avatar
Paul committed
253
254
}

Paul's avatar
Paul committed
255
TEST_CASE(replace_test)
Paul's avatar
Paul committed
256
{
Paul's avatar
Paul committed
257
    migraphx::program p;
258
259
260
261
262
    auto* mm = p.get_main_module();
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    auto sum = mm->add_instruction(sum_op{}, one, two);
    mm->replace_instruction(sum, minus_op{}, two, one);
Shucai Xiao's avatar
Shucai Xiao committed
263
    EXPECT(bool{p.validate() == mm->end()});
Paul's avatar
Paul committed
264

265
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
266
267
    EXPECT(result == migraphx::literal{1});
    EXPECT(result != migraphx::literal{3});
Paul's avatar
Paul committed
268
269
}

Paul's avatar
Paul committed
270
TEST_CASE(replace_ins_test)
Paul's avatar
Paul committed
271
{
Paul's avatar
Paul committed
272
    migraphx::program p;
273
274
275
276
277
278
    auto* mm   = p.get_main_module();
    auto one   = mm->add_literal(1);
    auto two   = mm->add_literal(2);
    auto sum   = mm->add_instruction(sum_op{}, one, two);
    auto minus = mm->add_instruction(minus_op{}, two, one);
    mm->replace_instruction(sum, minus);
Shucai Xiao's avatar
Shucai Xiao committed
279
    EXPECT(bool{p.validate() == mm->end()});
Paul's avatar
Paul committed
280

281
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
282
283
    EXPECT(result == migraphx::literal{1});
    EXPECT(result != migraphx::literal{3});
Paul's avatar
Paul committed
284
285
}

Paul's avatar
Paul committed
286
TEST_CASE(replace_ins_test2)
Paul's avatar
Paul committed
287
{
Paul's avatar
Paul committed
288
    migraphx::program p;
289
290
291
292
293
294
295
    auto* mm   = p.get_main_module();
    auto one   = mm->add_literal(1);
    auto two   = mm->add_literal(2);
    auto sum   = mm->add_instruction(sum_op{}, one, two);
    auto minus = mm->add_instruction(minus_op{}, two, one);
    mm->add_instruction(pass_op{}, minus);
    mm->replace_instruction(two, sum);
Shucai Xiao's avatar
Shucai Xiao committed
296
    EXPECT(bool{p.validate() == mm->end()});
Paul's avatar
Paul committed
297

298
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
299
300
    EXPECT(result == migraphx::literal{2});
    EXPECT(result != migraphx::literal{3});
Paul's avatar
Paul committed
301
302
}

Paul's avatar
Paul committed
303
304
305
TEST_CASE(replace_op_test)
{
    migraphx::program p;
306
307
308
309
    auto* mm = p.get_main_module();
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    auto sum = mm->add_instruction(sum_op{}, two, one);
Paul's avatar
Paul committed
310
    sum->replace(minus_op{});
Shucai Xiao's avatar
Shucai Xiao committed
311
    EXPECT(bool{p.validate() == mm->end()});
Paul's avatar
Paul committed
312

313
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
314
315
316
317
318
319
320
    EXPECT(result == migraphx::literal{1});
    EXPECT(result != migraphx::literal{3});
}

TEST_CASE(replace_op_recompute_shape_throw)
{
    migraphx::program p;
321
322
323
324
    auto* mm = p.get_main_module();
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    auto sum = mm->add_instruction(sum_op{}, one, two);
Paul's avatar
Paul committed
325
    EXPECT(test::throws<migraphx::exception>([&] { sum->replace(unary_pass_op{}); }));
Paul's avatar
Paul committed
326
327
}

Paul's avatar
Paul committed
328
TEST_CASE(insert_replace_test)
Paul's avatar
Paul committed
329
{
Paul's avatar
Paul committed
330
    migraphx::program p;
331
332
333
334
335
336
337
338
    auto* mm  = p.get_main_module();
    auto one  = mm->add_literal(1);
    auto two  = mm->add_literal(2);
    auto sum1 = mm->add_instruction(sum_op{}, one, two);
    mm->add_instruction(sum_op{}, sum1, two);

    auto sum0 = mm->insert_instruction(sum1, sum_op{}, two, two);
    mm->replace_instruction(sum1, minus_op{}, sum0, two);
Shucai Xiao's avatar
Shucai Xiao committed
339
    EXPECT(bool{p.validate() == mm->end()});
Paul's avatar
Paul committed
340

341
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
342
343
    EXPECT(result == migraphx::literal{4});
    EXPECT(result != migraphx::literal{5});
Paul's avatar
Paul committed
344
345
}

Paul's avatar
Paul committed
346
347
348
TEST_CASE(remove_test1)
{
    migraphx::program p;
349
350
351
352
353
354
    auto* mm     = p.get_main_module();
    auto one     = mm->add_literal(1);
    auto two     = mm->add_literal(2);
    auto sum     = mm->add_instruction(sum_op{}, one, two);
    auto removed = mm->add_instruction(minus_op{}, sum, one);
    mm->remove_instruction(removed);
Shucai Xiao's avatar
Shucai Xiao committed
355
    EXPECT(bool{p.validate() == mm->end()});
Paul's avatar
Paul committed
356

357
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
358
359
360
361
362
363
364
    EXPECT(result == migraphx::literal{3});
    EXPECT(result != migraphx::literal{1});
}

TEST_CASE(remove_test2)
{
    migraphx::program p;
365
366
367
368
369
370
    auto* mm     = p.get_main_module();
    auto one     = mm->add_literal(1);
    auto two     = mm->add_literal(2);
    auto removed = mm->add_instruction(minus_op{}, two, one);
    mm->add_instruction(sum_op{}, one, two);
    mm->remove_instruction(removed);
Shucai Xiao's avatar
Shucai Xiao committed
371
    EXPECT(bool{p.validate() == mm->end()});
Paul's avatar
Paul committed
372

373
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
374
375
376
377
    EXPECT(result == migraphx::literal{3});
    EXPECT(result != migraphx::literal{1});
}

Paul's avatar
Paul committed
378
TEST_CASE(target_test)
Paul's avatar
Paul committed
379
{
Paul's avatar
Paul committed
380
    migraphx::program p;
381
382
383
384
    auto* mm = p.get_main_module();
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    mm->add_instruction(sum_op{}, one, two);
Paul's avatar
Paul committed
385
    p.compile(id_target{});
386
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
387
388
    EXPECT(result == migraphx::literal{3});
    EXPECT(result != migraphx::literal{4});
Paul's avatar
Paul committed
389
390
}

Paul's avatar
Paul committed
391
TEST_CASE(invert_target_test)
Paul's avatar
Paul committed
392
{
Paul's avatar
Paul committed
393
    migraphx::program p;
394
395
396
397
    auto* mm = p.get_main_module();
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    mm->add_instruction(sum_op{}, two, one);
Paul's avatar
Paul committed
398
    p.compile(invert_target{});
399
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
400
401
    EXPECT(result == migraphx::literal{1});
    EXPECT(result != migraphx::literal{4});
Paul's avatar
Paul committed
402
403
}

Paul's avatar
Paul committed
404
TEST_CASE(double_invert_target_test)
Paul's avatar
Paul committed
405
{
Paul's avatar
Paul committed
406
    migraphx::program p;
407
408
409
410
    auto* mm = p.get_main_module();
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    mm->add_instruction(sum_op{}, two, one);
Paul's avatar
Paul committed
411
    p.compile(double_invert_target{});
412
    auto result = p.eval({}).back();
Paul's avatar
Paul committed
413
414
    EXPECT(result == migraphx::literal{3});
    EXPECT(result != migraphx::literal{4});
Paul's avatar
Paul committed
415
416
}

Paul's avatar
Paul committed
417
418
419
TEST_CASE(reverse_target_test)
{
    migraphx::program p;
420
421
422
423
    auto* mm = p.get_main_module();
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    mm->add_instruction(sum_op{}, one, two);
Paul's avatar
Paul committed
424
    EXPECT(test::throws<migraphx::exception>([&] { p.compile(reverse_target{}); }));
Paul's avatar
Paul committed
425
426
}

Paul's avatar
Paul committed
427
428
// Check that the program doesnt modify the context directly, and only the operators modify the
// context
Paul's avatar
Paul committed
429
430
431
TEST_CASE(eval_context1)
{
    migraphx::program p;
432
    auto* mm = p.get_main_module();
Paul's avatar
Paul committed
433
434
    id_target t{};
    EXPECT(is_shared(t.ctx, t.get_context()));
435
436
437
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    mm->add_instruction(sum_op{}, one, two);
Paul's avatar
Paul committed
438
439
    p.compile(t);
    EXPECT(is_shared(t.ctx, p.get_context()));
440
    p.eval({}).back();
Paul's avatar
Paul committed
441
442
443
444
445
446
    EXPECT(is_shared(t.ctx, p.get_context()));
}

TEST_CASE(eval_context2)
{
    migraphx::program p;
447
    auto* mm = p.get_main_module();
Paul's avatar
Paul committed
448
449
    id_target t{};
    EXPECT(is_shared(t.ctx, t.get_context()));
450
451
452
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    mm->add_instruction(id_ctx_op{}, one, two);
Paul's avatar
Paul committed
453
454
    p.compile(t);
    EXPECT(is_shared(t.ctx, p.get_context()));
455
    p.eval({}).back();
Paul's avatar
Paul committed
456
457
458
459
460
461
462
    // id_ctx_op will modify the context
    EXPECT(not is_shared(t.ctx, p.get_context()));
}

TEST_CASE(eval_context3)
{
    migraphx::program p;
463
    auto* mm = p.get_main_module();
Paul's avatar
Paul committed
464
465
    id_target t{};
    EXPECT(is_shared(t.ctx, t.get_context()));
466
467
468
    auto one = mm->add_literal(1);
    auto two = mm->add_literal(2);
    mm->add_instruction(id_ctx_final_op{}, one, two);
Paul's avatar
Paul committed
469
470
471
472
    p.compile(t);
    // Finalizer will modify the context
    EXPECT(not is_shared(t.ctx, p.get_context()));
    auto ctx = p.get_context();
473
    p.eval({}).back();
Paul's avatar
Paul committed
474
475
476
477
    EXPECT(is_shared(ctx, p.get_context()));
    EXPECT(not is_shared(t.ctx, p.get_context()));
}

Paul's avatar
Paul committed
478
479
480
481
482
483
struct cout_redirect
{
    cout_redirect()                     = delete;
    cout_redirect(const cout_redirect&) = delete;
    template <class T>
    cout_redirect(T& stream) : old(std::cout.rdbuf(stream.rdbuf()))
Paul's avatar
Paul committed
484
485
    {
    }
Paul's avatar
Paul committed
486
    ~cout_redirect() { std::cout.rdbuf(old); }
Paul's avatar
Paul committed
487

Paul's avatar
Paul committed
488
489
    private:
    std::streambuf* old;
Paul's avatar
Paul committed
490
491
};

Paul's avatar
Paul committed
492
template <class F>
Paul's avatar
Paul committed
493
494
495
496
497
498
499
500
501
502
503
std::string capture_output(F f)
{
    std::stringstream ss;
    cout_redirect cr{ss};
    f();
    return ss.str();
}

TEST_CASE(debug_print_test)
{
    migraphx::program p;
504
505
    auto* mm                                    = p.get_main_module();
    auto one                                    = mm->add_literal(1);
Paul's avatar
Paul committed
506
    std::vector<migraphx::instruction_ref> onev = {one};
Paul's avatar
Paul committed
507
508

    migraphx::program p2;
509
510
    auto* mm2 = p2.get_main_module();
    auto one2 = mm2->add_literal(1);
Paul's avatar
Paul committed
511

Shucai Xiao's avatar
Shucai Xiao committed
512
513
514
515
516
    auto program_out = migraphx::trim(capture_output([&] { mm->debug_print(); }));
    auto ins_out     = migraphx::trim(capture_output([&] { mm->debug_print(one); }));
    auto inss_out    = migraphx::trim(capture_output([&] { mm->debug_print(onev); }));
    auto end_out     = migraphx::trim(capture_output([&] { mm->debug_print(mm->end()); }));
    auto p2_ins_out  = migraphx::trim(capture_output([&] { mm->debug_print(one2); }));
Paul's avatar
Paul committed
517
518
519
520

    EXPECT(program_out == ins_out);
    EXPECT(inss_out == ins_out);
    EXPECT(end_out == "End instruction");
Shucai Xiao's avatar
Shucai Xiao committed
521
    EXPECT(p2_ins_out == "Instruction not part of module");
Paul's avatar
Paul committed
522
523
}

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