// File: ef-gy[P]libefgy/src/test-case/exponential.cpp
// Function: testFunctionalIntegralExponents(std::ostream&)
bool testFunctionalIntegralExponents(std::ostream &log) {
  if (exponentiate::integral<fraction>::raise(fraction(21, 5), 0) !=
      fraction(1, 1)) {
    log << "(21/5)^0 should be (1/1) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), 0) << "\n";
    return false;
  }

  if (exponentiate::integral<fraction>::raise(fraction(21, 5), 1) !=
      fraction(21, 5)) {
    log << "(21/5)^1 should be (21/5) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), 1) << "\n";
    return false;
  }

  if (exponentiate::integral<fraction>::raise(fraction(21, 5), 2) !=
      fraction(441, 25)) {
    log << "(21/5)^2 should be (441/25) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), 2) << "\n";
    return false;
  }

  if (exponentiate::integral<fraction>::raise(fraction(21, 5), 3) !=
      fraction(9261, 125)) {
    log << "(21/5)^3 should be (9261/125) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), 3) << "\n";
    return false;
  }

  if (exponentiate::integral<fraction>::raise(fraction(21, 5), 4) !=
      fraction(194481, 625)) {
    log << "(21/5)^4 should be (194481/625) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), 4) << "\n";
    return false;
  }

  if (exponentiate::integral<fraction>::raise(fraction(21, 5), 5) !=
      fraction(4084101l, 3125)) {
    log << "(21/5)^5 should be (4084101/3125) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), 5) << "\n";
    return false;
  }

  if (exponentiate::integral<fraction>::raise(fraction(21, 5), -1) !=
      fraction(5, 21)) {
    log << "(21/5)^(-1) should be (5/21) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), -1) << "\n";
    return false;
  }

  if (exponentiate::integral<fraction>::raise(fraction(21, 5), -2) !=
      fraction(25, 441)) {
    log << "(21/5)^(-2) should be (25/441) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), -2) << "\n";
    return false;
  }

  if (exponentiate::integral<fraction>::raise(fraction(21, 5), -3) !=
      fraction(125, 9261)) {
    log << "(21/5)^(-3) should be (125/9261) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), -3) << "\n";
    return false;
  }

  if (exponentiate::integral<fraction>::raise(fraction(21, 5), -4) !=
      fraction(625, 194481)) {
    log << "(21/5)^(-4) should be (625/194481) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), -4) << "\n";
    return false;
  }

  if (exponentiate::integral<fraction>::raise(fraction(21, 5), -5) !=
      fraction(3125, 4084101l)) {
    log << "(21/5)^(-5) should be (3125/4084101) but is "
        << exponentiate::integral<fraction>::raise(fraction(21, 5), -5) << "\n";
    return false;
  }

  return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x490, %rsp            # imm = 0x490
movq %rdi, -0x10(%rbp)
leaq -0x30(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x0, -0x38(%rbp)
leaq -0x30(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x7d90
movq %rax, -0x20(%rbp)
movq %rdx, -0x18(%rbp)
leaq -0x48(%rbp), %rdi
movl $0x1, %edx
movq %rdx, %rsi
callq 0x7810
leaq -0x20(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x6583
jmp 0x65f2
movq -0x10(%rbp), %rdi
leaq 0x2ec38(%rip), %rsi     # 0x351c6
callq 0x5360
movq %rax, -0x438(%rbp)
leaq -0x68(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x0, -0x70(%rbp)
leaq -0x68(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x7d90
movq -0x438(%rbp), %rdi
movq %rax, -0x58(%rbp)
movq %rdx, -0x50(%rbp)
leaq -0x58(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2edd3(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
leaq -0x90(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x1, -0x98(%rbp)
leaq -0x90(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x7d90
movq %rax, -0x80(%rbp)
movq %rdx, -0x78(%rbp)
leaq -0xa8(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
leaq -0x80(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x665d
jmp 0x66e1
movq -0x10(%rbp), %rdi
leaq 0x2eb7f(%rip), %rsi     # 0x351e7
callq 0x5360
movq %rax, -0x440(%rbp)
leaq -0xc8(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x1, -0xd0(%rbp)
leaq -0xc8(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x7d90
movq -0x440(%rbp), %rdi
movq %rax, -0xb8(%rbp)
movq %rdx, -0xb0(%rbp)
leaq -0xb8(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2ece4(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
leaq -0xf0(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x2, -0xf8(%rbp)
leaq -0xf0(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x7d90
movq %rax, -0xe0(%rbp)
movq %rdx, -0xd8(%rbp)
leaq -0x108(%rbp), %rdi
movl $0x1b9, %esi            # imm = 0x1B9
movl $0x19, %edx
callq 0x7810
leaq -0xe0(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x6755
jmp 0x67d9
movq -0x10(%rbp), %rdi
leaq 0x2eaa9(%rip), %rsi     # 0x35209
callq 0x5360
movq %rax, -0x448(%rbp)
leaq -0x128(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x2, -0x130(%rbp)
leaq -0x128(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x7d90
movq -0x448(%rbp), %rdi
movq %rax, -0x118(%rbp)
movq %rdx, -0x110(%rbp)
leaq -0x118(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2ebec(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
leaq -0x150(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x3, -0x158(%rbp)
leaq -0x150(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x7d90
movq %rax, -0x140(%rbp)
movq %rdx, -0x138(%rbp)
leaq -0x168(%rbp), %rdi
movl $0x242d, %esi           # imm = 0x242D
movl $0x7d, %edx
callq 0x7810
leaq -0x140(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x684d
jmp 0x68d1
movq -0x10(%rbp), %rdi
leaq 0x2e9d5(%rip), %rsi     # 0x3522d
callq 0x5360
movq %rax, -0x450(%rbp)
leaq -0x188(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x3, -0x190(%rbp)
leaq -0x188(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x7d90
movq -0x450(%rbp), %rdi
movq %rax, -0x178(%rbp)
movq %rdx, -0x170(%rbp)
leaq -0x178(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2eaf4(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
leaq -0x1b0(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x4, -0x1b8(%rbp)
leaq -0x1b0(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x7d90
movq %rax, -0x1a0(%rbp)
movq %rdx, -0x198(%rbp)
leaq -0x1c8(%rbp), %rdi
movl $0x2f7b1, %esi          # imm = 0x2F7B1
movl $0x271, %edx            # imm = 0x271
callq 0x7810
leaq -0x1a0(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x6945
jmp 0x69c9
movq -0x10(%rbp), %rdi
leaq 0x2e903(%rip), %rsi     # 0x35253
callq 0x5360
movq %rax, -0x458(%rbp)
leaq -0x1e8(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x4, -0x1f0(%rbp)
leaq -0x1e8(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x7d90
movq -0x458(%rbp), %rdi
movq %rax, -0x1d8(%rbp)
movq %rdx, -0x1d0(%rbp)
leaq -0x1d8(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2e9fc(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
leaq -0x210(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x5, -0x218(%rbp)
leaq -0x210(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x7d90
movq %rax, -0x200(%rbp)
movq %rdx, -0x1f8(%rbp)
leaq -0x228(%rbp), %rdi
movl $0x3e5185, %esi         # imm = 0x3E5185
movl $0xc35, %edx            # imm = 0xC35
callq 0x7810
leaq -0x200(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x6a3d
jmp 0x6ac1
movq -0x10(%rbp), %rdi
leaq 0x2e833(%rip), %rsi     # 0x3527b
callq 0x5360
movq %rax, -0x460(%rbp)
leaq -0x248(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $0x5, -0x250(%rbp)
leaq -0x248(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x7d90
movq -0x460(%rbp), %rdi
movq %rax, -0x238(%rbp)
movq %rdx, -0x230(%rbp)
leaq -0x238(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2e904(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
leaq -0x270(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $-0x1, -0x278(%rbp)
leaq -0x270(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0x7d90
movq %rax, -0x260(%rbp)
movq %rdx, -0x258(%rbp)
leaq -0x288(%rbp), %rdi
movl $0x5, %esi
movl $0x15, %edx
callq 0x7810
leaq -0x260(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x6b35
jmp 0x6bb9
movq -0x10(%rbp), %rdi
leaq 0x2e765(%rip), %rsi     # 0x352a5
callq 0x5360
movq %rax, -0x468(%rbp)
leaq -0x2a8(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $-0x1, -0x2b0(%rbp)
leaq -0x2a8(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x7d90
movq -0x468(%rbp), %rdi
movq %rax, -0x298(%rbp)
movq %rdx, -0x290(%rbp)
leaq -0x298(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2e80c(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
leaq -0x2d0(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $-0x2, -0x2d8(%rbp)
leaq -0x2d0(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x7d90
movq %rax, -0x2c0(%rbp)
movq %rdx, -0x2b8(%rbp)
leaq -0x2e8(%rbp), %rdi
movl $0x19, %esi
movl $0x1b9, %edx            # imm = 0x1B9
callq 0x7810
leaq -0x2c0(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x6c2d
jmp 0x6cb1
movq -0x10(%rbp), %rdi
leaq 0x2e692(%rip), %rsi     # 0x352ca
callq 0x5360
movq %rax, -0x470(%rbp)
leaq -0x308(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $-0x2, -0x310(%rbp)
leaq -0x308(%rbp), %rdi
leaq -0x310(%rbp), %rsi
callq 0x7d90
movq -0x470(%rbp), %rdi
movq %rax, -0x2f8(%rbp)
movq %rdx, -0x2f0(%rbp)
leaq -0x2f8(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2e714(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
leaq -0x330(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $-0x3, -0x338(%rbp)
leaq -0x330(%rbp), %rdi
leaq -0x338(%rbp), %rsi
callq 0x7d90
movq %rax, -0x320(%rbp)
movq %rdx, -0x318(%rbp)
leaq -0x348(%rbp), %rdi
movl $0x7d, %esi
movl $0x242d, %edx           # imm = 0x242D
callq 0x7810
leaq -0x320(%rbp), %rdi
leaq -0x348(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x6d25
jmp 0x6da9
movq -0x10(%rbp), %rdi
leaq 0x2e5c1(%rip), %rsi     # 0x352f1
callq 0x5360
movq %rax, -0x478(%rbp)
leaq -0x368(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $-0x3, -0x370(%rbp)
leaq -0x368(%rbp), %rdi
leaq -0x370(%rbp), %rsi
callq 0x7d90
movq -0x478(%rbp), %rdi
movq %rax, -0x358(%rbp)
movq %rdx, -0x350(%rbp)
leaq -0x358(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2e61c(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
leaq -0x390(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $-0x4, -0x398(%rbp)
leaq -0x390(%rbp), %rdi
leaq -0x398(%rbp), %rsi
callq 0x7d90
movq %rax, -0x380(%rbp)
movq %rdx, -0x378(%rbp)
leaq -0x3a8(%rbp), %rdi
movl $0x271, %esi            # imm = 0x271
movl $0x2f7b1, %edx          # imm = 0x2F7B1
callq 0x7810
leaq -0x380(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x6e1d
jmp 0x6ea1
movq -0x10(%rbp), %rdi
leaq 0x2e4f2(%rip), %rsi     # 0x3531a
callq 0x5360
movq %rax, -0x480(%rbp)
leaq -0x3c8(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $-0x4, -0x3d0(%rbp)
leaq -0x3c8(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0x7d90
movq -0x480(%rbp), %rdi
movq %rax, -0x3b8(%rbp)
movq %rdx, -0x3b0(%rbp)
leaq -0x3b8(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2e524(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
leaq -0x3f0(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $-0x5, -0x3f8(%rbp)
leaq -0x3f0(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x7d90
movq %rax, -0x3e0(%rbp)
movq %rdx, -0x3d8(%rbp)
leaq -0x408(%rbp), %rdi
movl $0xc35, %esi            # imm = 0xC35
movl $0x3e5185, %edx         # imm = 0x3E5185
callq 0x7810
leaq -0x3e0(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x6f15
jmp 0x6f96
movq -0x10(%rbp), %rdi
leaq 0x2e425(%rip), %rsi     # 0x35345
callq 0x5360
movq %rax, -0x488(%rbp)
leaq -0x428(%rbp), %rdi
movl $0x15, %esi
movl $0x5, %edx
callq 0x7810
movq $-0x5, -0x430(%rbp)
leaq -0x428(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x7d90
movq -0x488(%rbp), %rdi
movq %rax, -0x418(%rbp)
movq %rdx, -0x410(%rbp)
leaq -0x418(%rbp), %rsi
callq 0x7850
movq %rax, %rdi
leaq 0x2e42c(%rip), %rsi     # 0x353b7
callq 0x5360
movb $0x0, -0x1(%rbp)
jmp 0x6f9a
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x490, %rsp            # imm = 0x490
popq %rbp
retq
nopl (%rax,%rax)