// File: aisthesis[P]realnumber/tst/array_arithmetic_test.cpp
// Function: addition::different_lengths_invoker()
BOOST_AUTO_TEST_CASE(different_lengths) {
		// inputs of equal size
		array_arithmetic::convert::from_int(one_billion, bigger_arr1, bigger_arr_len);
		array_arithmetic::convert::from_int(two_billion, bigger_arr2, bigger_arr_len);
		array_arithmetic::add(bigger_arr1, bigger_arr2, big_sum_arr, bigger_arr_len, bigger_arr_len);
		BOOST_CHECK_EQUAL(array_arithmetic::convert::to_int(big_sum_arr, bigger_arr_len + 1),
				three_billion);
		// different input sizes: small
		array_arithmetic::convert::from_int(one, small_arr1, small_arr_len);
		array_arithmetic::convert::from_int(two, smaller_arr, small_arr_len - 1);
		array_arithmetic::add(small_arr1, smaller_arr, small_result_arr, small_arr_len, small_arr_len - 1);
		BOOST_CHECK_EQUAL(array_arithmetic::convert::to_int(small_result_arr, small_arr_len + 1), three);
		// different input sizes: large
		array_arithmetic::convert::from_int(one_billion, bigger_arr1, bigger_arr_len);
		array_arithmetic::convert::from_int(255, big_arr, bigger_arr_len - 2);
		array_arithmetic::add(bigger_arr1, big_arr, big_sum_arr, bigger_arr_len, bigger_arr_len - 2);
		BOOST_CHECK_EQUAL(array_arithmetic::convert::to_int(big_sum_arr, bigger_arr_len + 1),
				static_cast<unsigned int>(1000000255));
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa50, %rsp            # imm = 0xA50
movq 0x1364e(%rip), %rax     # 0x25220
movq %rax, -0x970(%rbp)
leaq 0xb42f(%rip), %rsi      # 0x1d00f
leaq -0x10(%rbp), %rdi
movl $0x1d, %edx
callq 0x17390
leaq -0x1b8(%rbp), %rdi
movq %rdi, -0x968(%rbp)
xorl %esi, %esi
movl $0x198, %edx            # imm = 0x198
callq 0x30d0
movq -0x968(%rbp), %rdi
callq 0x18120
movq -0x968(%rbp), %rdi
callq 0x18150
movq %rax, %rdi
movb $0x22, -0x1b9(%rbp)
leaq -0x1b9(%rbp), %rsi
callq 0x180e0
movq %rax, -0x960(%rbp)
jmp 0x11c3f
movq -0x960(%rbp), %rdi
leaq 0xbacb(%rip), %rsi      # 0x1d718
callq 0x19160
movq %rax, -0x978(%rbp)
jmp 0x11c5b
movq -0x978(%rbp), %rdi
leaq 0xbd20(%rip), %rsi      # 0x1d989
callq 0x18080
movq %rax, -0x980(%rbp)
jmp 0x11c77
movq -0x980(%rbp), %rdi
callq 0x18160
movq %rax, -0x988(%rbp)
jmp 0x11c8c
movq -0x988(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x18020
jmp 0x11c9e
movq -0x970(%rbp), %rdi
leaq -0x10(%rbp), %rsi
movl $0x12f, %edx            # imm = 0x12F
leaq -0x20(%rbp), %rcx
callq 0x3390
jmp 0x11cb9
leaq -0x1b8(%rbp), %rdi
callq 0x181b0
leaq -0x258(%rbp), %rdi
callq 0x19190
movq 0x13548(%rip), %rax     # 0x25220
movq %rax, -0x990(%rbp)
leaq 0xb329(%rip), %rsi      # 0x1d00f
leaq -0x268(%rbp), %rdi
movl $0x1d, %edx
callq 0x17390
jmp 0x11cf9
leaq -0x410(%rbp), %rdi
movq %rdi, -0x998(%rbp)
xorl %esi, %esi
movl $0x198, %edx            # imm = 0x198
callq 0x30d0
movq -0x998(%rbp), %rdi
callq 0x18120
jmp 0x11d21
leaq -0x410(%rbp), %rdi
callq 0x18150
movq %rax, %rdi
movb $0x22, -0x411(%rbp)
leaq -0x411(%rbp), %rsi
callq 0x180e0
movq %rax, -0x9a0(%rbp)
jmp 0x11d4c
movq -0x9a0(%rbp), %rdi
leaq 0xb9be(%rip), %rsi      # 0x1d718
callq 0x19160
movq %rax, -0x9a8(%rbp)
jmp 0x11d68
movq -0x9a8(%rbp), %rdi
leaq 0xbc22(%rip), %rsi      # 0x1d998
callq 0x18200
movq %rax, -0x9b0(%rbp)
jmp 0x11d84
movq -0x9b0(%rbp), %rdi
callq 0x18160
movq %rax, -0x9b8(%rbp)
jmp 0x11d99
movq -0x9b8(%rbp), %rsi
leaq -0x278(%rbp), %rdi
callq 0x18020
jmp 0x11dae
movq -0x990(%rbp), %rdi
leaq -0x268(%rbp), %rsi
movl $0x12f, %edx            # imm = 0x12F
leaq -0x278(%rbp), %rcx
callq 0x3390
jmp 0x11dcf
leaq -0x410(%rbp), %rdi
callq 0x181b0
leaq -0x258(%rbp), %rdi
callq 0x191b0
jmp 0x11de9
movq 0x13430(%rip), %rax     # 0x25220
movq %rax, -0x9c0(%rbp)
leaq 0xb211(%rip), %rsi      # 0x1d00f
leaq -0x428(%rbp), %rdi
movl $0x1d, %edx
callq 0x17390
jmp 0x11e11
leaq -0x5d0(%rbp), %rdi
movq %rdi, -0x9c8(%rbp)
xorl %esi, %esi
movl $0x198, %edx            # imm = 0x198
callq 0x30d0
movq -0x9c8(%rbp), %rdi
callq 0x18120
jmp 0x11e39
leaq -0x5d0(%rbp), %rdi
callq 0x18150
movq %rax, %rdi
movb $0x22, -0x5d1(%rbp)
leaq -0x5d1(%rbp), %rsi
callq 0x180e0
movq %rax, -0x9d0(%rbp)
jmp 0x11e64
movq -0x9d0(%rbp), %rdi
leaq 0xb8a6(%rip), %rsi      # 0x1d718
callq 0x19160
movq %rax, -0x9d8(%rbp)
jmp 0x11e80
movq -0x9d8(%rbp), %rdi
leaq 0xbb1a(%rip), %rsi      # 0x1d9a8
callq 0x18250
movq %rax, -0x9e0(%rbp)
jmp 0x11e9c
movq -0x9e0(%rbp), %rdi
callq 0x18160
movq %rax, -0x9e8(%rbp)
jmp 0x11eb1
movq -0x9e8(%rbp), %rsi
leaq -0x438(%rbp), %rdi
callq 0x18020
jmp 0x11ec6
movq -0x9c0(%rbp), %rdi
leaq -0x428(%rbp), %rsi
movl $0x12f, %edx            # imm = 0x12F
leaq -0x438(%rbp), %rcx
callq 0x3390
jmp 0x11ee7
leaq -0x5d0(%rbp), %rdi
callq 0x181b0
leaq -0x258(%rbp), %rdi
callq 0x12210
jmp 0x11f01
movq 0x13318(%rip), %rax     # 0x25220
movq %rax, -0x9f0(%rbp)
leaq 0xb0f9(%rip), %rsi      # 0x1d00f
leaq -0x5e8(%rbp), %rdi
movl $0x1d, %edx
callq 0x17390
jmp 0x11f29
leaq -0x790(%rbp), %rdi
movq %rdi, -0x9f8(%rbp)
xorl %esi, %esi
movl $0x198, %edx            # imm = 0x198
callq 0x30d0
movq -0x9f8(%rbp), %rdi
callq 0x18120
jmp 0x11f51
leaq -0x790(%rbp), %rdi
callq 0x18150
movq %rax, %rdi
movb $0x22, -0x791(%rbp)
leaq -0x791(%rbp), %rsi
callq 0x180e0
movq %rax, -0xa00(%rbp)
jmp 0x11f7c
movq -0xa00(%rbp), %rdi
leaq 0xb78e(%rip), %rsi      # 0x1d718
callq 0x19160
movq %rax, -0xa08(%rbp)
jmp 0x11f98
movq -0xa08(%rbp), %rdi
leaq 0xba0f(%rip), %rsi      # 0x1d9b5
callq 0x18280
movq %rax, -0xa10(%rbp)
jmp 0x11fb4
movq -0xa10(%rbp), %rdi
callq 0x18160
movq %rax, -0xa18(%rbp)
jmp 0x11fc9
movq -0xa18(%rbp), %rsi
leaq -0x5f8(%rbp), %rdi
callq 0x18020
jmp 0x11fde
movq -0x9f0(%rbp), %rdi
leaq -0x5e8(%rbp), %rsi
movl $0x12f, %edx            # imm = 0x12F
leaq -0x5f8(%rbp), %rcx
callq 0x3390
jmp 0x11fff
leaq -0x790(%rbp), %rdi
callq 0x181b0
leaq -0x258(%rbp), %rdi
callq 0x191d0
jmp 0x12019
movq 0x13200(%rip), %rax     # 0x25220
movq %rax, -0xa20(%rbp)
leaq 0xafe1(%rip), %rsi      # 0x1d00f
leaq -0x7a8(%rbp), %rdi
movl $0x1d, %edx
callq 0x17390
jmp 0x12041
leaq -0x950(%rbp), %rdi
movq %rdi, -0xa28(%rbp)
xorl %esi, %esi
movl $0x198, %edx            # imm = 0x198
callq 0x30d0
movq -0xa28(%rbp), %rdi
callq 0x18120
jmp 0x12069
leaq -0x950(%rbp), %rdi
callq 0x18150
movq %rax, %rdi
movb $0x22, -0x951(%rbp)
leaq -0x951(%rbp), %rsi
callq 0x180e0
movq %rax, -0xa30(%rbp)
jmp 0x12094
movq -0xa30(%rbp), %rdi
leaq 0xb676(%rip), %rsi      # 0x1d718
callq 0x19160
movq %rax, -0xa38(%rbp)
jmp 0x120b0
movq -0xa38(%rbp), %rdi
leaq 0xb90a(%rip), %rsi      # 0x1d9c8
callq 0x18080
movq %rax, -0xa40(%rbp)
jmp 0x120cc
movq -0xa40(%rbp), %rdi
callq 0x18160
movq %rax, -0xa48(%rbp)
jmp 0x120e1
movq -0xa48(%rbp), %rsi
leaq -0x7b8(%rbp), %rdi
callq 0x18020
jmp 0x120f6
movq -0xa20(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
movl $0x12f, %edx            # imm = 0x12F
leaq -0x7b8(%rbp), %rcx
callq 0x3390
jmp 0x12117
leaq -0x950(%rbp), %rdi
callq 0x181b0
leaq -0x258(%rbp), %rdi
callq 0x191f0
addq $0xa50, %rsp            # imm = 0xA50
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c8(%rbp)
movl %eax, -0x1cc(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0x181b0
jmp 0x121f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c8(%rbp)
movl %eax, -0x1cc(%rbp)
jmp 0x121ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c8(%rbp)
movl %eax, -0x1cc(%rbp)
leaq -0x410(%rbp), %rdi
callq 0x181b0
jmp 0x121ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c8(%rbp)
movl %eax, -0x1cc(%rbp)
leaq -0x5d0(%rbp), %rdi
callq 0x181b0
jmp 0x121ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c8(%rbp)
movl %eax, -0x1cc(%rbp)
leaq -0x790(%rbp), %rdi
callq 0x181b0
jmp 0x121ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x1c8(%rbp)
movl %eax, -0x1cc(%rbp)
leaq -0x950(%rbp), %rdi
callq 0x181b0
leaq -0x258(%rbp), %rdi
callq 0x191f0
movq -0x1c8(%rbp), %rdi
callq 0x3340
nopw %cs:(%rax,%rax)