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

   static const std::string expression_string[] =
   {
      "equal(sin(30),0.5)                    ",
      "equal(cos(60),0.5)                    ",
      "equal(sin(60),sqrt(3)/2)              ",
      "equal(cos(30),sqrt(3)/2)              ",
      "equal(sin(x_deg),0.5)                 ",
      "equal(cos(y_deg),0.5)                 ",
      "equal(sin(y_deg),sqrt(3)/2)           ",
      "equal(cos(x_deg),sqrt(3)/2)           ",
      "equal(sin(30) + sin(30),1.0)          ",
      "equal(cos(60) + cos(60),1.0)          ",
      "equal(sin(60) + sin(60),sqrt(3))      ",
      "equal(cos(30) + cos(30),sqrt(3))      ",
      "equal(sin(x_deg) + sin(x_deg),1.0)    ",
      "equal(cos(y_deg) + cos(y_deg),1.0)    ",
      "equal(sin(y_deg) + sin(y_deg),sqrt(3))",
      "equal(cos(x_deg) + cos(x_deg),sqrt(3))"
   };

   static const std::size_t expression_string_size = sizeof(expression_string) / sizeof(std::string);

   {
      T x_deg = T(30);
      T y_deg = T(60);

      sine_deg  <T>   sine;
      cosine_deg<T> cosine;

      symbol_table_t symbol_table_0;
      symbol_table_t symbol_table_1;

      symbol_table_0.add_variable("x_deg",x_deg);
      symbol_table_1.add_variable("y_deg",y_deg);

      symbol_table_0.add_function(  "sine_deg",   sine);
      symbol_table_1.add_function("cosine_deg", cosine);

      expression_t expression;

      expression.register_symbol_table(symbol_table_0);
      expression.register_symbol_table(symbol_table_1);

      static const std::size_t rounds = 100;

      for (std::size_t i = 0; i < rounds; ++i)
      {
         for (std::size_t j = 0; j < expression_string_size; ++j)
         {
            const std::string& expr_str = expression_string[j];

            {
               parser_t parser;

               parser.replace_symbol("sin",   "sine_deg");
               parser.replace_symbol("cos", "cosine_deg");

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

                  return false;
               }
            }

            if (T(1) != expression.value())
            {
               printf("run_test13() - Error in evaluation! Expression: %s  [1]\n",expr_str.c_str());
               return false;
            }
         }
      }
   }

   {
      T x_deg = T(30);
      T y_deg = T(60);

      sine_deg  <T>   sine;
      cosine_deg<T> cosine;

      symbol_table_t symbol_table_0;
      symbol_table_t symbol_table_1;

      symbol_table_0.add_variable("x_deg",x_deg);
      symbol_table_1.add_variable("y_deg",y_deg);

      symbol_table_0.add_reserved_function("sin",  sine);
      symbol_table_1.add_reserved_function("cos",cosine);

      expression_t expression;

      expression.register_symbol_table(symbol_table_0);
      expression.register_symbol_table(symbol_table_1);

      static const std::size_t rounds = 100;

      for (std::size_t i = 0; i < rounds; ++i)
      {
         for (std::size_t j = 0; j < expression_string_size; ++j)
         {
            const std::string& expr_str = expression_string[j];

            {
               typedef typename parser_t::settings_store settings_t;

               parser_t parser;

               parser.settings()
                  .disable_base_function(settings_t::e_bf_sin)
                  .disable_base_function(settings_t::e_bf_cos);

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

                  return false;
               }
            }

            if (T(1) != expression.value())
            {
               printf("run_test13() - Error in evaluation! Expression: %s  [2]\n",expr_str.c_str());
               return false;
            }
         }
      }
   }

   return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb48, %rsp            # imm = 0xB48
movb 0x3722bf(%rip), %al     # 0x4e4cd0
testb %al, %al
je 0x173145
movabsq $0x403e000000000000, %rcx # imm = 0x403E000000000000
movw $0x100, %ax             # imm = 0x100
movw %ax, 0x88(%rsp)
andq $0x0, 0x90(%rsp)
movq %rcx, 0x30(%rsp)
orq $-0x1, 0x98(%rsp)
movabsq $0x404e000000000000, %rcx # imm = 0x404E000000000000
movq %rcx, 0x10(%rsp)
pushq $0x1
popq %rcx
movq %rcx, 0xa0(%rsp)
movw %ax, 0x60(%rsp)
andq $0x0, 0x68(%rsp)
leaq 0x341f2e(%rip), %rax    # 0x4b49a0
orq $-0x1, 0x70(%rsp)
movq %rax, 0x80(%rsp)
movq %rcx, 0x78(%rsp)
leaq 0x341ff4(%rip), %rax    # 0x4b4a80
movq %rax, 0x58(%rsp)
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x19486e
leaq 0x18(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x19486e
leaq 0x180c82(%rip), %rsi    # 0x2f3734
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x30(%rsp), %rdx
xorl %ecx, %ecx
callq 0x19666e
leaq 0x220(%rsp), %rdi
callq 0x118648
leaq 0x180c46(%rip), %rsi    # 0x2f373a
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
leaq 0x18(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x10(%rsp), %rdx
xorl %ecx, %ecx
callq 0x19666e
leaq 0x220(%rsp), %rdi
callq 0x118648
leaq 0x180c0c(%rip), %rsi    # 0x2f3742
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x1948b8
leaq 0x220(%rsp), %rdi
callq 0x118648
leaq 0x180bc7(%rip), %rsi    # 0x2f3740
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
leaq 0x18(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0x1948b8
leaq 0x220(%rsp), %rdi
callq 0x118648
leaq 0x38(%rsp), %rdi
callq 0x194918
leaq 0x38(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x194978
leaq 0x38(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x194978
xorl %ebp, %ebp
leaq 0xd0(%rsp), %rbx
leaq 0x220(%rsp), %r15
leaq 0x7(%rsp), %r14
leaq 0xb0(%rsp), %r12
leaq 0x6(%rsp), %r13
cmpq $0x64, %rbp
je 0x172deb
xorl %eax, %eax
movq %rax, 0x28(%rsp)
addq $0x20, %rax
movq %rax, 0xa8(%rsp)
cmpq $0x220, %rax            # imm = 0x220
je 0x172d40
movq %rbx, %rdi
pushq $0x7f
popq %rsi
callq 0x1949d4
movq %r15, %rdi
movq %rbx, %rsi
callq 0x194ae4
movq %rbx, %rdi
callq 0x1950fc
movq %rbx, %rdi
leaq 0x160630(%rip), %rsi    # 0x2d327f
movq %r14, %rdx
callq 0x127016
movq %r12, %rdi
leaq 0x180ae1(%rip), %rsi    # 0x2f3742
movq %r13, %rdx
callq 0x127016
movq %r15, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x2c0296
movq %r12, %rdi
callq 0x118648
movq %rbx, %rdi
callq 0x118648
movq %rbx, %rdi
leaq 0x1605e3(%rip), %rsi    # 0x2d3274
movq %r14, %rdx
callq 0x127016
movq %r12, %rdi
leaq 0x180a9d(%rip), %rsi    # 0x2f3740
movq %r13, %rdx
callq 0x127016
movq %r15, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x2c0296
leaq 0x371e10(%rip), %rax    # 0x4e4ad0
movq 0x28(%rsp), %rcx
leaq (%rax,%rcx), %r14
movq %r12, %r13
movq %r12, %rdi
callq 0x118648
movq %rbx, %r12
movq %rbx, %rdi
callq 0x118648
movq %r15, %rbx
movq %r15, %rdi
movq %r14, %rsi
leaq 0x38(%rsp), %rdx
callq 0x195144
testb %al, %al
movq 0xa8(%rsp), %r14
je 0x172d48
movq %rbx, %r15
movq %rbx, %rdi
callq 0x19561a
movq 0x38(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
ucomisd 0x15b4a0(%rip), %xmm0   # 0x2ce1c0
movq %r14, %rax
movq %r12, %rbx
movq %r14, %rcx
leaq 0x7(%rsp), %r14
movq %r13, %r12
leaq 0x6(%rsp), %r13
jne 0x172d9d
jnp 0x172c0a
jmp 0x172d9d
incq %rbp
jmp 0x172bfe
leaq 0xd0(%rsp), %rdi
leaq 0x220(%rsp), %rsi
callq 0x1955c6
leaq 0xd0(%rsp), %rbx
movq (%rbx), %rsi
leaq 0x371d61(%rip), %rax    # 0x4e4ad0
movq 0x28(%rsp), %rcx
movq (%rcx,%rax), %rdx
leaq 0x1809cc(%rip), %rdi    # 0x2f374b
xorl %eax, %eax
callq 0x118080
movq %rbx, %rdi
callq 0x118648
leaq 0x220(%rsp), %rdi
callq 0x19561a
jmp 0x172db7
leaq 0x371d2c(%rip), %rax    # 0x4e4ad0
movq -0x20(%rcx,%rax), %rsi
leaq 0x1809cb(%rip), %rdi    # 0x2f377b
xorl %eax, %eax
callq 0x118080
leaq 0x38(%rsp), %rdi
callq 0x19577a
leaq 0x18(%rsp), %rdi
callq 0x195790
leaq 0x8(%rsp), %rdi
callq 0x195790
xorl %ebx, %ebx
movl %ebx, %eax
addq $0xb48, %rsp            # imm = 0xB48
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x38(%rsp), %rdi
callq 0x19577a
leaq 0x18(%rsp), %rdi
callq 0x195790
leaq 0x8(%rsp), %rdi
callq 0x195790
movw $0x100, %ax             # imm = 0x100
movw %ax, 0x88(%rsp)
andq $0x0, 0x90(%rsp)
movabsq $0x403e000000000000, %rcx # imm = 0x403E000000000000
movq %rcx, 0xb0(%rsp)
orq $-0x1, 0x98(%rsp)
movw %ax, 0x60(%rsp)
andq $0x0, 0x68(%rsp)
movabsq $0x404e000000000000, %rax # imm = 0x404E000000000000
movq %rax, 0x30(%rsp)
orq $-0x1, 0x70(%rsp)
pushq $0x1
popq %rax
movq %rax, 0xa0(%rsp)
leaq 0x341b35(%rip), %rcx    # 0x4b49a0
movq %rcx, 0x80(%rsp)
movq %rax, 0x78(%rsp)
leaq 0x341c01(%rip), %rax    # 0x4b4a80
movq %rax, 0x58(%rsp)
leaq 0x10(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x19486e
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x19486e
leaq 0x18088f(%rip), %rsi    # 0x2f3734
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
leaq 0x10(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
xorl %ecx, %ecx
callq 0x19666e
leaq 0x220(%rsp), %rdi
callq 0x118648
leaq 0x180850(%rip), %rsi    # 0x2f373a
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x30(%rsp), %rdx
xorl %ecx, %ecx
callq 0x19666e
leaq 0x220(%rsp), %rdi
callq 0x118648
leaq 0x160353(%rip), %rsi    # 0x2d327f
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
leaq 0x10(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x2c02de
leaq 0x220(%rsp), %rdi
callq 0x118648
leaq 0x160305(%rip), %rsi    # 0x2d3274
leaq 0x220(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x127016
leaq 0x8(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0x2c02de
leaq 0x220(%rsp), %rdi
callq 0x118648
leaq 0x38(%rsp), %rdi
callq 0x194918
leaq 0x38(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x194978
leaq 0x38(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x194978
leaq 0x300(%rsp), %rbx
xorl %eax, %eax
leaq 0xd0(%rsp), %r14
leaq 0x220(%rsp), %r12
leaq 0x38(%rsp), %r15
movq %rax, 0x28(%rsp)
cmpq $0x64, %rax
je 0x173141
xorl %r13d, %r13d
leaq 0x20(%r13), %rbp
cmpq $0x220, %rbp            # imm = 0x220
je 0x173094
movq %r14, %rdi
pushq $0x7f
popq %rsi
callq 0x1949d4
movq %r12, %rdi
movq %r14, %rsi
callq 0x194ae4
movq %r14, %rdi
callq 0x1950fc
movq %rbx, %rdi
leaq 0x3457e6(%rip), %rsi    # 0x4b8820
callq 0x1a2490
movq %rbx, %rdi
leaq 0x3453d7(%rip), %rsi    # 0x4b8420
callq 0x1a2490
leaq 0x371a7b(%rip), %rax    # 0x4e4ad0
leaq (%rax,%r13), %rsi
movq %r12, %rdi
movq %r15, %rdx
callq 0x195144
testb %al, %al
je 0x1730a1
movq %r12, %rdi
callq 0x19561a
movq 0x38(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
ucomisd 0x15b139(%rip), %xmm0   # 0x2ce1c0
movq %rbp, %r13
jne 0x1730fb
jnp 0x173001
jmp 0x1730fb
movq 0x28(%rsp), %rax
incq %rax
jmp 0x172fef
leaq 0xd0(%rsp), %rdi
leaq 0x220(%rsp), %rsi
callq 0x1955c6
cmpq $0x64, 0x28(%rsp)
setae %bl
leaq 0xd0(%rsp), %r14
movq (%r14), %rsi
leaq 0x3719ff(%rip), %rax    # 0x4e4ad0
movq (%r13,%rax), %rdx
leaq 0x1806d7(%rip), %rdi    # 0x2f37b4
xorl %eax, %eax
callq 0x118080
movq %r14, %rdi
callq 0x118648
leaq 0x220(%rsp), %rdi
callq 0x19561a
jmp 0x17311e
cmpq $0x64, 0x28(%rsp)
setae %bl
leaq 0x3719c5(%rip), %rax    # 0x4e4ad0
movq -0x20(%rbp,%rax), %rsi
leaq 0x1806cd(%rip), %rdi    # 0x2f37e4
xorl %eax, %eax
callq 0x118080
leaq 0x38(%rsp), %rdi
callq 0x19577a
leaq 0x8(%rsp), %rdi
callq 0x195790
leaq 0x10(%rsp), %rdi
callq 0x195790
jmp 0x172dd7
movb $0x1, %bl
jmp 0x17311e
leaq 0x371b84(%rip), %rdi    # 0x4e4cd0
callq 0x1181a0
testl %eax, %eax
je 0x172a19
leaq 0x371970(%rip), %r14    # 0x4e4ad0
leaq 0x18035d(%rip), %rsi    # 0x2f34c4
leaq 0x220(%rsp), %rdx
movq %r14, %rdi
callq 0x127016
leaq 0x371972(%rip), %r15    # 0x4e4af0
leaq 0x180366(%rip), %rsi    # 0x2f34eb
leaq 0xd0(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x371974(%rip), %r15    # 0x4e4b10
leaq 0x18036f(%rip), %rsi    # 0x2f3512
leaq 0x80(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x371976(%rip), %r15    # 0x4e4b30
leaq 0x180378(%rip), %rsi    # 0x2f3539
leaq 0x58(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x37197b(%rip), %r15    # 0x4e4b50
leaq 0x180384(%rip), %rsi    # 0x2f3560
leaq 0x38(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x371980(%rip), %r15    # 0x4e4b70
leaq 0x180390(%rip), %rsi    # 0x2f3587
leaq 0xb0(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x371982(%rip), %r15    # 0x4e4b90
leaq 0x180399(%rip), %rsi    # 0x2f35ae
leaq 0x30(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x371987(%rip), %r15    # 0x4e4bb0
leaq 0x1803a5(%rip), %rsi    # 0x2f35d5
leaq 0x10(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x37198c(%rip), %r15    # 0x4e4bd0
leaq 0x1803b1(%rip), %rsi    # 0x2f35fc
leaq 0x8(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x371991(%rip), %r15    # 0x4e4bf0
leaq 0x1803bd(%rip), %rsi    # 0x2f3623
leaq 0x18(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x371996(%rip), %r15    # 0x4e4c10
leaq 0x1803c9(%rip), %rsi    # 0x2f364a
leaq 0x7(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x37199b(%rip), %r15    # 0x4e4c30
leaq 0x1803d5(%rip), %rsi    # 0x2f3671
leaq 0x6(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x3719a0(%rip), %r15    # 0x4e4c50
leaq 0x1803e1(%rip), %rsi    # 0x2f3698
leaq 0x27(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x3719a5(%rip), %r15    # 0x4e4c70
leaq 0x1803ed(%rip), %rsi    # 0x2f36bf
leaq 0x26(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x3719aa(%rip), %r15    # 0x4e4c90
leaq 0x1803f9(%rip), %rsi    # 0x2f36e6
leaq 0x25(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq 0x3719af(%rip), %r15    # 0x4e4cb0
leaq 0x180405(%rip), %rsi    # 0x2f370d
leaq 0x24(%rsp), %rdx
movq %r15, %rdi
callq 0x127016
leaq -0x4f43d(%rip), %rdi    # 0x123edf
leaq 0x344005(%rip), %rdx    # 0x4b7328
xorl %esi, %esi
callq 0x118490
leaq 0x37199f(%rip), %rdi    # 0x4e4cd0
callq 0x118300
jmp 0x172a19
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
jmp 0x173357
movq %rax, %rbx
addq $-0x20, %r15
movq %r15, %rdi
callq 0x118648
cmpq %r14, %r15
jne 0x17335a
leaq 0x37195e(%rip), %rdi    # 0x4e4cd0
callq 0x118220
jmp 0x1734b6
movq %rax, %rbx
jmp 0x17336b
jmp 0x173418
jmp 0x1733a9
jmp 0x173394
jmp 0x1733a9
jmp 0x173394
jmp 0x1733a9
jmp 0x173394
jmp 0x1733a9
movq %rax, %rbx
leaq 0x220(%rsp), %rdi
callq 0x118648
jmp 0x173432
movq %rax, %rbx
jmp 0x173432
movq %rax, %rbx
jmp 0x17343c
jmp 0x17340e
jmp 0x1733d6
jmp 0x173488
jmp 0x1733d6
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
callq 0x1950fc
jmp 0x173428
movq %rax, %rbx
jmp 0x173428
jmp 0x1733fe
jmp 0x1733e9
jmp 0x1733fe
jmp 0x1733e9
jmp 0x1733fe
jmp 0x1733e9
jmp 0x1733fe
movq %rax, %rbx
leaq 0x220(%rsp), %rdi
callq 0x118648
jmp 0x1734a2
movq %rax, %rbx
jmp 0x1734a2
movq %rax, %rbx
jmp 0x1734ac
movq %rax, %rbx
jmp 0x1734b6
jmp 0x17345d
movq %rax, %rbx
leaq 0x220(%rsp), %rdi
callq 0x19561a
leaq 0x38(%rsp), %rdi
callq 0x19577a
leaq 0x8(%rsp), %rdi
callq 0x195790
leaq 0x10(%rsp), %rdi
jmp 0x1734b1
jmp 0x17345d
jmp 0x173476
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
callq 0x1950fc
jmp 0x173498
jmp 0x173462
jmp 0x173488
movq %rax, %rbx
jmp 0x173498
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0x118648
jmp 0x173479
jmp 0x173488
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
callq 0x118648
jmp 0x17348b
movq %rax, %rbx
leaq 0x220(%rsp), %rdi
callq 0x19561a
leaq 0x38(%rsp), %rdi
callq 0x19577a
leaq 0x18(%rsp), %rdi
callq 0x195790
leaq 0x8(%rsp), %rdi
callq 0x195790
movq %rbx, %rdi
callq 0x118360