// File: /workspace/github_cpp_makefile_star2_O3/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, %r14
movq %rdi, %rbx
movq %rsp, %r15
movq %r15, %rdi
movl $0x1, %esi
callq 0x1e5424
movq %r15, %rdi
callq 0x1e546c
xorl %eax, %eax
movw %ax, 0x1e8(%rsp)
movq %rax, 0x1f0(%rsp)
movq $-0x1, %rcx
movq %rcx, 0x1f8(%rsp)
movq $0x3, 0x200(%rsp)
leaq 0x2f194a(%rip), %rdx    # 0x4d6180
movq %rdx, 0x1e0(%rsp)
movw %ax, 0x1c0(%rsp)
movq %rax, 0x1c8(%rsp)
movq %rcx, 0x1d0(%rsp)
movq $0x4, 0x1d8(%rsp)
leaq 0x2f1a2f(%rip), %rdx    # 0x4d6298
movq %rdx, 0x1b8(%rsp)
movw %ax, 0x198(%rsp)
movq %rax, 0x1a0(%rsp)
movq %rcx, 0x1a8(%rsp)
movq $0x5, 0x1b0(%rsp)
leaq 0x2f1adc(%rip), %rdx    # 0x4d6378
movq %rdx, 0x190(%rsp)
movw %ax, 0x170(%rsp)
movq %rax, 0x178(%rsp)
movq %rcx, 0x180(%rsp)
movq $0x6, 0x188(%rsp)
leaq 0x2f1b89(%rip), %rdx    # 0x4d6458
movq %rdx, 0x168(%rsp)
movw %ax, 0x148(%rsp)
movq %rax, 0x150(%rsp)
movq %rcx, 0x158(%rsp)
movq $0x7, 0x160(%rsp)
leaq 0x2f1c36(%rip), %rdx    # 0x4d6538
movq %rdx, 0x140(%rsp)
movw %ax, 0x120(%rsp)
movq %rax, 0x128(%rsp)
movq %rcx, 0x130(%rsp)
movq $0x8, 0x138(%rsp)
leaq 0x2f1ce3(%rip), %rdx    # 0x4d6618
movq %rdx, 0x118(%rsp)
movw %ax, 0xf8(%rsp)
movq %rax, 0x100(%rsp)
movq %rcx, 0x108(%rsp)
movq $0x9, 0x110(%rsp)
leaq 0x2f1d90(%rip), %rdx    # 0x4d66f8
movq %rdx, 0xf0(%rsp)
movw %ax, 0xd0(%rsp)
movq %rax, 0xd8(%rsp)
movq %rcx, 0xe0(%rsp)
movq $0xa, 0xe8(%rsp)
leaq 0x2f1e3d(%rip), %rdx    # 0x4d67d8
movq %rdx, 0xc8(%rsp)
movw %ax, 0xa8(%rsp)
movq %rax, 0xb0(%rsp)
movq %rcx, 0xb8(%rsp)
movq $0xb, 0xc0(%rsp)
leaq 0x2f1eea(%rip), %rdx    # 0x4d68b8
movq %rdx, 0xa0(%rsp)
movw %ax, 0x80(%rsp)
movq %rax, 0x88(%rsp)
movq %rcx, 0x90(%rsp)
movq $0xc, 0x98(%rsp)
leaq 0x2f1f97(%rip), %rdx    # 0x4d6998
movq %rdx, 0x78(%rsp)
movw %ax, 0x58(%rsp)
movq %rax, 0x60(%rsp)
movq %rcx, 0x68(%rsp)
movq $0xd, 0x70(%rsp)
leaq 0x2f2053(%rip), %rdx    # 0x4d6a78
movq %rdx, 0x50(%rsp)
movw %ax, 0x30(%rsp)
movq %rax, 0x38(%rsp)
movq %rcx, 0x40(%rsp)
movq $0xe, 0x48(%rsp)
leaq 0x2f210f(%rip), %rax    # 0x4d6b58
movq %rax, 0x28(%rsp)
leaq 0x368(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x1af2f0(%rip), %rsi    # 0x393d52
leaq 0x1af2ef(%rip), %rdx    # 0x393d58
leaq 0x358(%rsp), %rdi
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x1e0(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4aab
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1af29c(%rip), %rsi    # 0x393d59
leaq 0x1af29b(%rip), %rdx    # 0x393d5f
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4afe
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1af250(%rip), %rsi    # 0x393d60
leaq 0x1af24f(%rip), %rdx    # 0x393d66
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x190(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4b51
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1af204(%rip), %rsi    # 0x393d67
leaq 0x1af203(%rip), %rdx    # 0x393d6d
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x168(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4ba4
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1af1b8(%rip), %rsi    # 0x393d6e
leaq 0x1af1b7(%rip), %rdx    # 0x393d74
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x140(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4bf7
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1af16c(%rip), %rsi    # 0x393d75
leaq 0x1af16b(%rip), %rdx    # 0x393d7b
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x118(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4c4a
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1af120(%rip), %rsi    # 0x393d7c
leaq 0x1af11f(%rip), %rdx    # 0x393d82
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4c9d
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1af0d4(%rip), %rsi    # 0x393d83
leaq 0x1af0d3(%rip), %rdx    # 0x393d89
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4cf0
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1af088(%rip), %rsi    # 0x393d8a
leaq 0x1af087(%rip), %rdx    # 0x393d90
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4d43
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1af03c(%rip), %rsi    # 0x393d91
leaq 0x1af03b(%rip), %rdx    # 0x393d97
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4d93
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1aeff3(%rip), %rsi    # 0x393d98
leaq 0x1aeff2(%rip), %rdx    # 0x393d9e
callq 0x1e4740
movq %rsp, %rdi
leaq 0x358(%rsp), %rsi
leaq 0x50(%rsp), %rdx
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4de3
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x1aefaa(%rip), %rsi    # 0x393d9f
leaq 0x1aefa9(%rip), %rdx    # 0x393da5
callq 0x1e4740
movq %rsp, %r15
leaq 0x358(%rsp), %rsi
leaq 0x28(%rsp), %rdx
movq %r15, %rdi
callq 0x1e55b2
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e4e36
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x8(%rsp), %rdi
callq 0x1e56bc
movq 0x10(%rsp), %rax
movq 0x18(%rsp), %rcx
subq %rax, %rcx
je 0x1e4e72
sarq $0x3, %rcx
movq (%rsp), %rdx
cmpq $0x1, %rcx
adcq $0x0, %rcx
cmpq %r15, %rax
je 0x1e4e7f
cmpq (%rax), %rdx
je 0x1e4e7f
addq $0x8, %rax
decq %rcx
jne 0x1e4e5f
leaq 0x10(%rsp), %rdi
movq %rsp, %rsi
callq 0x1eb0e8
leaq 0x208(%rsp), %rdi
movl $0x7f, %esi
callq 0x1e57c8
leaq 0x358(%rsp), %rdi
leaq 0x208(%rsp), %rsi
callq 0x1e58c8
leaq 0x308(%rsp), %rdi
callq 0x1eb2ea
leaq 0x2d8(%rsp), %rdi
callq 0x1eb2ea
leaq 0x2a8(%rsp), %rdi
callq 0x1eb2ea
leaq 0x278(%rsp), %rdi
callq 0x1eb2ea
leaq 0x248(%rsp), %rdi
callq 0x1eb2ea
leaq 0x218(%rsp), %r15
movq %r15, %rdi
callq 0x1eb2ea
leaq 0x358(%rsp), %rdi
leaq 0x8(%rsp), %rdx
movq %rbx, %rsi
callq 0x1e60ec
testb %al, %al
je 0x1e4fc6
leaq 0x358(%rsp), %rdi
callq 0x1e6d46
movq 0x8(%rsp), %rax
testq %rax, %rax
je 0x1e5025
movq 0x8(%rax), %rdi
testq %rdi, %rdi
je 0x1e5025
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x2, %eax
jne 0x1e5025
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movapd %xmm0, %xmm1
ucomisd %xmm0, %xmm0
movsd (%r14), %xmm0
jp 0x1e4fb0
ucomisd %xmm0, %xmm0
jp 0x1e4fb0
movapd %xmm1, %xmm2
subsd %xmm0, %xmm2
movapd 0x1a43e1(%rip), %xmm3   # 0x389360
andpd %xmm3, %xmm2
movapd %xmm1, %xmm4
andpd %xmm3, %xmm4
andpd %xmm0, %xmm3
maxsd %xmm4, %xmm3
maxsd 0x1a4085(%rip), %xmm3   # 0x389020
mulsd 0x1a40b5(%rip), %xmm3   # 0x389058
movb $0x1, %bpl
ucomisd %xmm3, %xmm2
jbe 0x1e50f4
movq (%rbx), %rsi
leaq 0x1aee73(%rip), %rdi    # 0x393e2d
movb $0x2, %al
callq 0x11e080
jmp 0x1e50f2
movq 0x670(%rsp), %r8
cmpq %r8, 0x690(%rsp)
je 0x1e503d
movq 0x688(%rsp), %rsi
movq %r8, %rcx
subq 0x678(%rsp), %rcx
movq %rcx, %rdx
sarq $0x3, %rdx
movabsq $-0x30c30c30c30c30c3, %rax # imm = 0xCF3CF3CF3CF3CF3D
imulq %rdx, %rax
cmpq $-0xa7, %rcx
jl 0x1e5070
cmpq $0x3, %rax
jb 0x1e5094
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
jmp 0x1e5086
movq (%rbx), %rsi
leaq 0x1aeda7(%rip), %rdi    # 0x393dd6
xorl %ebp, %ebp
xorl %eax, %eax
callq 0x11e080
jmp 0x1e50f4
movq %r15, 0x208(%rsp)
movabsq $0x726f727245206f4e, %rax # imm = 0x726F727245206F4E
movq %rax, 0x218(%rsp)
movq $0x8, 0x210(%rsp)
movb $0x0, 0x220(%rsp)
movq %r15, %rsi
jmp 0x1e50b7
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 0x1e7738
movq 0x208(%rsp), %rsi
movq (%rbx), %rdx
leaq 0x1aece5(%rip), %rdi    # 0x393da6
xorl %eax, %eax
callq 0x11e080
movq 0x208(%rsp), %rdi
cmpq %r15, %rdi
je 0x1e50e5
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x11e0c0
leaq 0x358(%rsp), %rdi
callq 0x1e6d46
xorl %ebp, %ebp
leaq 0x8(%rsp), %rdi
callq 0x1e7008
movq %rsp, %rdi
callq 0x1e7056
movl %ebp, %eax
addq $0xc80, %rsp            # imm = 0xC80
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
jmp 0x1e5142
jmp 0x1e511e
jmp 0x1e5142
movq %rax, %rbx
leaq 0x358(%rsp), %rdi
callq 0x1e6d46
jmp 0x1e5145
movq %rax, %rbx
leaq 0x208(%rsp), %rdi
callq 0x1e60a4
jmp 0x1e5145
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x1e7008
jmp 0x1e51a6
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
jmp 0x1e517f
jmp 0x1e51a3
movq %rax, %rbx
movq 0x358(%rsp), %rdi
cmpq %r12, %rdi
je 0x1e51a6
movq 0x368(%rsp), %rsi
incq %rsi
callq 0x11e0c0
jmp 0x1e51a6
jmp 0x1e51a3
movq %rax, %rbx
movq %rsp, %rdi
callq 0x1e7056
movq %rbx, %rdi
callq 0x11e330