// File: /workspace/github_cpp_makefile_star2_O2/pfnet-research[P]pml/src/test.cpp
// Function: translation_rand_test::translation_rand_test()
PML_TEST(translation_rand_test) {
    using namespace ast;
    using namespace mdp;
    assert_eq(
            translate_to_mdp(ast::rand_expr_t{1, 2}).mdp,
            mdp_t {
                "default",
                {
                    mdp::variable_t{"location", bound_t{0, 1}, 0},
                    mdp::variable_t{"v0", bound_t{1, 2}, 1}
                },
                {}, // constants
                {
                    command_t {
                        make<mdp::binop_expr_t>(
                            make<mdp::var_expr_t>("location"),
                            make<mdp::int_expr_t>(0),
                            mdp::binop_kind_t::Eq),
                        {
                            branch_t {
                                make<mdp::binop_expr_t>(
                                    make<mdp::int_expr_t>(1),
                                    make<mdp::int_expr_t>(2),
                                    mdp::binop_kind_t::Div),
                                make<mdp::binop_expr_t>(
                                    make<mdp::binop_expr_t>(
                                        make<mdp::var_expr_t>("location'"),
                                        make<mdp::int_expr_t>(1),
                                        mdp::binop_kind_t::Eq),
                                    make<mdp::binop_expr_t>(
                                        make<mdp::var_expr_t>("v0'"),
                                        make<mdp::int_expr_t>(1),
                                        mdp::binop_kind_t::Eq),
                                    mdp::binop_kind_t::And)
                            },
                            branch_t {
                                make<mdp::binop_expr_t>(
                                    make<mdp::int_expr_t>(1),
                                    make<mdp::int_expr_t>(2),
                                    mdp::binop_kind_t::Div),
                                make<mdp::binop_expr_t>(
                                    make<mdp::binop_expr_t>(
                                        make<mdp::var_expr_t>("location'"),
                                        make<mdp::int_expr_t>(1),
                                        mdp::binop_kind_t::Eq),
                                    make<mdp::binop_expr_t>(
                                        make<mdp::var_expr_t>("v0'"),
                                        make<mdp::int_expr_t>(2),
                                        mdp::binop_kind_t::Eq),
                                    mdp::binop_kind_t::And)
                            }
                        }
                    }
                }
            });
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x418, %rsp            # imm = 0x418
movq %rdi, %r14
andl $0x0, 0x8(%rdi)
leaq 0x34fbd(%rip), %rax     # 0x5b7f8
movq %rax, (%rdi)
leaq 0x3444b(%rip), %rax     # 0x5ac90
leaq 0x368(%rsp), %rsi
movq %rax, (%rsi)
movabsq $0x200000001, %r15      # imm = 0x200000001
movq %r15, 0x8(%rsi)
leaq 0x378(%rsp), %rdi
callq 0x32330
leaq 0x15be0(%rip), %rsi     # 0x3c452
leaq 0x2a0(%rsp), %rdi
leaq 0x1f(%rsp), %rdx
callq 0xeb2e
leaq 0xf8b9(%rip), %rsi      # 0x36144
leaq 0x270(%rsp), %rdi
leaq 0x1e(%rsp), %rdx
callq 0xeb2e
movabsq $0x100000000, %rax      # imm = 0x100000000
leaq 0x298(%rsp), %rdx
movq %rax, (%rdx)
leaq 0x308(%rsp), %rbx
leaq 0x270(%rsp), %rsi
movq %rbx, %rdi
xorl %ecx, %ecx
callq 0x2c314
leaq 0x338(%rsp), %rbx
leaq 0x15bad(%rip), %rsi     # 0x3c488
leaq 0x250(%rsp), %rdi
leaq 0x1d(%rsp), %rdx
callq 0xeb2e
leaq 0x290(%rsp), %rdx
movq %r15, (%rdx)
leaq 0x250(%rsp), %rsi
pushq $0x1
popq %rcx
movq %rbx, %rdi
callq 0x2c314
leaq 0x2c0(%rsp), %rdi
leaq 0x308(%rsp), %rsi
pushq $0x2
popq %rdx
leaq 0x1c(%rsp), %rcx
callq 0x2c33c
xorps %xmm0, %xmm0
movups %xmm0, 0x2d8(%rsp)
andq $0x0, 0x2e8(%rsp)
leaq 0xf801(%rip), %rsi      # 0x36144
leaq 0x188(%rsp), %rdi
callq 0x2c735
leaq 0x1dc(%rsp), %rsi
andl $0x0, (%rsi)
leaq 0x178(%rsp), %rdi
callq 0x2c961
leaq 0x1d8(%rsp), %rcx
movl $0x8, (%rcx)
leaq 0x240(%rsp), %rdi
leaq 0x188(%rsp), %rsi
leaq 0x178(%rsp), %rdx
callq 0x2c4a2
leaq 0x248(%rsp), %r13
movaps -0x8(%r13), %xmm0
movaps %xmm0, 0x1e0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r13)
leaq 0x1d4(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x168(%rsp), %rdi
callq 0x2c961
leaq 0x1d0(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x158(%rsp), %rdi
callq 0x2c961
leaq 0x1cc(%rsp), %rcx
movl $0x1, (%rcx)
leaq 0x60(%rsp), %rdi
leaq 0x168(%rsp), %rsi
leaq 0x158(%rsp), %rdx
callq 0x2cac6
leaq 0x68(%rsp), %rax
movaps -0x8(%rax), %xmm0
movaps %xmm0, 0x20(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rax)
leaq 0x15a61(%rip), %rsi     # 0x3c48b
leaq 0x138(%rsp), %rdi
callq 0x2cd81
leaq 0x1c8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x128(%rsp), %rdi
callq 0x2c961
leaq 0x1c4(%rsp), %rcx
movl $0x8, (%rcx)
leaq 0x148(%rsp), %rdi
leaq 0x138(%rsp), %rsi
leaq 0x128(%rsp), %rdx
callq 0x2c4a2
leaq 0x15a11(%rip), %rsi     # 0x3c495
leaq 0x108(%rsp), %rdi
callq 0x2ceb2
leaq 0x1c0(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xf8(%rsp), %rdi
callq 0x2c961
leaq 0x1bc(%rsp), %rcx
movl $0x8, (%rcx)
leaq 0x118(%rsp), %rdi
leaq 0x108(%rsp), %rsi
leaq 0xf8(%rsp), %rdx
callq 0x2c4a2
leaq 0x1b8(%rsp), %rcx
movl $0xa, (%rcx)
leaq 0x230(%rsp), %rdi
leaq 0x148(%rsp), %rsi
leaq 0x118(%rsp), %rdx
callq 0x2cc23
leaq 0x238(%rsp), %rbp
movaps -0x8(%rbp), %xmm0
movaps %xmm0, 0x30(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rbp)
leaq 0x1b4(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xe8(%rsp), %rdi
callq 0x2c961
leaq 0x1b0(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0xd8(%rsp), %rdi
callq 0x2c961
leaq 0x1ac(%rsp), %rcx
movl $0x1, (%rcx)
leaq 0x220(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
leaq 0xd8(%rsp), %rdx
callq 0x2cac6
leaq 0x228(%rsp), %r12
movaps -0x8(%r12), %xmm0
movaps %xmm0, 0x40(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r12)
leaq 0x158ed(%rip), %rsi     # 0x3c48b
leaq 0xb8(%rsp), %rdi
callq 0x2cd81
leaq 0x1a8(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0xa8(%rsp), %rdi
callq 0x2c961
leaq 0x1a4(%rsp), %rcx
movl $0x8, (%rcx)
leaq 0xc8(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
leaq 0xa8(%rsp), %rdx
callq 0x2c4a2
leaq 0x1589d(%rip), %rsi     # 0x3c495
leaq 0x88(%rsp), %rdi
callq 0x2ceb2
leaq 0x1a0(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x78(%rsp), %rdi
callq 0x2c961
leaq 0x19c(%rsp), %rcx
movl $0x8, (%rcx)
leaq 0x98(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x2c4a2
leaq 0x198(%rsp), %rcx
movl $0xa, (%rcx)
leaq 0x210(%rsp), %rdi
leaq 0xc8(%rsp), %rsi
leaq 0x98(%rsp), %rdx
callq 0x2cc23
leaq 0x1f0(%rsp), %rdi
leaq 0x218(%rsp), %r15
movaps -0x8(%r15), %xmm0
leaq 0x20(%rsp), %rsi
movaps %xmm0, 0x30(%rsi)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r15)
pushq $0x2
popq %rdx
leaq 0x1b(%rsp), %rcx
callq 0x2c376
leaq 0x2f0(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
pushq $0x1
popq %rdx
leaq 0x1a(%rsp), %rcx
callq 0x2c3b0
leaq 0x378(%rsp), %rsi
leaq 0x2a0(%rsp), %rdx
movq %r14, %rdi
callq 0x2bfb6
leaq 0x2a0(%rsp), %rdi
callq 0xa08a
leaq 0x1e0(%rsp), %rdi
callq 0xa198
pushq $0x20
popq %rbx
leaq (%rsp,%rbx), %rdi
addq $0x20, %rdi
callq 0xa218
addq $-0x20, %rbx
cmpq $-0x20, %rbx
jne 0x26cf5
movq %r15, %rdi
callq 0xa248
leaq 0xa0(%rsp), %rdi
callq 0xa248
leaq 0x80(%rsp), %rdi
callq 0xa248
leaq 0x90(%rsp), %rdi
callq 0xa248
leaq 0xd0(%rsp), %rdi
callq 0xa248
leaq 0xb0(%rsp), %rdi
callq 0xa248
leaq 0xc0(%rsp), %rdi
callq 0xa248
movq %r12, %rdi
callq 0xa248
leaq 0xe0(%rsp), %rdi
callq 0xa248
leaq 0xf0(%rsp), %rdi
callq 0xa248
movq %rbp, %rdi
callq 0xa248
leaq 0x120(%rsp), %rdi
callq 0xa248
leaq 0x100(%rsp), %rdi
callq 0xa248
leaq 0x110(%rsp), %rdi
callq 0xa248
leaq 0x150(%rsp), %rdi
callq 0xa248
leaq 0x130(%rsp), %rdi
callq 0xa248
leaq 0x140(%rsp), %rdi
callq 0xa248
leaq 0x68(%rsp), %rdi
callq 0xa248
leaq 0x160(%rsp), %rdi
callq 0xa248
leaq 0x170(%rsp), %rdi
callq 0xa248
movq %r13, %rdi
callq 0xa248
leaq 0x180(%rsp), %rdi
callq 0xa248
leaq 0x190(%rsp), %rdi
callq 0xa248
pushq $0x30
popq %rbx
leaq (%rsp,%rbx), %rdi
addq $0x308, %rdi            # imm = 0x308
callq 0xa3e2
addq $-0x30, %rbx
cmpq $-0x30, %rbx
jne 0x26e23
leaq 0x250(%rsp), %rdi
callq 0x9130
leaq 0x270(%rsp), %rdi
callq 0x9130
leaq 0x378(%rsp), %rdi
callq 0x2c15c
addq $0x418, %rsp            # imm = 0x418
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, 0x10(%rsp)
leaq 0x2a0(%rsp), %rdi
callq 0xa08a
movl $0x0, 0x8(%rsp)
jmp 0x26e9d
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
leaq 0x1e0(%rsp), %rdi
callq 0xa198
movl $0x0, 0xc(%rsp)
jmp 0x26ec5
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
pushq $0x20
popq %r14
leaq (%rsp,%r14), %rdi
addq $0x20, %rdi
callq 0xa218
addq $-0x20, %r14
cmpq $-0x20, %r14
jne 0x26ec9
movq %r15, %rdi
callq 0xa248
xorl %r14d, %r14d
jmp 0x26f01
movq %rax, 0x10(%rsp)
movb $0x1, %r14b
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0xa248
jmp 0x26f24
movq %rax, 0x10(%rsp)
movb $0x1, %r14b
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
leaq 0x80(%rsp), %rdi
callq 0xa248
leaq 0x90(%rsp), %rdi
callq 0xa248
leaq 0xd0(%rsp), %rdi
callq 0xa248
leaq 0xb0(%rsp), %rdi
callq 0xa248
leaq 0xc0(%rsp), %rdi
callq 0xa248
movb $0x1, %r15b
testb %r14b, %r14b
je 0x26f7a
leaq 0x48(%rsp), %rdi
callq 0xa248
xorl %r15d, %r15d
movq %r12, %rdi
callq 0xa248
leaq 0xe0(%rsp), %rdi
callq 0xa248
leaq 0xf0(%rsp), %rdi
callq 0xa248
leaq 0x40(%rsp), %r14
movq %rbp, %rdi
callq 0xa248
xorl %ebp, %ebp
leaq 0x120(%rsp), %rdi
callq 0xa248
leaq 0x100(%rsp), %rdi
callq 0xa248
leaq 0x110(%rsp), %rdi
callq 0xa248
leaq 0x150(%rsp), %rdi
callq 0xa248
leaq 0x130(%rsp), %rdi
callq 0xa248
leaq 0x140(%rsp), %rdi
callq 0xa248
testb %bpl, %bpl
je 0x27008
leaq 0x28(%rsp), %rdi
callq 0xa248
leaq 0x68(%rsp), %rdi
callq 0xa248
leaq 0x160(%rsp), %rdi
callq 0xa248
leaq 0x170(%rsp), %rdi
callq 0xa248
leaq 0x20(%rsp), %r12
cmpq %r14, %r12
sete %al
testb %r15b, %r15b
jne 0x27051
testb %al, %al
jne 0x27051
addq $-0x20, %r14
movq %r14, %rdi
callq 0xa218
cmpq %r12, %r14
jne 0x27040
cmpb $0x0, 0xc(%rsp)
je 0x27065
leaq 0x1e8(%rsp), %rdi
callq 0xa248
movq %r13, %rdi
callq 0xa248
leaq 0x180(%rsp), %rdi
callq 0xa248
leaq 0x190(%rsp), %rdi
callq 0xa248
cmpb $0x0, 0x8(%rsp)
je 0x270ad
leaq 0x2d8(%rsp), %rdi
callq 0xa108
leaq 0x2c0(%rsp), %rdi
callq 0xa12a
movb $0x1, %bpl
jmp 0x270af
xorl %ebp, %ebp
pushq $0x30
popq %r14
leaq (%rsp,%r14), %rdi
addq $0x308, %rdi            # imm = 0x308
callq 0xa3e2
addq $-0x30, %r14
cmpq $-0x30, %r14
jne 0x270b3
movb $0x1, %r14b
leaq 0x250(%rsp), %rdi
callq 0x9130
leaq 0x270(%rsp), %rdi
callq 0x9130
leaq 0x308(%rsp), %rax
cmpq %rbx, %rax
sete %al
orb %r14b, %al
jne 0x27116
leaq 0x308(%rsp), %r14
addq $-0x30, %rbx
movq %rbx, %rdi
callq 0xa3e2
cmpq %r14, %rbx
jne 0x27105
testb %bpl, %bpl
je 0x27128
leaq 0x2a0(%rsp), %rdi
callq 0x9130
leaq 0x378(%rsp), %rdi
callq 0x2c15c
movq 0x10(%rsp), %rdi
callq 0x94d0
movq %rax, 0x10(%rsp)
movb $0x1, %r14b
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26f31
movq %rax, 0x10(%rsp)
movb $0x1, %r14b
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26f3e
movq %rax, 0x10(%rsp)
movb $0x1, %r14b
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26f4b
movq %rax, 0x10(%rsp)
movb $0x1, %r14b
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26f58
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
movb $0x1, %al
movl %eax, 0xc(%rsp)
jmp 0x26f6d
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0xc(%rsp)
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26f82
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0xc(%rsp)
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26f8f
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0xc(%rsp)
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26f9c
movq %rax, 0x10(%rsp)
movb $0x1, %bpl
leaq 0x20(%rsp), %r14
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26fab
movq %rax, 0x10(%rsp)
movb $0x1, %bpl
leaq 0x20(%rsp), %r14
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26fb8
movq %rax, 0x10(%rsp)
movb $0x1, %bpl
leaq 0x20(%rsp), %r14
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26fc5
movq %rax, 0x10(%rsp)
movb $0x1, %bpl
leaq 0x20(%rsp), %r14
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26fd2
movq %rax, 0x10(%rsp)
movb $0x1, %bpl
leaq 0x20(%rsp), %r14
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26fdf
movq %rax, 0x10(%rsp)
movb $0x1, %bpl
leaq 0x20(%rsp), %r14
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0xc(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x26fec
movq %rax, 0x10(%rsp)
leaq 0x20(%rsp), %r14
movb $0x1, %al
movl %eax, 0x8(%rsp)
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0xc(%rsp)
jmp 0x26ffe
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0xc(%rsp)
leaq 0x20(%rsp), %r14
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x27012
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0xc(%rsp)
leaq 0x20(%rsp), %r14
xorl %r15d, %r15d
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x2701f
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x27058
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x2706d
movq %rax, 0x10(%rsp)
movb $0x1, %al
movl %eax, 0x8(%rsp)
jmp 0x2707a
movq %rax, 0x10(%rsp)
jmp 0x2708e
movq %rax, 0x10(%rsp)
jmp 0x270a8
movq %rax, 0x10(%rsp)
movb $0x1, %bpl
xorl %r14d, %r14d
jmp 0x270d0
jmp 0x2737a
movq %rax, 0x10(%rsp)
movb $0x1, %bpl
xorl %r14d, %r14d
jmp 0x270dd
movq %rax, 0x10(%rsp)
jmp 0x2711b
movq %rax, 0x10(%rsp)
jmp 0x27128