// File: /workspace/github_cpp_makefile_star2_O2/pfnet-research[P]pml/src/test.cpp
// Function: formula_test::formula_test()
PML_CUSTOM_TEST(formula_test, lang_feature_test) {
    using namespace ast;
    parse_test("1+2 == 4", "Eq(Add(1, 2), 4)");
    parse_test("1+2 != 4", "Neq(Add(1, 2), 4)");
    parse_test("1+2 <= 4", "Leq(Add(1, 2), 4)");
    parse_test("1+2 >= 4", "Geq(Add(1, 2), 4)");
    eval_test(
            make<eq_expr_t>(
                make<add_expr_t>(
                    make<int_expr_t>(1),
                    make<int_expr_t>(2)),
                make<int_expr_t>(4)),
            make<bool_expr_t>(false));
    eval_test(
            make<neq_expr_t>(
                make<add_expr_t>(
                    make<int_expr_t>(1),
                    make<int_expr_t>(2)),
                make<int_expr_t>(4)),
            make<bool_expr_t>(true));
    eval_test(
            make<leq_expr_t>(
                make<add_expr_t>(
                    make<int_expr_t>(1),
                    make<int_expr_t>(2)),
                make<int_expr_t>(4)),
            make<bool_expr_t>(true));
    eval_test(
            make<geq_expr_t>(
                make<add_expr_t>(
                    make<int_expr_t>(1),
                    make<int_expr_t>(2)),
                make<int_expr_t>(4)),
            make<bool_expr_t>(false));
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf0, %rsp
movq %rdi, %rbx
andl $0x0, 0x8(%rdi)
leaq 0x36b00(%rip), %rax     # 0x5b638
movq %rax, (%rdi)
leaq 0x17698(%rip), %rsi     # 0x3c1da
leaq 0x70(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xeb2e
leaq 0x1768b(%rip), %rsi     # 0x3c1e3
leaq 0x40(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0xeb2e
leaq 0x70(%rsp), %rsi
leaq 0x40(%rsp), %rdx
movq %rbx, %rdi
callq 0x2983a
leaq 0x40(%rsp), %rdi
callq 0x9130
leaq 0x70(%rsp), %rdi
callq 0x9130
leaq 0x17660(%rip), %rsi     # 0x3c1f4
leaq 0x70(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xeb2e
leaq 0x17653(%rip), %rsi     # 0x3c1fd
leaq 0x40(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0xeb2e
leaq 0x70(%rsp), %rsi
leaq 0x40(%rsp), %rdx
movq %rbx, %rdi
callq 0x2983a
leaq 0x40(%rsp), %rdi
callq 0x9130
leaq 0x70(%rsp), %rdi
callq 0x9130
leaq 0x17629(%rip), %rsi     # 0x3c20f
leaq 0x70(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xeb2e
leaq 0x1761c(%rip), %rsi     # 0x3c218
leaq 0x40(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0xeb2e
leaq 0x70(%rsp), %rsi
leaq 0x40(%rsp), %rdx
movq %rbx, %rdi
callq 0x2983a
leaq 0x40(%rsp), %rdi
callq 0x9130
leaq 0x70(%rsp), %rdi
callq 0x9130
leaq 0x175f2(%rip), %rsi     # 0x3c22a
leaq 0x70(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0xeb2e
leaq 0x175e5(%rip), %rsi     # 0x3c233
leaq 0x40(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0xeb2e
leaq 0x70(%rsp), %rsi
leaq 0x40(%rsp), %rdx
movq %rbx, %rdi
callq 0x2983a
leaq 0x40(%rsp), %rdi
callq 0x9130
leaq 0x70(%rsp), %rdi
callq 0x9130
leaq 0x6c(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x20(%rsp), %rdi
callq 0xbc7c
leaq 0x68(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0xbc7c
leaq 0x40(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0x2a838
leaq 0x64(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0x30(%rsp), %rdi
callq 0xbc7c
leaq 0x70(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x2a6f0
leaq 0xe8(%rsp), %r15
leaq 0x78(%rsp), %r14
movaps -0x8(%r14), %xmm0
movaps %xmm0, -0x8(%r15)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r14)
leaq 0xf(%rsp), %rsi
movb $0x0, (%rsi)
leaq 0x90(%rsp), %rdi
callq 0xbaf2
leaq 0xa8(%rsp), %r13
leaq 0x98(%rsp), %r12
movaps -0x8(%r12), %xmm0
movaps %xmm0, -0x8(%r13)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r12)
leaq 0xe0(%rsp), %rsi
leaq 0xa0(%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 0x38(%rsp), %rdi
callq 0xa248
leaq 0x48(%rsp), %rdi
callq 0xa248
leaq 0x18(%rsp), %rdi
callq 0xa248
leaq 0x28(%rsp), %rdi
callq 0xa248
leaq 0x6c(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x20(%rsp), %rdi
callq 0xbc7c
leaq 0x68(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0xbc7c
leaq 0x40(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0x2a838
leaq 0x64(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0x30(%rsp), %rdi
callq 0xbc7c
leaq 0x70(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x2a980
leaq 0xd8(%rsp), %r15
leaq 0x78(%rsp), %r14
movaps -0x8(%r14), %xmm0
movaps %xmm0, -0x8(%r15)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r14)
leaq 0xf(%rsp), %rsi
movb $0x1, (%rsi)
leaq 0x90(%rsp), %rdi
callq 0xbaf2
leaq 0xa8(%rsp), %r13
leaq 0x98(%rsp), %r12
movaps -0x8(%r12), %xmm0
movaps %xmm0, -0x8(%r13)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r12)
leaq 0xd0(%rsp), %rsi
leaq 0xa0(%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 0x38(%rsp), %rdi
callq 0xa248
leaq 0x48(%rsp), %rdi
callq 0xa248
leaq 0x18(%rsp), %rdi
callq 0xa248
leaq 0x28(%rsp), %rdi
callq 0xa248
leaq 0x6c(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x20(%rsp), %rdi
callq 0xbc7c
leaq 0x68(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0xbc7c
leaq 0x40(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0x2a838
leaq 0x64(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0x30(%rsp), %rdi
callq 0xbc7c
leaq 0x70(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x2aac8
leaq 0xc8(%rsp), %r15
leaq 0x78(%rsp), %r14
movaps -0x8(%r14), %xmm0
movaps %xmm0, -0x8(%r15)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r14)
leaq 0xf(%rsp), %rsi
movb $0x1, (%rsi)
leaq 0x90(%rsp), %rdi
callq 0xbaf2
leaq 0xa8(%rsp), %r13
leaq 0x98(%rsp), %r12
movaps -0x8(%r12), %xmm0
movaps %xmm0, -0x8(%r13)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r12)
leaq 0xc0(%rsp), %rsi
leaq 0xa0(%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 0x38(%rsp), %rdi
callq 0xa248
leaq 0x48(%rsp), %rdi
callq 0xa248
leaq 0x18(%rsp), %rdi
callq 0xa248
leaq 0x28(%rsp), %rdi
callq 0xa248
leaq 0x6c(%rsp), %rsi
movl $0x1, (%rsi)
leaq 0x20(%rsp), %rdi
callq 0xbc7c
leaq 0x68(%rsp), %rsi
movl $0x2, (%rsi)
leaq 0x10(%rsp), %rdi
callq 0xbc7c
leaq 0x40(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0x2a838
leaq 0x64(%rsp), %rsi
movl $0x4, (%rsi)
leaq 0x30(%rsp), %rdi
callq 0xbc7c
leaq 0x70(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x2ac10
leaq 0xb8(%rsp), %r15
leaq 0x78(%rsp), %r14
movaps -0x8(%r14), %xmm0
movaps %xmm0, -0x8(%r15)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r14)
leaq 0xf(%rsp), %rsi
movb $0x0, (%rsi)
leaq 0x90(%rsp), %rdi
callq 0xbaf2
leaq 0xa8(%rsp), %r13
leaq 0x98(%rsp), %r12
movaps -0x8(%r12), %xmm0
movaps %xmm0, -0x8(%r13)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r12)
leaq 0xb0(%rsp), %rsi
leaq 0xa0(%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 0x38(%rsp), %rdi
callq 0xa248
leaq 0x48(%rsp), %rdi
callq 0xa248
leaq 0x18(%rsp), %rdi
callq 0xa248
leaq 0x28(%rsp), %rdi
callq 0xa248
addq $0xf0, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
jmp 0x25146
jmp 0x2515b
jmp 0x25170
jmp 0x2517f
jmp 0x2518e
jmp 0x251a7
jmp 0x251de
jmp 0x25146
jmp 0x2515b
jmp 0x25170
jmp 0x2517f
jmp 0x2518e
jmp 0x251a7
jmp 0x251de
jmp 0x25146
jmp 0x2515b
jmp 0x25170
jmp 0x2517f
jmp 0x2518e
jmp 0x251a7
jmp 0x251de
movq %rax, %rbx
movq %r13, %rdi
callq 0xa248
movq %r12, %rdi
callq 0xa248
jmp 0x2515e
movq %rax, %rbx
movq %r15, %rdi
callq 0xa248
movq %r14, %rdi
callq 0xa248
jmp 0x25173
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0xa248
jmp 0x25182
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0xa248
jmp 0x25191
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0xa248
leaq 0x28(%rsp), %rdi
callq 0xa248
jmp 0x251e1
movq %rax, %rbx
jmp 0x2519b
jmp 0x251de
jmp 0x251c0
jmp 0x251cf
jmp 0x251de
jmp 0x251c0
jmp 0x251cf
jmp 0x251de
jmp 0x251c0
jmp 0x251cf
jmp 0x251de
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x9130
jmp 0x251d2
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x9130
jmp 0x251e1
movq %rax, %rbx
movq %rbx, %rdi
callq 0x94d0
nop