// File: /workspace/github_cpp_makefile_star2_O1/ArashPartow[P]exprtk/exprtk_test.cpp
// Function: bool test_expression<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, double const&)
inline bool test_expression(const std::string& expression_string, const T& expected_result)
{
   exprtk::symbol_table<T> symbol_table;
   symbol_table.add_constants();

   exprtk::polynomial<T, 1> poly01;
   exprtk::polynomial<T, 2> poly02;
   exprtk::polynomial<T, 3> poly03;
   exprtk::polynomial<T, 4> poly04;
   exprtk::polynomial<T, 5> poly05;
   exprtk::polynomial<T, 6> poly06;
   exprtk::polynomial<T, 7> poly07;
   exprtk::polynomial<T, 8> poly08;
   exprtk::polynomial<T, 9> poly09;
   exprtk::polynomial<T,10> poly10;
   exprtk::polynomial<T,11> poly11;
   exprtk::polynomial<T,12> poly12;

   symbol_table.add_function("poly01", poly01);
   symbol_table.add_function("poly02", poly02);
   symbol_table.add_function("poly03", poly03);
   symbol_table.add_function("poly04", poly04);
   symbol_table.add_function("poly05", poly05);
   symbol_table.add_function("poly06", poly06);
   symbol_table.add_function("poly07", poly07);
   symbol_table.add_function("poly08", poly08);
   symbol_table.add_function("poly09", poly09);
   symbol_table.add_function("poly10", poly10);
   symbol_table.add_function("poly11", poly11);
   symbol_table.add_function("poly12", poly12);

   exprtk::expression<T> expression;
   expression.register_symbol_table(symbol_table);

   {
      exprtk::parser<T> parser;

      if (!parser.compile(expression_string,expression))
      {
         printf("test_expression() - Error: %s   Expression: %s\n",
                parser.error().c_str(),
                expression_string.c_str());

         return false;
      }
   }

   if (!exprtk::expression_helper<T>::is_literal(expression))
   {
      printf("test_expression() - Error: Expression did not compile to a constant!   Expression: %s\n",
             expression_string.c_str());

      return false;
   }

   const T result = expression.value();

   if (not_equal(result,expected_result))
   {
      printf("test_expression() - Computation Error:  Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
             expression_string.c_str(),
             static_cast<double>(expected_result),
             static_cast<double>(result));

      return false;
   }

   return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0xc80, %rsp            # imm = 0xC80
movq %rsi, %rbx
movq %rdi, %r14
movq %rsp, %r15
movq %r15, %rdi
movl $0x1, %esi
callq 0x1eb8c4
movq %r15, %rdi
callq 0x1eb90c
xorl %eax, %eax
movw %ax, 0x1e8(%rsp)
movq %rax, 0x1f0(%rsp)
movq $-0x1, %rcx
movq %rcx, 0x1f8(%rsp)
movq $0x3, 0x200(%rsp)
leaq 0x324907(%rip), %rdx    # 0x50f5b0
movq %rdx, 0x1e0(%rsp)
movw %ax, 0x1c0(%rsp)
movq %rax, 0x1c8(%rsp)
movq %rcx, 0x1d0(%rsp)
movq $0x4, 0x1d8(%rsp)
leaq 0x324ab4(%rip), %rdx    # 0x50f790
movq %rdx, 0x1b8(%rsp)
movw %ax, 0x198(%rsp)
movq %rax, 0x1a0(%rsp)
movq %rcx, 0x1a8(%rsp)
movq $0x5, 0x1b0(%rsp)
leaq 0x324b61(%rip), %rdx    # 0x50f870
movq %rdx, 0x190(%rsp)
movw %ax, 0x170(%rsp)
movq %rax, 0x178(%rsp)
movq %rcx, 0x180(%rsp)
movq $0x6, 0x188(%rsp)
leaq 0x324c0e(%rip), %rdx    # 0x50f950
movq %rdx, 0x168(%rsp)
movw %ax, 0x148(%rsp)
movq %rax, 0x150(%rsp)
movq %rcx, 0x158(%rsp)
movq $0x7, 0x160(%rsp)
leaq 0x324cbb(%rip), %rdx    # 0x50fa30
movq %rdx, 0x140(%rsp)
movw %ax, 0x120(%rsp)
movq %rax, 0x128(%rsp)
movq %rcx, 0x130(%rsp)
movq $0x8, 0x138(%rsp)
leaq 0x324d68(%rip), %rdx    # 0x50fb10
movq %rdx, 0x118(%rsp)
movw %ax, 0xf8(%rsp)
movq %rax, 0x100(%rsp)
movq %rcx, 0x108(%rsp)
movq $0x9, 0x110(%rsp)
leaq 0x324e15(%rip), %rdx    # 0x50fbf0
movq %rdx, 0xf0(%rsp)
movw %ax, 0xd0(%rsp)
movq %rax, 0xd8(%rsp)
movq %rcx, 0xe0(%rsp)
movq $0xa, 0xe8(%rsp)
leaq 0x324ec2(%rip), %rdx    # 0x50fcd0
movq %rdx, 0xc8(%rsp)
movw %ax, 0xa8(%rsp)
movq %rax, 0xb0(%rsp)
movq %rcx, 0xb8(%rsp)
movq $0xb, 0xc0(%rsp)
leaq 0x324f6f(%rip), %rdx    # 0x50fdb0
movq %rdx, 0xa0(%rsp)
movw %ax, 0x80(%rsp)
movq %rax, 0x88(%rsp)
movq %rcx, 0x90(%rsp)
movq $0xc, 0x98(%rsp)
leaq 0x32501c(%rip), %rdx    # 0x50fe90
movq %rdx, 0x78(%rsp)
movw %ax, 0x58(%rsp)
movq %rax, 0x60(%rsp)
movq %rcx, 0x68(%rsp)
movq $0xd, 0x70(%rsp)
leaq 0x3250d8(%rip), %rdx    # 0x50ff70
movq %rdx, 0x50(%rsp)
movw %ax, 0x30(%rsp)
movq %rax, 0x38(%rsp)
movq %rcx, 0x40(%rsp)
movq $0xe, 0x48(%rsp)
leaq 0x325194(%rip), %rax    # 0x510050
movq %rax, 0x28(%rsp)
leaq 0x368(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x1d1e25(%rip), %rsi    # 0x3bccfa
leaq 0x1d1e24(%rip), %rdx    # 0x3bcd00
leaq 0x358(%rsp), %rdi
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x1e0(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eaf1e
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1dd1(%rip), %rsi    # 0x3bcd01
leaq 0x1d1dd0(%rip), %rdx    # 0x3bcd07
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eaf71
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1d85(%rip), %rsi    # 0x3bcd08
leaq 0x1d1d84(%rip), %rdx    # 0x3bcd0e
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x190(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eafc4
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1d39(%rip), %rsi    # 0x3bcd0f
leaq 0x1d1d38(%rip), %rdx    # 0x3bcd15
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x168(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eb017
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1ced(%rip), %rsi    # 0x3bcd16
leaq 0x1d1cec(%rip), %rdx    # 0x3bcd1c
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x140(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eb06a
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1ca1(%rip), %rsi    # 0x3bcd1d
leaq 0x1d1ca0(%rip), %rdx    # 0x3bcd23
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x118(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eb0bd
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1c55(%rip), %rsi    # 0x3bcd24
leaq 0x1d1c54(%rip), %rdx    # 0x3bcd2a
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eb110
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1c09(%rip), %rsi    # 0x3bcd2b
leaq 0x1d1c08(%rip), %rdx    # 0x3bcd31
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eb163
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1bbd(%rip), %rsi    # 0x3bcd32
leaq 0x1d1bbc(%rip), %rdx    # 0x3bcd38
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eb1b6
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1b71(%rip), %rsi    # 0x3bcd39
leaq 0x1d1b70(%rip), %rdx    # 0x3bcd3f
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eb206
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1b28(%rip), %rsi    # 0x3bcd40
leaq 0x1d1b27(%rip), %rdx    # 0x3bcd46
callq 0x1eabb8
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x50(%rsp), %rdx
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eb256
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1d1adf(%rip), %rsi    # 0x3bcd47
leaq 0x1d1ade(%rip), %rdx    # 0x3bcd4d
callq 0x1eabb8
movq %rsp, %r15
leaq 0x358(%rsp), %rsi
leaq 0x28(%rsp), %rdx
movq %r15, %rdi
callq 0x1eba52
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eb2a9
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x8(%rsp), %rdi
callq 0x1ebb7a
movq 0x10(%rsp), %rcx
movq 0x18(%rsp), %rax
subq %rcx, %rax
je 0x1eb30e
sarq $0x3, %rax
cmpq $0x1, %rax
movq %rax, %rsi
adcq $0x0, %rsi
cmpq %r15, %rcx
je 0x1eb31b
movq (%rsp), %rdx
cmpq (%rcx), %rdx
je 0x1eb31b
addq $0x8, %rcx
movl $0x1, %edi
subq %rsi, %rdi
xorl %esi, %esi
cmpq %rsi, %rdi
je 0x1eb30e
decq %rsi
cmpq %r15, %rcx
je 0x1eb306
leaq 0x8(%rcx), %r8
cmpq (%rcx), %rdx
movq %r8, %rcx
jne 0x1eb2ed
negq %rsi
cmpq %rax, %rsi
jb 0x1eb31b
leaq 0x10(%rsp), %rdi
movq %rsp, %rsi
callq 0x1f216a
leaq 0x208(%rsp), %rdi
movl $0x7f, %esi
callq 0x1ebc94
leaq 0x358(%rsp), %rdi
leaq 0x208(%rsp), %rsi
callq 0x1ebd94
leaq 0x308(%rsp), %rdi
callq 0x1f236c
leaq 0x2d8(%rsp), %rdi
callq 0x1f236c
leaq 0x2a8(%rsp), %rdi
callq 0x1f236c
leaq 0x278(%rsp), %rdi
callq 0x1f236c
leaq 0x248(%rsp), %rdi
callq 0x1f236c
leaq 0x218(%rsp), %r15
movq %r15, %rdi
callq 0x1f236c
leaq 0x358(%rsp), %rdi
leaq 0x8(%rsp), %rdx
movq %r14, %rsi
callq 0x1ec5b8
movl %eax, %ebp
testb %al, %al
je 0x1eb3c0
leaq 0x358(%rsp), %rdi
callq 0x1ed044
jmp 0x1eb4d2
movq 0x670(%rsp), %r8
cmpq %r8, 0x690(%rsp)
je 0x1eb417
movq %r8, %rcx
subq 0x678(%rsp), %rcx
movq %rcx, %rdx
sarq $0x3, %rdx
movabsq $-0x30c30c30c30c30c3, %rax # imm = 0xCF3CF3CF3CF3CF3D
imulq %rdx, %rax
cmpq $0x3, %rax
jb 0x1eb46b
movq 0x688(%rsp), %rsi
testq %rcx, %rcx
jle 0x1eb447
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
jmp 0x1eb45d
movq %r15, 0x208(%rsp)
movabsq $0x726f727245206f4e, %rax # imm = 0x726F727245206F4E
movq %rax, 0x218(%rsp)
movq $0x8, 0x210(%rsp)
movb $0x0, 0x220(%rsp)
jmp 0x1eb486
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
notq %rdx
imulq $-0x1f8, %rdx, %r8      # imm = 0xFE08
addq (%rsi,%rdx,8), %r8
addq %rcx, %r8
leaq 0x208(%rsp), %rdi
movq %r15, (%rdi)
movq 0x38(%r8), %rsi
movq 0x40(%r8), %rdx
addq %rsi, %rdx
callq 0x1eda34
movq 0x208(%rsp), %rsi
movq (%r14), %rdx
leaq 0x1d18b6(%rip), %rdi    # 0x3bcd4e
xorl %eax, %eax
callq 0x120080
movq 0x208(%rsp), %rdi
cmpq %r15, %rdi
je 0x1eb4bc
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x1200c0
leaq 0x358(%rsp), %rdi
callq 0x1ed044
testb %bpl, %bpl
je 0x1eb593
movq 0x8(%rsp), %rax
testq %rax, %rax
je 0x1eb57e
movq 0x8(%rax), %rdi
testq %rdi, %rdi
je 0x1eb57e
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x2, %eax
jne 0x1eb57e
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movapd %xmm0, %xmm1
movb $0x1, %bpl
ucomisd %xmm0, %xmm0
jp 0x1eb55e
movsd (%rbx), %xmm0
ucomisd %xmm0, %xmm0
jp 0x1eb55e
movapd %xmm1, %xmm2
subsd %xmm0, %xmm2
movapd 0x1c6e3e(%rip), %xmm3   # 0x3b2370
andpd %xmm3, %xmm2
movapd %xmm1, %xmm4
andpd %xmm3, %xmm4
andpd %xmm3, %xmm0
maxsd %xmm4, %xmm0
maxsd 0x1c6ad2(%rip), %xmm0   # 0x3b2020
mulsd 0x1c6b02(%rip), %xmm0   # 0x3b2058
ucomisd %xmm0, %xmm2
seta %bpl
testb %bpl, %bpl
je 0x1eb578
movq (%r14), %rsi
movsd (%rbx), %xmm0
leaq 0x1d1864(%rip), %rdi    # 0x3bcdd5
movb $0x2, %al
callq 0x120080
xorb $0x1, %bpl
jmp 0x1eb595
movq (%r14), %rsi
leaq 0x1d17f6(%rip), %rdi    # 0x3bcd7e
xorl %ebp, %ebp
xorl %eax, %eax
callq 0x120080
jmp 0x1eb595
xorl %ebp, %ebp
leaq 0x8(%rsp), %rdi
callq 0x1ed306
movq %rsp, %rdi
callq 0x1ed354
movl %ebp, %eax
addq $0xc80, %rsp            # imm = 0xC80
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0x1eb5e3
jmp 0x1eb5bf
jmp 0x1eb5e3
movq %rax, %rbx
leaq 0x358(%rsp), %rdi
callq 0x1ed044
jmp 0x1eb5e6
movq %rax, %rbx
leaq 0x208(%rsp), %rdi
callq 0x1ec570
jmp 0x1eb5e6
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x1ed306
jmp 0x1eb647
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
jmp 0x1eb620
jmp 0x1eb644
movq %rax, %rbx
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1eb647
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x1200c0
jmp 0x1eb647
jmp 0x1eb644
movq %rax, %rbx
movq %rsp, %rdi
callq 0x1ed354
movq %rbx, %rdi
callq 0x120330
nop