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

   T x = T(1.1);
   T y = T(2.2);
   T z = T(3.3);

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

   static const std::string expr_str_list[] =
   {
      "2 - (x + y) / z//Comment 01   ",
      "2 - (x + y) / z#Comment 02    ",
      "2 - (x + y) / z //Comment 03  ",
      "2 - (x + y) / z #Comment 04   ",
      "2 - (x + y) / z//Comment 05 \n",
      "2 - (x + y) / z#Comment 06  \n",
      "2 - (x + y) / z //Comment 07\n",
      "2 - (x + y) / z #Comment 08 \n",
      "/* Comment 09*/2 - (x + y) / z",
      "/* Comment 10*/2 - (x + y) / z\n",
      "/* Comment 11*/2 - (x + y) / z/* Comment 12*/",
      "/* Comment 13*/2 - (x + y) / z/* Comment 14*/\n",
      "2 - /* Comment 15 */(x + y) / z",
      "2 - /* Comment 16 */(x + y) /* Comment 17 *// z \n",
      "2 - /* Comment 18 */(x + y) /* Comment 19 */ / z //Comment 20\n",
      "2 - /* Comment 21 */(x + y) /* Comment 22 */ / z #Comment 23\n",
      "2 - /* Comment 24 */(x + y) /* Comment 25 */ / z //Comment 26",
      "2 - /* Comment 27 */(x + y) /* Comment 28 */ / z #Comment 29"
   };
   static const std::size_t expr_str_list_size = sizeof(expr_str_list) / sizeof(std::string);

   std::deque<expression_t> expression_list;

   for (std::size_t i = 0; i < expr_str_list_size; ++i)
   {
      expression_t expression;
      expression.register_symbol_table(symbol_table);

      exprtk::parser<T> parser;

      if (!parser.compile(expr_str_list[i],expression))
      {
         printf("run_test15() - Error: %s   Expression: %s\n",
                parser.error().c_str(),
                expr_str_list[i].c_str());

         return false;
      }
      else
         expression_list.push_back(expression);
   }

   expression_t base_expression;
   const std::string base_expr_str = "2 - (x + y) / z";

   {
      base_expression.register_symbol_table(symbol_table);

      exprtk::parser<T> parser;

      if (!parser.compile(base_expr_str,base_expression))
      {
         printf("run_test15() - Error: %s   Expression: %s\n",
                parser.error().c_str(),
                base_expr_str.c_str());

         return false;
      }
   }

   bool error_found = false;

   for (std::size_t i = 0; i < expression_list.size(); ++i)
   {
      T base_result = base_expression.value();
      T result      = expression_list[i].value();

      if (not_equal(base_result,result))
      {
         printf("run_test15() - Error in evaluation! (1)  Base: %20.10f\tResult: %20.10f\tExpression: %s\n",
                static_cast<double>(base_result),
                static_cast<double>(result),
                expr_str_list[i].c_str());

         error_found = true;
      }
   }

   return !error_found;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb48, %rsp            # imm = 0xB48
movabsq $0x3ff199999999999a, %rax # imm = 0x3FF199999999999A
movq %rax, 0x58(%rsp)
movabsq $0x400199999999999a, %rax # imm = 0x400199999999999A
movq %rax, 0x50(%rsp)
movabsq $0x400a666666666666, %rax # imm = 0x400A666666666666
movq %rax, 0x48(%rsp)
movq %rsp, %rbx
pushq $0x1
popq %rsi
movq %rbx, %rdi
callq 0x19486e
movq %rbx, %rdi
callq 0x194892
leaq 0x18e0f0(%rip), %rsi    # 0x3022a5
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
movq %rsp, %rdi
leaq 0x220(%rsp), %rsi
leaq 0x58(%rsp), %rdx
xorl %ecx, %ecx
callq 0x19666e
leaq 0x220(%rsp), %rdi
callq 0x118648
leaq 0x179d50(%rip), %rsi    # 0x2edf45
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
movq %rsp, %rdi
leaq 0x220(%rsp), %rsi
leaq 0x50(%rsp), %rdx
xorl %ecx, %ecx
callq 0x19666e
leaq 0x220(%rsp), %rdi
callq 0x118648
leaq 0x17f9bf(%rip), %rsi    # 0x2f3bf4
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
movq %rsp, %rdi
leaq 0x220(%rsp), %rsi
leaq 0x48(%rsp), %rdx
xorl %ecx, %ecx
callq 0x19666e
leaq 0x220(%rsp), %rdi
callq 0x118648
movb 0x370cac(%rip), %al     # 0x4e4f20
testb %al, %al
je 0x174553
leaq 0x80(%rsp), %rdi
callq 0x2bb8b6
leaq 0x28(%rsp), %rbx
leaq 0xd0(%rsp), %r15
leaq 0x220(%rsp), %r13
leaq 0x370a3b(%rip), %rax    # 0x4e4ce0
movq %rax, 0x18(%rsp)
xorl %ebp, %ebp
leaq 0x20(%rbp), %r12
cmpq $0x260, %r12            # imm = 0x260
je 0x17436f
movq %rbx, %rdi
callq 0x194918
movq %rbx, %rdi
movq %rsp, %rsi
callq 0x194978
movq %r15, %rdi
pushq $0x7f
popq %rsi
callq 0x1949d4
movq %r13, %rdi
movq %r15, %rsi
callq 0x194ae4
movq %r15, %rdi
callq 0x1950fc
leaq 0x3709eb(%rip), %rax    # 0x4e4ce0
addq %rax, %rbp
movq %r13, %rdi
movq %rbp, %rsi
movq %rbx, %rdx
callq 0x195144
movl %eax, %r14d
testb %al, %al
je 0x17431f
leaq 0x80(%rsp), %rdi
movq %rbx, %rsi
callq 0x2bb830
jmp 0x17434c
movq %r15, %rdi
movq %r13, %rsi
callq 0x1955c6
movq 0xd0(%rsp), %rsi
movq (%rbp), %rdx
leaq 0x17fa80(%rip), %rdi    # 0x2f3dbd
xorl %eax, %eax
callq 0x118080
movq %r15, %rdi
callq 0x118648
movq %r13, %rdi
callq 0x19561a
movq %rbx, %rdi
callq 0x19577a
movq %r12, %rbp
testb %r14b, %r14b
jne 0x1742ac
xorl %ebx, %ebx
jmp 0x174527
leaq 0x28(%rsp), %rdi
callq 0x194918
leaq 0x17f866(%rip), %rsi    # 0x2f3be6
leaq 0x60(%rsp), %rdi
leaq 0x220(%rsp), %rdx
callq 0x127016
leaq 0x28(%rsp), %rdi
movq %rsp, %rsi
callq 0x194978
leaq 0xd0(%rsp), %rdi
pushq $0x7f
popq %rsi
callq 0x1949d4
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
callq 0x194ae4
leaq 0xd0(%rsp), %rdi
callq 0x1950fc
leaq 0x220(%rsp), %rdi
leaq 0x60(%rsp), %rsi
leaq 0x28(%rsp), %rdx
callq 0x195144
testb %al, %al
je 0x1744c4
leaq 0x220(%rsp), %rdi
callq 0x19561a
xorl %ebx, %ebx
leaq 0x80(%rsp), %r15
movabsq $0x3ddb7cdfd9d7bdbb, %r12 # imm = 0x3DDB7CDFD9D7BDBB
leaq 0xd0(%rsp), %r13
leaq 0x20(%rsp), %rbp
xorl %r14d, %r14d
movq %r15, %rdi
callq 0x2bb85a
cmpq %rax, %r14
jae 0x174510
movq 0x28(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd %xmm0, 0x220(%rsp)
leaq 0x90(%rsp), %rdi
movq %r14, %rsi
callq 0x2bbd1e
movq (%rax), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
movsd %xmm0, 0xd0(%rsp)
movq %r12, 0x20(%rsp)
leaq 0x220(%rsp), %rdi
movq %r13, %rsi
movq %rbp, %rdx
callq 0x2ba163
testb %al, %al
je 0x1744b6
movsd 0x220(%rsp), %xmm0
movsd 0xd0(%rsp), %xmm1
movq 0x18(%rsp), %rax
movq (%rax), %rsi
leaq 0x17f93b(%rip), %rdi    # 0x2f3de8
movb $0x2, %al
callq 0x118080
movb $0x1, %bl
incq %r14
addq $0x20, 0x18(%rsp)
jmp 0x174421
leaq 0xd0(%rsp), %rdi
leaq 0x220(%rsp), %rsi
callq 0x1955c6
leaq 0xd0(%rsp), %r14
movq (%r14), %rsi
movq 0x60(%rsp), %rdx
leaq 0x17f8cd(%rip), %rdi    # 0x2f3dbd
xorl %ebx, %ebx
xorl %eax, %eax
callq 0x118080
movq %r14, %rdi
callq 0x118648
leaq 0x220(%rsp), %rdi
callq 0x19561a
jmp 0x174513
xorb $0x1, %bl
leaq 0x60(%rsp), %rdi
callq 0x118648
leaq 0x28(%rsp), %rdi
callq 0x19577a
leaq 0x80(%rsp), %rdi
callq 0x2bb86a
movq %rsp, %rdi
callq 0x195790
andb $0x1, %bl
movl %ebx, %eax
addq $0xb48, %rsp            # imm = 0xB48
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x3709c6(%rip), %rdi    # 0x4e4f20
callq 0x1181a0
testl %eax, %eax
je 0x17427c
leaq 0x370772(%rip), %rbx    # 0x4e4ce0
leaq 0x17f56e(%rip), %rsi    # 0x2f3ae3
leaq 0x220(%rsp), %rdx
movq %rbx, %rdi
callq 0x127016
leaq 0x370774(%rip), %r14    # 0x4e4d00
leaq 0x17f56f(%rip), %rsi    # 0x2f3b02
leaq 0xd0(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x370776(%rip), %r14    # 0x4e4d20
leaq 0x17f570(%rip), %rsi    # 0x2f3b21
leaq 0x80(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x370778(%rip), %r14    # 0x4e4d40
leaq 0x17f571(%rip), %rsi    # 0x2f3b40
leaq 0x28(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x37077d(%rip), %r14    # 0x4e4d60
leaq 0x17f575(%rip), %rsi    # 0x2f3b5f
leaq 0x60(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x370782(%rip), %r14    # 0x4e4d80
leaq 0x17f578(%rip), %rsi    # 0x2f3b7d
leaq 0x20(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x370787(%rip), %r14    # 0x4e4da0
leaq 0x17f57b(%rip), %rsi    # 0x2f3b9b
leaq 0x17(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x37078c(%rip), %r14    # 0x4e4dc0
leaq 0x17f57e(%rip), %rsi    # 0x2f3bb9
leaq 0x16(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x370791(%rip), %r14    # 0x4e4de0
leaq 0x17f581(%rip), %rsi    # 0x2f3bd7
leaq 0x15(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x370796(%rip), %r14    # 0x4e4e00
leaq 0x17f585(%rip), %rsi    # 0x2f3bf6
leaq 0x14(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x37079b(%rip), %r14    # 0x4e4e20
leaq 0x17f58a(%rip), %rsi    # 0x2f3c16
leaq 0x13(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x3707a0(%rip), %r14    # 0x4e4e40
leaq 0x17f59d(%rip), %rsi    # 0x2f3c44
leaq 0x12(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x3707a5(%rip), %r14    # 0x4e4e60
leaq 0x17f5b1(%rip), %rsi    # 0x2f3c73
leaq 0x11(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x3707aa(%rip), %r14    # 0x4e4e80
leaq 0x17f5b6(%rip), %rsi    # 0x2f3c93
leaq 0x10(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x3707af(%rip), %r14    # 0x4e4ea0
leaq 0x17f5cd(%rip), %rsi    # 0x2f3cc5
leaq 0xf(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x3707b4(%rip), %r14    # 0x4e4ec0
leaq 0x17f5f1(%rip), %rsi    # 0x2f3d04
leaq 0xe(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x3707b9(%rip), %r14    # 0x4e4ee0
leaq 0x17f614(%rip), %rsi    # 0x2f3d42
leaq 0xd(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x3707be(%rip), %r14    # 0x4e4f00
leaq 0x17f637(%rip), %rsi    # 0x2f3d80
leaq 0xc(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq -0x50853(%rip), %rdi    # 0x123f0a
leaq 0x342bc4(%rip), %rdx    # 0x4b7328
xorl %esi, %esi
callq 0x118490
leaq 0x3707ae(%rip), %rdi    # 0x4e4f20
callq 0x118300
jmp 0x17427c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
jmp 0x17479c
movq %rax, %r15
addq $-0x20, %r14
movq %r14, %rdi
callq 0x118648
cmpq %rbx, %r14
jne 0x17479f
leaq 0x370769(%rip), %rdi    # 0x4e4f20
callq 0x118220
jmp 0x17486f
movq %rax, %r15
jmp 0x1747b0
jmp 0x1747c8
movq %rax, %r15
leaq 0x220(%rsp), %rdi
callq 0x19561a
jmp 0x17481c
movq %rax, %r15
leaq 0xd0(%rsp), %rdi
callq 0x1950fc
jmp 0x17481c
jmp 0x174819
jmp 0x174819
jmp 0x174831
jmp 0x17482a
jmp 0x174812
jmp 0x1747fe
jmp 0x174812
jmp 0x1747fe
jmp 0x174812
movq %rax, %r15
leaq 0x220(%rsp), %rdi
callq 0x118648
jmp 0x17486f
jmp 0x174812
movq %rax, %r15
jmp 0x17486f
jmp 0x174819
movq %rax, %r15
leaq 0x60(%rsp), %rdi
callq 0x118648
jmp 0x174858
jmp 0x174848
movq %rax, %r15
jmp 0x174862
jmp 0x174831
movq %rax, %r15
jmp 0x174858
movq %rax, %r15
leaq 0xd0(%rsp), %rdi
callq 0x1950fc
jmp 0x174858
movq %rax, %r15
leaq 0x220(%rsp), %rdi
callq 0x19561a
leaq 0x28(%rsp), %rdi
callq 0x19577a
leaq 0x80(%rsp), %rdi
callq 0x2bb86a
movq %rsp, %rdi
callq 0x195790
movq %r15, %rdi
callq 0x118360