// File: /workspace/github_cpp_makefile_star2_O2/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 %rbx
subq $0xc88, %rsp            # imm = 0xC88
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x8(%rsp), %r15
pushq $0x1
popq %rsi
movq %r15, %rdi
callq 0x19486e
movq %r15, %rdi
callq 0x194892
andw $0x0, 0x1f0(%rsp)
andq $0x0, 0x1f8(%rsp)
orq $-0x1, 0x200(%rsp)
andw $0x0, 0x1c8(%rsp)
movq $0x3, 0x208(%rsp)
andq $0x0, 0x1d0(%rsp)
leaq 0x2bb1ee(%rip), %rax    # 0x44f160
orq $-0x1, 0x1d8(%rsp)
movq %rax, 0x1e8(%rsp)
andw $0x0, 0x1a0(%rsp)
movq $0x4, 0x1e0(%rsp)
andq $0x0, 0x1a8(%rsp)
leaq 0x2bb2d0(%rip), %rax    # 0x44f278
orq $-0x1, 0x1b0(%rsp)
movq %rax, 0x1c0(%rsp)
andw $0x0, 0x178(%rsp)
movq $0x5, 0x1b8(%rsp)
andq $0x0, 0x180(%rsp)
leaq 0x2bb37a(%rip), %rax    # 0x44f358
orq $-0x1, 0x188(%rsp)
movq %rax, 0x198(%rsp)
andw $0x0, 0x150(%rsp)
movq $0x6, 0x190(%rsp)
andq $0x0, 0x158(%rsp)
leaq 0x2bb424(%rip), %rax    # 0x44f438
orq $-0x1, 0x160(%rsp)
movq %rax, 0x170(%rsp)
andw $0x0, 0x128(%rsp)
movq $0x7, 0x168(%rsp)
andq $0x0, 0x130(%rsp)
leaq 0x2bb4ce(%rip), %rax    # 0x44f518
orq $-0x1, 0x138(%rsp)
movq %rax, 0x148(%rsp)
andw $0x0, 0x100(%rsp)
movq $0x8, 0x140(%rsp)
andq $0x0, 0x108(%rsp)
leaq 0x2bb578(%rip), %rax    # 0x44f5f8
orq $-0x1, 0x110(%rsp)
movq %rax, 0x120(%rsp)
andw $0x0, 0xd8(%rsp)
movq $0x9, 0x118(%rsp)
andq $0x0, 0xe0(%rsp)
leaq 0x2bb622(%rip), %rax    # 0x44f6d8
orq $-0x1, 0xe8(%rsp)
movq %rax, 0xf8(%rsp)
andw $0x0, 0xb0(%rsp)
movq $0xa, 0xf0(%rsp)
andq $0x0, 0xb8(%rsp)
leaq 0x2bb6cc(%rip), %rax    # 0x44f7b8
orq $-0x1, 0xc0(%rsp)
movq %rax, 0xd0(%rsp)
andw $0x0, 0x88(%rsp)
movq $0xb, 0xc8(%rsp)
andq $0x0, 0x90(%rsp)
leaq 0x2bb776(%rip), %rax    # 0x44f898
orq $-0x1, 0x98(%rsp)
movq %rax, 0xa8(%rsp)
andw $0x0, 0x60(%rsp)
movq $0xc, 0xa0(%rsp)
andq $0x0, 0x68(%rsp)
leaq 0x2bb826(%rip), %rax    # 0x44f978
orq $-0x1, 0x70(%rsp)
movq %rax, 0x80(%rsp)
andw $0x0, 0x38(%rsp)
movq $0xd, 0x78(%rsp)
andq $0x0, 0x40(%rsp)
leaq 0x2bb8dc(%rip), %rax    # 0x44fa58
orq $-0x1, 0x48(%rsp)
movq %rax, 0x58(%rsp)
movq $0xe, 0x50(%rsp)
leaq 0x2bb9a1(%rip), %rax    # 0x44fb38
movq %rax, 0x30(%rsp)
leaq 0x14525f(%rip), %rsi    # 0x2d9402
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x1e8(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x145223(%rip), %rsi    # 0x2d9409
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x1c0(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x1451e7(%rip), %rsi    # 0x2d9410
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x198(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x1451ab(%rip), %rsi    # 0x2d9417
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x170(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x14516f(%rip), %rsi    # 0x2d941e
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x148(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x145133(%rip), %rsi    # 0x2d9425
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x120(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x1450f7(%rip), %rsi    # 0x2d942c
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0xf8(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x1450bb(%rip), %rsi    # 0x2d9433
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0xd0(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x14507f(%rip), %rsi    # 0x2d943a
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0xa8(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x145043(%rip), %rsi    # 0x2d9441
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x145007(%rip), %rsi    # 0x2d9448
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x144fce(%rip), %rsi    # 0x2d944f
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x30(%rsp), %rdx
callq 0x1948b8
leaq 0x360(%rsp), %rdi
callq 0x118648
leaq 0x10(%rsp), %rdi
callq 0x194918
leaq 0x10(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x194978
leaq 0x210(%rsp), %rdi
pushq $0x7f
popq %rsi
callq 0x1949d4
leaq 0x360(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x194ae4
leaq 0x210(%rsp), %rdi
callq 0x1950fc
leaq 0x360(%rsp), %rdi
leaq 0x10(%rsp), %rdx
movq %rbx, %rsi
callq 0x195144
testb %al, %al
je 0x1945a4
leaq 0x360(%rsp), %rdi
callq 0x19561a
leaq 0x10(%rsp), %rdi
callq 0x195754
testb %al, %al
je 0x1945ee
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
leaq 0x360(%rsp), %rdi
movsd %xmm0, (%rdi)
movabsq $0x3ddb7cdfd9d7bdbb, %rax # imm = 0x3DDB7CDFD9D7BDBB
leaq 0x210(%rsp), %rdx
movq %rax, (%rdx)
movq %r14, %rsi
callq 0x2ba163
movl %eax, %ebp
testb %al, %al
je 0x19459e
movq (%rbx), %rsi
movsd (%r14), %xmm0
movsd 0x360(%rsp), %xmm1
leaq 0x144f46(%rip), %rdi    # 0x2d94dd
movb $0x2, %al
callq 0x118080
xorb $0x1, %bpl
jmp 0x194601
leaq 0x210(%rsp), %rdi
leaq 0x360(%rsp), %rsi
callq 0x1955c6
leaq 0x210(%rsp), %r14
movq (%r14), %rsi
movq (%rbx), %rdx
leaq 0x144e88(%rip), %rdi    # 0x2d9456
xorl %ebp, %ebp
xorl %eax, %eax
callq 0x118080
movq %r14, %rdi
callq 0x118648
leaq 0x360(%rsp), %rdi
callq 0x19561a
jmp 0x194601
movq (%rbx), %rsi
leaq 0x144e8e(%rip), %rdi    # 0x2d9486
xorl %ebp, %ebp
xorl %eax, %eax
callq 0x118080
leaq 0x10(%rsp), %rdi
callq 0x19577a
leaq 0x8(%rsp), %rdi
callq 0x195790
movl %ebp, %eax
addq $0xc88, %rsp            # imm = 0xC88
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
jmp 0x194696
jmp 0x194629
movq %rax, %rbx
leaq 0x360(%rsp), %rdi
callq 0x19561a
jmp 0x194699
movq %rax, %rbx
leaq 0x210(%rsp), %rdi
callq 0x1950fc
jmp 0x194699
jmp 0x194696
jmp 0x194691
jmp 0x19467d
jmp 0x194691
jmp 0x19467d
jmp 0x194691
jmp 0x19467d
jmp 0x194691
jmp 0x19467d
jmp 0x194691
jmp 0x19467d
jmp 0x194691
jmp 0x19467d
jmp 0x194691
jmp 0x19467d
jmp 0x194691
jmp 0x19467d
jmp 0x194691
jmp 0x19467d
jmp 0x194691
jmp 0x19467d
jmp 0x194691
jmp 0x19467d
jmp 0x194691
movq %rax, %rbx
leaq 0x360(%rsp), %rdi
callq 0x118648
jmp 0x1946a3
jmp 0x194691
movq %rax, %rbx
jmp 0x1946a3
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x19577a
leaq 0x8(%rsp), %rdi
callq 0x195790
movq %rbx, %rdi
callq 0x118360
nop