// File: /workspace/github_cpp_makefile_star2_O2/pfnet-research[P]pml/src/test.cpp
// Function: arith_test::arith_test()
PML_CUSTOM_TEST(arith_test, lang_feature_test) {
    using namespace ast;
    parse_test("1 +(2+3*4) - 3", "Sub(Add(1, Add(2, Mul(3, 4))), 3)");
    eval_test(
            make<sub_expr_t>(
                make<add_expr_t>(
                    make<int_expr_t>(1),
                    make<add_expr_t>(
                        make<int_expr_t>(2),
                        make<mul_expr_t>(
                            make<int_expr_t>(3),
                            make<int_expr_t>(4)))),
                make<int_expr_t>(3)),
            make<int_expr_t>(12));
    parse_test("1-(-3)", "Sub(1, -3)");
    eval_test(
            make<sub_expr_t>(
                make<int_expr_t>(1),
                make<int_expr_t>(-3)),
            make<int_expr_t>(4));
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x110, %rsp            # imm = 0x110
movq %rdi, %rbx
andl $0x0, 0x8(%rdi)
leaq 0x36f90(%rip), %rax     # 0x5b590
movq %rax, (%rdi)
leaq 0x17afe(%rip), %rsi     # 0x3c108
leaq 0x50(%rsp), %rdi
movq %rsp, %rdx
callq 0xeb2e
leaq 0x17af9(%rip), %rsi     # 0x3c117
leaq 0x20(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0xeb2e
leaq 0x50(%rsp), %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x2983a
leaq 0x20(%rsp), %rdi
callq 0x9130
leaq 0x50(%rsp), %rdi
callq 0x9130
leaq 0xcc(%rsp), %rsi
movl $0x1, (%rsi)
movq %rsp, %rdi
callq 0xbc7c
leaq 0xc8(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x40(%rsp), %rdi
callq 0xbc7c
leaq 0xc4(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0x88(%rsp), %rdi
callq 0xbc7c
leaq 0xc0(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0x78(%rsp), %rdi
callq 0xbc7c
leaq 0x98(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x2a408
leaq 0x10(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x98(%rsp), %rdx
callq 0x2a2c0
leaq 0x20(%rsp), %rdi
movq %rsp, %rsi
leaq 0x10(%rsp), %rdx
callq 0x2a179
leaq 0xbc(%rsp), %rsi
movl $0x3, (%rsi)
leaq 0xa8(%rsp), %rdi
callq 0xbc7c
leaq 0x50(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0xa8(%rsp), %rdx
callq 0x2a013
leaq 0x108(%rsp), %r15
leaq 0x58(%rsp), %r14
movaps -0x8(%r14), %xmm0
movaps %xmm0, -0x8(%r15)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r14)
leaq 0xb8(%rsp), %rsi
movl $0xc, (%rsi)
leaq 0xe0(%rsp), %rdi
callq 0xbc7c
leaq 0xf8(%rsp), %r13
leaq 0xe8(%rsp), %r12
movaps -0x8(%r12), %xmm0
movaps %xmm0, -0x8(%r13)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r12)
leaq 0x100(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
movq %rbx, %rdi
callq 0x298b4
movq %r13, %rdi
callq 0xa248
movq %r12, %rdi
callq 0xa248
movq %r15, %rdi
callq 0xa248
movq %r14, %rdi
callq 0xa248
leaq 0xb0(%rsp), %rdi
callq 0xa248
leaq 0x28(%rsp), %rdi
callq 0xa248
leaq 0x18(%rsp), %rdi
callq 0xa248
leaq 0xa0(%rsp), %rdi
callq 0xa248
leaq 0x80(%rsp), %rdi
callq 0xa248
leaq 0x90(%rsp), %rdi
callq 0xa248
leaq 0x48(%rsp), %rdi
callq 0xa248
leaq 0x8(%rsp), %rdi
callq 0xa248
leaq 0x17917(%rip), %rsi     # 0x3c139
leaq 0x50(%rsp), %rdi
movq %rsp, %rdx
callq 0xeb2e
leaq 0x1790a(%rip), %rsi     # 0x3c140
leaq 0x20(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0xeb2e
leaq 0x50(%rsp), %rsi
leaq 0x20(%rsp), %rdx
movq %rbx, %rdi
callq 0x2983a
leaq 0x20(%rsp), %rdi
callq 0x9130
leaq 0x50(%rsp), %rdi
callq 0x9130
leaq 0x98(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x20(%rsp), %rdi
callq 0xbc7c
leaq 0x88(%rsp), %rsi
movl $0xfffffffd, (%rsi)     # imm = 0xFFFFFFFD
movq %rsp, %rdi
callq 0xbc7c
leaq 0x50(%rsp), %rdi
leaq 0x20(%rsp), %rsi
movq %rsp, %rdx
callq 0x2a550
leaq 0xd8(%rsp), %r15
leaq 0x58(%rsp), %r14
movaps -0x8(%r14), %xmm0
movaps %xmm0, -0x8(%r15)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r14)
leaq 0x78(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0x40(%rsp), %rdi
callq 0xbc7c
leaq 0x18(%rsp), %r13
leaq 0x48(%rsp), %r12
movaps -0x8(%r12), %xmm0
movaps %xmm0, -0x8(%r13)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r12)
leaq 0xd0(%rsp), %rsi
leaq 0x10(%rsp), %rdx
movq %rbx, %rdi
callq 0x298b4
movq %r13, %rdi
callq 0xa248
movq %r12, %rdi
callq 0xa248
movq %r15, %rdi
callq 0xa248
movq %r14, %rdi
callq 0xa248
leaq 0x8(%rsp), %rdi
callq 0xa248
leaq 0x28(%rsp), %rdi
callq 0xa248
addq $0x110, %rsp            # imm = 0x110
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
movq %rax, %rbx
movq %r13, %rdi
callq 0xa248
movq %r12, %rdi
callq 0xa248
jmp 0x2496f
movq %rax, %rbx
movq %r15, %rdi
callq 0xa248
movq %r14, %rdi
callq 0xa248
jmp 0x24984
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0xa248
jmp 0x24993
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
jmp 0x24a3f
jmp 0x24a7f
jmp 0x24a61
jmp 0x24a70
jmp 0x24a7f
movq %rax, %rbx
movq %r13, %rdi
callq 0xa248
movq %r12, %rdi
callq 0xa248
jmp 0x249c9
movq %rax, %rbx
movq %r15, %rdi
callq 0xa248
movq %r14, %rdi
callq 0xa248
jmp 0x249de
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0xa248
jmp 0x249f0
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xa248
jmp 0x249ff
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0xa248
leaq 0xa0(%rsp), %rdi
callq 0xa248
leaq 0x80(%rsp), %rdi
callq 0xa248
leaq 0x90(%rsp), %rdi
callq 0xa248
leaq 0x48(%rsp), %rdi
callq 0xa248
leaq 0x8(%rsp), %rdi
callq 0xa248
jmp 0x24a82
movq %rax, %rbx
jmp 0x24a09
movq %rax, %rbx
jmp 0x24a16
movq %rax, %rbx
jmp 0x24a23
movq %rax, %rbx
jmp 0x24a30
movq %rax, %rbx
jmp 0x24a3a
jmp 0x24a7f
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x9130
jmp 0x24a73
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x9130
jmp 0x24a82
movq %rax, %rbx
movq %rbx, %rdi
callq 0x94d0