// File: ArashPartow[P]exprtk/exprtk_test.cpp
// Function: bool run_test11<double>()
bool run_test11()
{
   typedef exprtk::expression<T> expression_t;

   std::string expression_string = "(x + y) / 3";

   T x = T(1.0);
   T y = T(2.0);

   exprtk::symbol_table<T> symbol_table;
   symbol_table.add_variable("x",x);
   symbol_table.add_variable("y",y);

   expression_t expression;
   expression.register_symbol_table(symbol_table);

   static const std::size_t rounds = 500;

   for (std::size_t i = 0; i < rounds; ++i)
   {
      {
         exprtk::parser<T> parser;

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

            return false;
         }
      }

      if (not_equal(expression.value(),(x + y) / T(3),T(0.000001)))
      {
         printf("run_test11() - Error in evaluation!(1)\n");
         return false;
      }

      expression.release();

      if (false == (!expression))
      {
         printf("run_test11() - Error in evaluation!(2)\n");
         return false;
      }

      {
         exprtk::parser<T> parser;

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

            return false;
         }
      }

      expression.value();

      if (not_equal(expression.value(),(x + y) / T(3),T(0.000001)))
      {
         printf("run_test11() - Error in evaluation!(3)\n");
         return false;
      }
   }

   return true;
}

// Assembly:
subq $0x1688, %rsp           # imm = 0x1688
leaq 0x165f(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x11b6f0
movq 0x48(%rsp), %rdx
leaq 0x3eb711(%rip), %rsi    # 0x5c0796
leaq 0x1660(%rsp), %rdi
callq 0x134520
jmp 0x1d5094
leaq 0x165f(%rsp), %rdi
callq 0x11b820
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x1640(%rsp)
movabsq $0x4000000000000000, %rax # imm = 0x4000000000000000
movq %rax, 0x1638(%rsp)
leaq 0x1630(%rsp), %rdi
movl $0x1, %esi
callq 0x22de90
jmp 0x1d50d9
leaq 0x160f(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x11b6f0
movq 0x40(%rsp), %rdx
leaq 0x3fb7c0(%rip), %rsi    # 0x5d08b7
leaq 0x1610(%rsp), %rdi
callq 0x134520
jmp 0x1d5106
leaq 0x1630(%rsp), %rdi
leaq 0x1610(%rsp), %rsi
leaq 0x1640(%rsp), %rdx
xorl %ecx, %ecx
callq 0x2341e0
jmp 0x1d5127
leaq 0x1610(%rsp), %rdi
callq 0x11b838
leaq 0x160f(%rsp), %rdi
callq 0x11b820
leaq 0x15e7(%rsp), %rdi
movq %rdi, 0x38(%rsp)
callq 0x11b6f0
movq 0x38(%rsp), %rdx
leaq 0x3e6a96(%rip), %rsi    # 0x5bbbf5
leaq 0x15e8(%rsp), %rdi
callq 0x134520
jmp 0x1d516e
leaq 0x1630(%rsp), %rdi
leaq 0x15e8(%rsp), %rsi
leaq 0x1638(%rsp), %rdx
xorl %ecx, %ecx
callq 0x2341e0
jmp 0x1d518f
leaq 0x15e8(%rsp), %rdi
callq 0x11b838
leaq 0x15e7(%rsp), %rdi
callq 0x11b820
leaq 0x15c0(%rsp), %rdi
callq 0x22e450
jmp 0x1d51b8
leaq 0x15c0(%rsp), %rdi
leaq 0x1630(%rsp), %rsi
callq 0x22e500
jmp 0x1d51cf
movq $0x0, 0x15b8(%rsp)
cmpq $0x1f4, 0x15b8(%rsp) # imm = 0x1F4
jae 0x1d57a6
leaq 0xb40(%rsp), %rdi
movl $0x7f, %esi
callq 0x22e5b0
jmp 0x1d5201
leaq 0xc90(%rsp), %rdi
leaq 0xb40(%rsp), %rsi
callq 0x22e6e0
jmp 0x1d5218
leaq 0xb40(%rsp), %rdi
callq 0x22ef10
leaq 0xc90(%rsp), %rdi
leaq 0x1660(%rsp), %rsi
leaq 0x15c0(%rsp), %rdx
callq 0x22ef80
movb %al, 0x37(%rsp)
jmp 0x1d5248
movb 0x37(%rsp), %al
testb $0x1, %al
jne 0x1d5431
jmp 0x1d5256
leaq 0xb20(%rsp), %rdi
leaq 0xc90(%rsp), %rsi
callq 0x22f810
jmp 0x1d526d
leaq 0xb20(%rsp), %rdi
callq 0x11b120
movq %rax, 0x28(%rsp)
leaq 0x1660(%rsp), %rdi
callq 0x11b120
movq 0x28(%rsp), %rsi
movq %rax, %rdx
leaq 0x3eb507(%rip), %rdi    # 0x5c07a2
xorl %eax, %eax
callq 0x11b0b0
jmp 0x1d52a4
leaq 0xb20(%rsp), %rdi
callq 0x11b838
movb $0x0, 0x1687(%rsp)
movl $0x1, 0xb1c(%rsp)
jmp 0x1d543c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
leaq 0x165f(%rsp), %rdi
callq 0x11b820
jmp 0x1d5818
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
jmp 0x1d580b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
jmp 0x1d533f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
leaq 0x1610(%rsp), %rdi
callq 0x11b838
leaq 0x160f(%rsp), %rdi
callq 0x11b820
jmp 0x1d57fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
jmp 0x1d5388
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
leaq 0x15e8(%rsp), %rdi
callq 0x11b838
leaq 0x15e7(%rsp), %rdi
callq 0x11b820
jmp 0x1d57fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
jmp 0x1d57fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
jmp 0x1d57f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
leaq 0xb40(%rsp), %rdi
callq 0x22ef10
jmp 0x1d57f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
jmp 0x1d5510
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
leaq 0xb20(%rsp), %rdi
callq 0x11b838
jmp 0x1d5510
movl $0x0, 0xb1c(%rsp)
leaq 0xc90(%rsp), %rdi
callq 0x22f8d0
movl 0xb1c(%rsp), %eax
testl %eax, %eax
jne 0x1d57b9
jmp 0x1d545a
leaq 0x15c0(%rsp), %rdi
callq 0x22fb10
movsd %xmm0, 0x20(%rsp)
jmp 0x1d546f
movsd 0x20(%rsp), %xmm0
movsd %xmm0, 0xb10(%rsp)
movsd 0x1640(%rsp), %xmm0
movsd 0x1638(%rsp), %xmm1
addsd %xmm1, %xmm0
movsd 0x3c5b7c(%rip), %xmm1   # 0x59b018
divsd %xmm1, %xmm0
movsd %xmm0, 0xb08(%rsp)
movabsq $0x3eb0c6f7a0b5ed8d, %rax # imm = 0x3EB0C6F7A0B5ED8D
movq %rax, 0xb00(%rsp)
leaq 0xb10(%rsp), %rdi
leaq 0xb08(%rsp), %rsi
leaq 0xb00(%rsp), %rdx
callq 0x22fb30
movb %al, 0x1f(%rsp)
jmp 0x1d54de
movb 0x1f(%rsp), %al
testb $0x1, %al
jne 0x1d54e8
jmp 0x1d5522
leaq 0x3eb2de(%rip), %rdi    # 0x5c07cd
xorl %eax, %eax
callq 0x11b0b0
jmp 0x1d54f8
movb $0x0, 0x1687(%rsp)
movl $0x1, 0xb1c(%rsp)
jmp 0x1d57b9
leaq 0xc90(%rsp), %rdi
callq 0x22f8d0
jmp 0x1d57f1
leaq 0x15c0(%rsp), %rdi
callq 0x566140
jmp 0x1d5531
leaq 0x15c0(%rsp), %rdi
callq 0x374180
andb $0x1, %al
movzbl %al, %ecx
xorl %eax, %eax
cmpl %ecx, %eax
jne 0x1d5571
leaq 0x3eb2a5(%rip), %rdi    # 0x5c07f5
xorl %eax, %eax
callq 0x11b0b0
jmp 0x1d5559
movb $0x0, 0x1687(%rsp)
movl $0x1, 0xb1c(%rsp)
jmp 0x1d57b9
leaq 0x88(%rsp), %rdi
movl $0x7f, %esi
callq 0x22e5b0
jmp 0x1d5585
leaq 0x1d8(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x22e6e0
jmp 0x1d559c
leaq 0x88(%rsp), %rdi
callq 0x22ef10
leaq 0x1d8(%rsp), %rdi
leaq 0x1660(%rsp), %rsi
leaq 0x15c0(%rsp), %rdx
callq 0x22ef80
movb %al, 0x1e(%rsp)
jmp 0x1d55cc
movb 0x1e(%rsp), %al
testb $0x1, %al
jne 0x1d56a3
jmp 0x1d55da
leaq 0x68(%rsp), %rdi
leaq 0x1d8(%rsp), %rsi
callq 0x22f810
jmp 0x1d55ee
leaq 0x68(%rsp), %rdi
callq 0x11b120
movq %rax, 0x10(%rsp)
leaq 0x1660(%rsp), %rdi
callq 0x11b120
movq 0x10(%rsp), %rsi
movq %rax, %rdx
leaq 0x3eb189(%rip), %rdi    # 0x5c07a2
xorl %eax, %eax
callq 0x11b0b0
jmp 0x1d5622
leaq 0x68(%rsp), %rdi
callq 0x11b838
movb $0x0, 0x1687(%rsp)
movl $0x1, 0xb1c(%rsp)
jmp 0x1d56ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
leaq 0x88(%rsp), %rdi
callq 0x22ef10
jmp 0x1d57f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
jmp 0x1d577c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1650(%rsp)
movl %eax, 0x164c(%rsp)
leaq 0x68(%rsp), %rdi
callq 0x11b838
jmp 0x1d577c
movl $0x0, 0xb1c(%rsp)
leaq 0x1d8(%rsp), %rdi
callq 0x22f8d0
movl 0xb1c(%rsp), %eax
testl %eax, %eax
jne 0x1d57b9
jmp 0x1d56cc
leaq 0x15c0(%rsp), %rdi
callq 0x22fb10
jmp 0x1d56db
leaq 0x15c0(%rsp), %rdi
callq 0x22fb10
movsd %xmm0, 0x8(%rsp)
jmp 0x1d56f0
movsd 0x8(%rsp), %xmm0
movsd %xmm0, 0x60(%rsp)
movsd 0x1640(%rsp), %xmm0
movsd 0x1638(%rsp), %xmm1
addsd %xmm1, %xmm0
movsd 0x3c58fe(%rip), %xmm1   # 0x59b018
divsd %xmm1, %xmm0
movsd %xmm0, 0x58(%rsp)
movabsq $0x3eb0c6f7a0b5ed8d, %rax # imm = 0x3EB0C6F7A0B5ED8D
movq %rax, 0x50(%rsp)
leaq 0x60(%rsp), %rdi
leaq 0x58(%rsp), %rsi
leaq 0x50(%rsp), %rdx
callq 0x22fb30
movb %al, 0x7(%rsp)
jmp 0x1d574d
movb 0x7(%rsp), %al
testb $0x1, %al
jne 0x1d5757
jmp 0x1d578b
leaq 0x3eb0bf(%rip), %rdi    # 0x5c081d
xorl %eax, %eax
callq 0x11b0b0
jmp 0x1d5767
movb $0x0, 0x1687(%rsp)
movl $0x1, 0xb1c(%rsp)
jmp 0x1d57b9
leaq 0x1d8(%rsp), %rdi
callq 0x22f8d0
jmp 0x1d57f1
jmp 0x1d578d
movq 0x15b8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x15b8(%rsp)
jmp 0x1d51db
movb $0x1, 0x1687(%rsp)
movl $0x1, 0xb1c(%rsp)
leaq 0x15c0(%rsp), %rdi
callq 0x22fb60
leaq 0x1630(%rsp), %rdi
callq 0x22fc60
leaq 0x1660(%rsp), %rdi
callq 0x11b838
movb 0x1687(%rsp), %al
andb $0x1, %al
addq $0x1688, %rsp           # imm = 0x1688
retq
leaq 0x15c0(%rsp), %rdi
callq 0x22fb60
leaq 0x1630(%rsp), %rdi
callq 0x22fc60
leaq 0x1660(%rsp), %rdi
callq 0x11b838
movq 0x1650(%rsp), %rdi
callq 0x11b4e0
nopw %cs:(%rax,%rax)
nop