Welcome, guest | Sign In | My Account | Store | Cart
# HEAP[0] = temporary memory for anyone.
# HEAP[-1] = beginning of dynamic memory.
# HEAP[-2] = number of blocks allocated.

################################################################################

# Untested Functions:
#     print_stack_c_string()
#     raise(error)
#     trace(reference)

# Standard Memory Functions:
#     malloc(cells) -> pointer
#     calloc(block_count, block_size) -> pointer
#     free(pointer)
#     realloc(pointer, cells) -> pointer

# Debugging Memory Functions:
#     memory_manager_size(pointer) -> block_size
#     memory_manager_blocks() -> block_count
#     memory_manager_cells() -> used_memory
#     memory_manager_pointers(include_self) -> pointer_array
#     memory_manager_find(address) -> pointer
#     memory_manager_hash() -> hash_number

# Utility Memory Functions:
#     clear(start_address, end_address)
#     copy(from_start, from_end, to_start, to_end)
#     compare_cells(addr_a, addr_b) -> -1, 0, +1
#     compare_memory(a, b, length) -> -1, 0, +1
#     range(address, start, stop, step)
#     mark(pointer)
#     sum_length_array(array) -> sum

# Private Memory Functions:
#     memory_manager_append_cell(start, end)
#     memory_manager_get_cell(index) -> start, end
#     memory_manager_insert_cell(start, end, index)
#     malloc_check_beginning(cells) -> enough_space
#     malloc_check_ranges(cells) -> index
#     malloc_ranges(cells) -> pointer
#     memory_manager_search(pointer) -> index
#     memory_manager_pop_cell(index) -> start, end
#     memory_manager_get_block_size(index) -> size
#     memory_manager_set_cell(start, end, index)
#     memory_manager_deflate_block(cells, index)
#     memory_manager_inflate_cell(cells, index)
#     memory_manager_potential_after(index) -> size
#     memory_manager_potential_before(index) -> size
#     memory_manager_compress(index) -> address
#     memory_manager_inflate_before(pointer, cells, index) -> pointer
#     memory_manager_inflate_move(pointer, cells, index) -> pointer
#     memory_manager_inflate_block(pointer, cells, index) -> pointer

# Stack Helper Functions:
#     rotate_3_down()
#     rotate_3_up()
#     save_stack(size) -> pointer
#     load_stack(pointer, size)

# Number Manipulation Functions:
#     abs_diff(a, b) -> number
#     get_addr(offset, start, end) -> address
#     direction(number) -> -1, 0, +1
#     uint_cast(number) -> uint
#     left_shift(number, shift) -> number
#     right_shift(number, shift) -> number
#     divmod(x, y) -> div, mod
#     value_to_array(value) -> array
#     array_to_value(array) -> value
#     uint_bits(number) -> bits
#     uint_xor(a, b) -> xor_value

################################################################################

# Error 1   = Copy's two ranges are not equal.
# Error 2   = abs_diff(2, 1) != 1
# Error 3   = abs_diff(1, 2) != 1
# Error 4   = get_addr(1, 1, 4) != 2
# Error 5   = get_addr(2, 1, 4) != 3
# Error 6   = get_addr(1, 4, 1) != 3
# Error 7   = get_addr(2, 4, 1) != 2
# Error 8   = heap[1] != 0 after clear()
# Error 9   = heap[2] != 0 after clear()
# Error 10  = heap[1] != 0 after clear()
# Error 11  = heap[2] != 0 after clear()
# Error 12  = heap[3] != 1 after copy(1, 2, 3, 4)
# Error 13  = heap[4] != 2 after copy(1, 2, 3, 4)
# Error 14  = heap[3] != 2 after copy(1, 2, 4, 3)
# Error 15  = heap[4] != 1 after copy(1, 2, 4, 3)
# Error 16  = heap[3] != 1 after copy(2, 1, 4, 3)
# Error 17  = heap[4] != 2 after copy(2, 1, 4, 3)
# Error 18  = heap[3] != 2 after copy(2, 1, 3, 4)
# Error 19  = heap[4] != 1 after copy(2, 1, 3, 4)
# Error 20  = heap[-2] != 0
# Error 21  = heap[-2] != 1
# Error 22  = heap[-3] != 100
# Error 23  = heap[-4] != 200
# Error 24  = heap[-2] != 2
# Error 25  = heap[-5] != 300
# Error 26  = heap[-6] != 400
# Error 27  = Memory manager cell is out of range.
# Error 28  = MM[0][0] != 80
# Error 29  = MM[0][1] != 90
# Error 30  = MM[1][0] != 100
# Error 31  = MM[1][1] != 110
# Error 32  = MM_insert_cell had negative index.
# Error 33  = MM[3][1] != 40
# Error 34  = MM[3][0] != 31
# Error 35  = MM[2][1] != 30
# Error 36  = MM[2][0] != 21
# Error 37  = MM[1][1] != 20
# Error 38  = MM[1][0] != 11
# Error 39  = MM[0][1] != 10
# Error 40  = MM[0][0] != 1
# Error 41  = There was a request for zero or less cells.
# Error 42  = malloc_check_beginning accepted invalid range.
# Error 43  = malloc_check_beginngng did not accept valid range.
# Error 44  = MM[1][1] != 20
# Error 45  = MM[1][0] != 11
# Error 46  = MM[0][1] != 10
# Error 47  = MM[0][0] != 1
# Error 48  = malloc_check_ranges found space.
# Error 49  = malloc_check_ranges found space.
# Error 50  = malloc_check_ranges found space.
# Error 51  = malloc_check_ranges did not insert at MM[1].
# Error 52  = malloc_check_ranges did not insert at MM[2].
# Error 53  = MM[2][1] != 30
# Error 54  = MM[2][0] != 26
# Error 55  = MM[1][1] != 25
# Error 56  = MM[1][0] != 21
# Error 57  = malloc_ranges failed head insert.
# Error 58  = malloc_ranges failed body insert.
# Error 59  = mallox_ranges failed tail insert.
# Error 60  = MM[4][1] != 50
# Error 61  = MM[4][0] != 41
# Error 62  = MM[2][1] != 30
# Error 63  = MM[2][0] != 21
# Error 64  = MM[0][1] != 10
# Error 65  = MM[0][0] != 1
# Error 66  = malloc(1) produced bad pointer.
# Error 67  = malloc(2) produced bad pointer.
# Error 68  = malloc(3) produced bad pointer.
# Error 69  = malloc(4) produced bad pointer.
# Error 70  = Memory manager does not have four blocks.
# Error 71  = Block four does not have the correct end.
# Error 72  = calloc produced bad pointer.
# Error 73  = Allocated block has bad end.
# Error 74  = Block found in empty array.
# Error 75  = Binary search did not find first block.
# Error 76  = Binary search did not find middle block.
# Error 77  = Binary search did not find last block.
# Error 78  = Block found before allocations.
# Error 79  = Block found after allocations.
# Error 80  = Tried to free unknown memory block.
# Error 81  = Tried getting cell at negative index.
# Error 82  = Tried popping cell at negative index.
# Error 83  = Tried popping cell beyond memory array.
# Error 84  = memory_manager_pop_cell(0)[1] != 30
# Error 85  = memory_manager_pop_cell(0)[0] != 21
# Error 86  = memory_manager_pop_cell(1)[1] != 40
# Error 87  = memory_manager_pop_cell(1)[0] != 31
# Error 88  = memory_manager_pop_cell(0)[1] != 20
# Error 89  = memory_manager_pop_cell(0)[0] != 11
# Error 90  = memory_manager_pop_cell(-1)[1] != 50
# Error 91  = memory_manager_pop_cell(-1)[0] != 41
# Error 92  = MM[0][0] != 1
# Error 93  = MM[1][0] != 51
# Error 94  = MM[2][0] != 76
# Error 95  = MM[3][0] != 101
# Error 96  = MM[4][0] != 201
# Error 97  = MM[5][0] != 251
# Error 98  = MM[6][0] != 276
# Error 99  = MM[6][1] != 375
# Error 100 = HEAP[-2] != 0
# Error 101 = Tried realloc unknown block.
# Error 102 = Did not get correct block size.
# Error 103 = Cannot deflate block to requested size.
# Error 104 = Tried setting a negative cell.
# Error 105 = Tried setting cell beyond array end.
# Error 106 = MM[0][1] != 20
# Error 107 = MM[0][0] != 11
# Error 108 = Could not deflate block size.
# Error 109 = Cannot inflate block to requested size.
# Error 110 = Could not inflate block size.
# Error 111 = Potential after was not calculated correctly.
# Error 112 = Potential before (0) was not calculated correctly.
# Error 113 = Potential before (1) was not calculated correctly.
# Error 114 = Compression vector (0) was not calculated correctly.
# Error 115 = Compression vector (1) was not calculated correctly.
# Error 116 = Wrong number of blocks allocated (should be 4).
# Error 117 = Wrong number of blocks allocated (should be 3).
# Error 118 = Memory does not compare equal.
# Error 119 = Wrong number of blocks allocated (should be 0).
# Error 120 = compare_memory given negative length.
# Error 121 = Cells did not evaluate to equal.
# Error 122 = !(Cell A > Cell B)
# Error 123 = !(Cell A < Cell B)
# Error 124 = Empty comparison does not return equal.
# Error 125 = Same address does not return equal.
# Error 126 = Same values do not return equal.
# Error 127 = First memory does not return greater than.
# Error 128 = First memory does not return less than.
# Error 129 = range has bad argument directions.
# Error 130 = Negative number should have negative direction.
# Error 131 = Zero number should have zero direction.
# Error 132 = Positive number should have positive direction.
# Error 133 = First range did not fill correctly.
# Error 134 = Second range did not fill correctly.
# Error 135 = Third range did not fill correctly.
# Error 136 = Fourth range did not fill correctly.
# Error 137 = Could not find block by pointer.
# Error 138 = First block size is incorrect.
# Error 139 = Second block size is incorrect.
# Error 140 = Third block size is incorrect.
# Error 141 = Mark did not perform correctly.
# Error 142 = Memory was not copied correctly.
# Error 143 = Block (h) does not have correct size.
# Error 144 = Block (j) does not have correct size.
# Error 145 = Blocks do not have same content.
# Error 146 = Block addresses do not match.
# Error 147 = stack[-1] was not correct.
# Error 148 = stack[-2] was not correct.
# Error 149 = stack[-3] was not correct.
# Error 150 = stack[-1] was not correct.
# Error 151 = stack[-2] was not correct.
# Error 152 = stack[-3] was not correct.
# Error 153 = Block should not have been moved.
# Error 154 = Size was not set correctly.
# Error 155 = Block should not have been moved.
# Error 156 = Size was not set correctly.
# Error 157 = Block should have been moved to front of memory.
# Error 158 = Size was not set correctly.
# Error 159 = Block was not correctly copied.
# Error 160 = Block was not moved to end of memory.
# Error 161 = Memory does not appear the same.
# Error 162 = Memory was not freed.
# Error 163 = Memory was not freed.
# Error 164 = Same memory was not returned.
# Error 165 = Memory size should not have changed.
# Error 166 = Same memory was not returned.
# Error 167 = Memory size is not correct.
# Error 168 = Memory was not moved to correct place.
# Error 169 = Memory size is not correct.
# Error 170 = Correct number of blocks not returned.
# Error 171 = Correct number of blocks not returned.
# Error 172 = Used memory not returned correctly.
# Error 173 = Used memory not returned correctly.
# Error 174 = Used memory not returned correctly.
# Error 175 = Negative argument not accepted.
# Error 176 = Array should have been empty.
# Error 177 = Array should have one value.
# Error 178 = Second item should refer to self.
# Error 179 = array and test should be the same.
# Error 180 = There should be two items in array.
# Error 181 = Second item should refer to array.
# Error 182 = Third item should refer to self.
# Error 183 = Null pointer should have been returned.
# Error 184 = Null pointer should have been returned.
# Error 185 = Pointer to first cell was not returned.
# Error 186 = Pointer to first cell was not returned.
# Error 187 = Pointer to first cell was not returned.
# Error 188 = Null pointer should have been returned.
# Error 189 = Null pointer should have been returned.
# Error 190 = Null pointer should have been returned.
# Error 191 = Pointer to second cell was not returned.
# Error 192 = Pointer to second cell was not returned.
# Error 193 = Pointer to second cell was not returned.
# Error 194 = Null pointer should have been returned.
# Error 195 = Null pointer should have been returned.
# Error 196 = Null pointer should have been returned.
# Error 197 = Pointer to third cell was not returned.
# Error 198 = Pointer to third cell was not returned.
# Error 199 = Pointer to third cell was not returned.
# Error 200 = Null pointer should have been returned.
# Error 201 = Cast should have returned 0.
# Error 202 = Cast should have returned 0.
# Error 203 = Cast should have returned 0.
# Error 204 = Cast should have returned 1.
# Error 205 = Cast should have returned 1.
# Error 206 = Cast should have returned 1.
# Error 207 = Cast should have returned 4294967295.
# Error 208 = Cast should have returned 4294967295.
# Error 209 = Cast should have returned 4294967295.
# Error 210 = Zero left shift was incorrect.
# Error 211 = Zero right shift was incorrect.
# Error 212 = Shift left by two was incorrect.
# Error 213 = Shift right by two was incorrect.
# Error 214 = Negative left shift was incorrect.
# Error 215 = Negative right shift was incorrect.
# Error 216 = value_to_array received a bad base.
# Error 217 = array_to_value received a bad base.
# Error 218 = Digit was too high for base.
# Error 219 = Cannot save stack size less than 1.
# Error 220 = Cannot load stack size less than 1.
# Error 221 = There is nothing in the array.
# Error 222 = Cannot load more than what is in array.
# Error 223 = Array length is not correct.
# Error 224 = Fourth element was not correct.
# Error 225 = Array length is not correct.
# Error 226 = First element was not correct.
# Error 227 = Sentinel value was not correct.
# Error 228 = Sanity check failed for save_stack.
# Error 229 = Full reload of stack failed.
# Error 230 = Full reload of stack failed.
# Error 231 = Single reload of stack failed.
# Error 232 = Double reload of stack failed.
# Error 233 = Array resize operation failed.
# Error 234 = Unexpected sum was detected.
# Error 235 = First div was not correct.
# Error 236 = First mod was not correct.
# Error 235 = Second div was not correct.
# Error 236 = Second mod was not correct.
# Error 235 = Third div was not correct.
# Error 236 = Third mod was not correct.
# Error 237 = First sum was not correct.
# Error 238 = Second sum was not correct.
# Error 239 = Third sum was not correct.
# Error 240 = Fourth sum was not correct.
# Error 241 = Fifth sum was not correct.
# Error 242 = Sixth sum was not correct.
# Error 243 = Length was not written correctly.
# Error 244 = Least significant digit is incorrect.
# Error 245 = Middle digit is incorrect.
# Error 246 = Most significant digit is incorrect.
# Error 247 = Second value was incorrect.
# Error 248 = Third value was incorrect.
# Error 249 = Fourth value was incorrect.
# Error 250 = Fifth value was incorrect.
# Error 251 = Zero was expected but not found.
# Error 252 = One through zero was expected but not found.
# Error 253 = Date in base thirteen was expected but not found.
# Error 254 = One hundred across bases was expected but not found.
# Error 255 = Value from bases two to three was expected but not found.
# Error 256 = First bit is not one.
# Error 257 = Last bit is not one.
# Error 258 = First bit is not zero.
# Error 259 = Last bit is not zero.
# Error 260 = The expected value (7) was not returned.
# Error 261 = The expected value (255) was not returned.
# Error 262 = The expected value (92051) was not returned.
# Error 263 = The expected value (1033010045) was not returned.
# Error 264 = The expected value (2554936947) was not returned.
# Error 265 = The expected value (1747467773) was not returned.
# Error 266 = The expected value (0) was not returned.
# Error 267 = The expected value (2153645760) was not returned.
# Error 268 = The expected value (4048040839) was not returned.
# Error 269 = The expected value (265376592) was not returned.
# Error 270 = The expected value (880511209) was not returned.

################################################################################

     call "self_test"
     exit

# def self_test():
#     test_abs_diff()
#     test_get_addr()
#     test_clear()
#     test_copy()
#     test_memory_manager_append_cell()
#     test_memory_manager_get_cell()
#     test_memory_manager_insert_cell()
#     test_malloc_check_beginning()
#     test_malloc_check_ranges()
#     test_malloc_ranges()
#     test_malloc()
#     test_calloc()
#     test_memory_manager_search()
#     test_memory_manager_pop_cell()
#     test_free()
#     test_memory_manager_get_block_size()
#     test_memory_manager_set_cell()
#     test_memory_manager_deflate_block()
#     test_memory_manager_inflate_cell()
#     test_memory_manager_potential_after()
#     test_memory_manager_potential_before()
#     test_memory_manager_compress()
#     test_compare_cells()
#     test_compare_memory()
#     test_direction()
#     test_range()
#     test_memory_manager_size()
#     test_mark()
#     test_memory_manager_inflate_before()
#     test_rotate_3_down()
#     test_rotate_3_up()
#     test_memory_manager_inflate_move()
#     test_memory_manager_inflate_block()
#     test_realloc()
#     test_memory_manager_blocks()
#     test_memory_manager_cells()
#     test_memory_manager_pointers()
#     test_memory_manager_find()
#     test_uint_cast()
#     test_shift()
#     test_save_stack()
#     test_load_stack()
#     test_divmod()
#     test_sum_length_array()
#     test_value_to_array()
#     test_array_to_value()
#     test_uint_bits()
#     test_uint_xor()
#     test_memory_manager_hash()
#     print('All 49 tests have passed.')
part "self_test"
     call "test_abs_diff"
     call "test_get_addr"
     call "test_clear"
     call "test_copy"
     call "test_memory_manager_append_cell"
     call "test_memory_manager_get_cell"
     call "test_memory_manager_insert_cell"
     call "test_malloc_check_beginning"
     call "test_malloc_check_ranges"
     call "test_malloc_ranges"
     call "test_malloc"
     call "test_calloc"
     call "test_memory_manager_search"
     call "test_memory_manager_pop_cell"
     call "test_free"
     call "test_memory_manager_get_block_size"
     call "test_memory_manager_set_cell"
     call "test_memory_manager_deflate_block"
     call "test_memory_manager_inflate_cell"
     call "test_memory_manager_potential_after"
     call "test_memory_manager_potential_before"
     call "test_memory_manager_compress"
     call "test_compare_cells"
     call "test_compare_memory"
     call "test_direction"
     call "test_range"
     call "test_memory_manager_size"
     call "test_mark"
     call "test_memory_manager_inflate_before"
     call "test_rotate_3_down"
     call "test_rotate_3_up"
     call "test_memory_manager_inflate_move"
     call "test_memory_manager_inflate_block"
     call "test_realloc"
     call "test_memory_manager_blocks"
     call "test_memory_manager_cells"
     call "test_memory_manager_pointers"
     call "test_memory_manager_find"
     call "test_uint_cast"
     call "test_shift"
     call "test_save_stack"
     call "test_load_stack"
     call "test_divmod"
     call "test_sum_length_array"
     call "test_value_to_array"
     call "test_array_to_value"
     call "test_uint_bits"
     call "test_uint_xor"
     call "test_memory_manager_hash"
     push 0
     push 46
     push 100
     push 101
     push 115
     push 115
     push 97
     push 112
     push 32
     push 101
     push 118
     push 97
     push 104
     push 32
     push 115
     push 116
     push 115
     push 101
     push 116
     push 32
     push 57
     push 52
     push 32
     push 108
     push 108
     push 65
     call "print_stack_c_string"
     back

################################################################################

# def print_stack_c_string():
#     while True:
#         value = stack[-1]
#         if not value:
#             stack.pop()
#             return
#         print(chr(stack.pop()), end='')
part "print_stack_c_string"
     copy
     zero "__print_stack_c_string_return"
     ochr
     goto "print_stack_c_string"
part "__print_stack_c_string_return"
     away
     back
# def raise(error):
#     print('Error:', error)
#     sys.exit()
part "raise"
     push 0
     push 32
     push 58
     push 114
     push 111
     push 114
     push 114
     push 69
     push 10
     call "print_stack_c_string"
     oint
     push 10
     ochr
     exit
# def trace(reference):
#     print('Trace:', reference)
part "trace"
     push 0
     push 32
     push 58
     push 101
     push 99
     push 97
     push 114
     push 84
     push 10
     call "print_stack_c_string"
     oint
     push 10
     ochr
     back

################################################################################

# def abs_diff(a, b):
#     c = a - b
#     if c < 0:
#         return 0 - c
#     return c
part "abs_diff"
     sub
     copy
     less "__abs_diff_sign"
     back
part "__abs_diff_sign"
     push 0
     swap
     sub
     back
# def get_addr(offset, start, end):
#     if end < start:
#         return start - offset
#     return offset + start
part "get_addr"
     copy 1
     sub
     less "__get_addr_reverse"
     add
     back
part "__get_addr_reverse"
     swap
     sub
     back
# clear(start_addr, end_addr):
#     if start_addr < end_addr:
#         start_addr, end_addr = end_addr, start_addr
#     while True:
#         heap[end_addr] = 0
#         if start_addr == end_addr:
#             return
#         end_addr += 1
part "clear"
     copy 1
     copy 1
     sub
     less "__clear_swap"
part "__clear_loop"
     copy
     push 0
     set
     copy 1
     copy 1
     sub
     zero "__clear_return"
     push 1
     add
     goto "__clear_loop"
part "__clear_swap"
     swap
     goto "__clear_loop"
part "__clear_return"
     away
     away
     back
# def copy(from_start, from_end, to_start, to_end):
#     if abs_diff(from_start, from_end) != abs_diff(to_start, to_end):
#         raise Exception(1)
#     offset = 0
#     while True:
#         to_addr = get_addr(offset, to_start, to_end)
#         from_addr = get_addr(offset, from_start, from_end)
#         heap[to_addr] = heap[from_addr]
#         if to_addr == to_end:
#             return
#         offset += 1
part "copy"
     copy 3
     copy 3
     call "abs_diff"
     copy 2
     copy 2
     call "abs_diff"
     sub
     zero "__copy_no_arg_error"
     push 1
     call "raise"
part "__copy_no_arg_error"
     push 0
part "__copy_loop"
     copy
     copy 3
     copy 3
     call "get_addr"
     copy
     copy 2
     copy 7
     copy 7
     call "get_addr"
     get
     set
     copy 2
     sub
     zero "__copy_return"
     push 1
     add
     goto "__copy_loop"
part "__copy_return"
     away 4
     away
     back
# def memory_manager_append_cell(start, end):
#     heap[-2] += 1
#     addr = -2 * heap[-2] - 1
#     heap[addr] = start
#     heap[addr - 1] = end
part "memory_manager_append_cell"
     push -2
     copy
     copy
     copy
     get
     push 1
     add
     set
     get
     mul
     push 1
     sub
     copy
     copy 3
     set
     push 1
     sub
     swap
     set
     away
     back
# def memory_manger_get_cell(index):
#     if index < 0:
#         raise Exception(81)
#     if index < HEAP[-2]:
#         address = -2 * index - 3
#         start_addr = HEAP[address]
#         stop_addr = HEAP[address - 1]
#         return start_addr, stop_addr
#     raise Exception(27)
part "memory_manager_get_cell"
     copy
     less "__memory_manager_get_cell_under_zero"
     copy
     push -2
     get
     sub
     less "__memory_manager_get_cell_in_range"
     push 27
     call "raise"
part "__memory_manager_get_cell_under_zero"
     push 81
     call "raise"
part "__memory_manager_get_cell_in_range"
     push -2
     mul
     push 3
     sub
     copy
     get
     swap
     push 1
     sub
     get
     back
# def memory_manager_insert_cell(start, end, index):
#     if index < 0:
#         raise Exception(32)
#     if index - HEAP[-2] < 0:
#         address = -2 * index - 3
#         from_end = (HEAP[-2] + 1) * -2
#         from_start, from_end = from_end, address
#         to_start = address - 2
#         to_end = from_end - 2
#         copy(from_start, from_end, to_start, to_end)
#         HEAP[address - 1] = end
#         HEAP[address] = start
#         HEAP[-2] += 1
#     else:
#         memory_manager_append_cell(start, end)
part "memory_manager_insert_cell"
     copy
     less "__memory_manager_insert_cell_bad_index"
     copy
     push -2
     get
     sub
     less "__memory_manager_insert_cell_continue"
     away
     call "memory_manager_append_cell"
     back
part "__memory_manager_insert_cell_bad_index"
     push 32
     call "raise"
part "__memory_manager_insert_cell_continue"
     push -2
     mul
     push 3
     sub
     copy
     push -2
     push 1
     push -2
     get
     add
     mul
     swap
     copy 1
     push 2
     sub
     copy 1
     push 2
     sub
     call "copy"
     swap
     copy 1
     push 1
     sub
     swap
     set
     swap
     set
     push -2
     copy
     get
     push 1
     add
     set
     back
# def malloc_check_beginning(cells):
#     start = memory_manager_get_cell(0)[0]
#     open_space = start - HEAP[-1]
#     if cells > open_space:
#         return False
#     start = HEAP[-1]
#     end = cells + start - 1
#     memory_manager_insert_cell(start, end, 0)
#     return True
part "malloc_check_beginning"
     copy
     push 0
     call "memory_manager_get_cell"
     away
     push -1
     get
     sub
     sub
     copy
     less "__malloc_check_beginning_insert"
     copy
     zero "__malloc_check_beginning_insert"
     push 0
     away 2
     back
part "__malloc_check_beginning_insert"
     away
     push -1
     get
     swap
     copy 1
     add
     push 1
     sub
     push 0
     call "memory_manager_insert_cell"
     push 1
     back
# def malloc_check_ranges(cells):
#     if HEAP[-2] >= 2:
#         index = 0
#         while index + 1 < HEAP[-2]:
#             end = memory_manager_get_cell(index)[1]
#             start = memory_manager_get_cell(index + 1)[0]
#             empty_space = end - start
#             excess = empty_space + cells
#             if excess < 0:
#                 location = index + 1
#                 end = memory_manager_get_cell(index)[1]
#                 new_end = end + cells
#                 new _start = end + 1
#                 memory_manager_insert_cell(new_start, new_end, location)
#                 return location
#             index += 1
#     return -1
part "malloc_check_ranges"
     push -2
     copy
     get
     add
     less "__malloc_check_ranges_unable"
     push 0
part "__malloc_check_ranges_loop_check"
     copy
     push 1
     add
     push -2
     get
     sub
     less "__malloc_check_ranges_loop_body"
     away
part "__malloc_check_ranges_unable"
     away
     push -1
     back
part "__malloc_check_ranges_loop_body"
     copy
     call "memory_manager_get_cell"
     away 1
     copy 1
     push 1
     add
     call "memory_manager_get_cell"
     away
     sub
     copy 2
     add
     less "__malloc_check_ranges_found"
     push 1
     add
     goto "__malloc_check_ranges_loop_check"
part "__malloc_check_ranges_found"
     copy
     push 1
     add
     swap
     call "memory_manager_get_cell"
     away 1
     copy
     copy 3
     add
     swap
     push 1
     add
     swap
     copy 2
     call "memory_manager_insert_cell"
     away 1
     back
# def malloc_ranges(cells):
#     if malloc_check_beginning(cells):
#         return HEAP[-1]
#     index = malloc_check_ranges(cells)
#     if index == -1:
#         address = -2 * HEAP[-2] - 2
#         end = HEAP[address]
#         new_end = end + cells
#         new start = end + 1
#         memory_manager_append_cell(new_start, new_end)
#         return new_start
#     return memory_manager_get_cell(index)[0]
part "malloc_ranges"
     copy
     call "malloc_check_beginning"
     zero "__malloc_ranges_not_beginning"
     away
     push -1
     get
     back
part "__malloc_ranges_not_beginning"
     copy
     call "malloc_check_ranges"
     copy
     push 1
     add
     zero "__malloc_ranges_append"
     call "memory_manager_get_cell"
     swap
     away 2
     back
part "__malloc_ranges_append"
     away
     push -2
     copy
     copy
     get
     mul
     add
     get
     swap
     copy 1
     add
     swap
     push 1
     add
     swap
     copy 1
     swap
     call "memory_manager_append_cell"
     back
# def malloc(cells):
#     if cells <= 0:
#         raise Exception(41)
#     if not heap[-2]:
#         start = heap[-1]
#         end = start + cells - 1
#         memory_manager_append_cell(start, end)
#         return start
#     return malloc_ranges(cells)
part "malloc"
     copy
     less "__malloc_bad_argument"
     copy
     zero "__malloc_bad_argument"
     push -2
     get
     zero "__malloc_start"
     call "malloc_ranges"
     back
part "__malloc_bad_argument"
     push 41
     call "raise"
part "__malloc_start"
     push -1
     get
     copy
     copy
     copy 3
     add
     push 1
     sub
     call "memory_manager_append_cell"
     away 1
     back
# def calloc(block_count, block_size):
#     return malloc(block_count * block_size)
part "calloc"
     mul
     call "malloc"
     back
# def memory_manager_search(pointer):
#     size = HEAP[-2]
#     if not size:
#         return -1
#     last = size - 1
#     first = 0
#     while first <= last:
#         index = (last + first) // 2
#         value = memory_manager_get_cell(index)[0]
#         if value < pointer:
#             first = index + 1
#         elif value == pointer:
#             return index
#         else:
#             last = index - 1
#     return -1
part "memory_manager_search"
     push -2
     get
     copy
     zero "__memory_manager_search_not_found"
     push 1
     sub
     push 0
part "__memory_manager_search_loop_test"
     copy
     copy 2
     sub
     copy
     less "__memory_manager_search_loop_body_away"
     zero "__memory_manager_search_loop_body"
     goto "__memory_manager_search_not_found_away"
part "__memory_manager_search_loop_body_away"
     away
part "__memory_manager_search_loop_body"
     copy 1
     copy 1
     add
     push 2
     div
     copy
     call "memory_manager_get_cell"
     away
     copy 4
     sub
     copy
     less "__memory_manager_search_high"
     zero "__memory_manager_search_return"
     push 1
     sub
     swap
     push 0
     swap
     set
     away 1
     push 0
     get
     goto "__memory_manager_search_loop_test"
part "__memory_manager_search_return"
     away 3
     back
part "__memory_manager_search_high"
     away
     away 1
     push 1
     add
     goto "__memory_manager_search_loop_test"
part "__memory_manager_search_not_found_away"
     away
part "__memory_manager_search_not_found"
     push -1
     away 2
     back
# def memory_manager_pop_cell(index):
#     if index == -1:
#         index = HEAP[-2] - 1
#     if index < 0:
#         raise Exception(82)
#     if index < HEAP[-2]:
#         a, b = memory_manager_get_cell(index)
#         HEAP[-2] -= 1
#         if index != HEAP[-2]:
#             from_start = -2 * index - 5
#             from_end = (HEAP[-2] + 2) * -2
#             to_start = from_start + 2
#             to_end = from_end + 2
#             copy(from_start, from_end, to_start, to_end)
#         start = -2 * HEAP[-2] - 3
#         end = start - 1
#         clear(start, end)
#         return a, b
#     raise Exception(83)
part "memory_manager_pop_cell"
     copy
     push 1
     add
     zero "__memory_manager_pop_cell_last_cell"
part "__memory_manager_pop_cell_negative_index_check"
     copy
     less "__memory_manager_pop_cell_negative_index_raise"
     copy
     push -2
     get
     sub
     less "__memory_manager_pop_cell_index_okay"
     push 83
     call "raise"
part "__memory_manager_pop_cell_index_okay"
     copy
     call "memory_manager_get_cell"
     push -1
     push -2
     get
     add
     copy
     push -2
     swap
     set
     copy
     copy 4
     sub
     zero "__memory_manager_pop_cell_clear_end"
     push -5
     push -2
     copy 5
     mul
     add
     push -2
     push 2
     copy 3
     add
     mul
     copy 1
     push 2
     add
     copy 1
     push 2
     add
     call "copy"
part "__memory_manager_pop_cell_clear_end"
     push -2
     mul
     push 3
     sub
     copy
     push 1
     sub
     call "clear"
     push 0
     swap
     set
     away 1
     push 0
     get
     back
part "__memory_manager_pop_cell_negative_index_raise"
     push 82
     call "raise"
part "__memory_manager_pop_cell_last_cell"
     push -2
     get
     add
     goto "__memory_manager_pop_cell_negative_index_check"
# def free(pointer):
#     index = memory_manager_search(pointer)
#     if index == -1:
#         raise Exception(80)
#     memory_manager_pop_cell(index)
part "free"
     call "memory_manager_search"
     copy
     push 1
     add
     zero "__free_not_found"
     call "memory_manager_pop_cell"
     away
     away
     back
part "__free_not_found"
     push 80
     call "raise"
     back
# def memory_manager_get_block_size(index):
#     start, end = memory_manager_get_cell(index)
#     return end - start + 1
part "memory_manager_get_block_size"
     call "memory_manager_get_cell"
     swap
     sub
     push 1
     add
     back
# def memory_manager_set_cell(start, end, index):
#     if index < 0:
#         raise Exception(104)
#     if index < HEAP[-2]:
#         address = -2 * index - 4
#         HEAP[address] = end
#         HEAP[address + 1] = start
#         return
#     raise Exception(105)
part "memory_manager_set_cell"
     copy
     less "__memory_manager_set_cell_negative"
     copy
     push -2
     get
     sub
     less "__memory_manager_set_cell_in_range"
     push 105
     call "raise"
part "__memory_manager_set_cell_negative"
     push 104
     call "raise"
part "__memory_manager_set_cell_in_range"
     push -2
     mul
     push 4
     sub
     copy
     copy 2
     set
     push 1
     add
     away 1
     swap
     set
     back
# def memory_manager_deflate_block(cells, index):
#     size = memory_manager_get_block_size(index)
#     if cells < size:
#         start, end = memory_manager_get_cell(index)
#         end = start + cells - 1
#         memory_manager_set_cell(start, end, index)
#         return
#     raise Exception(103)
part "memory_manager_deflate_block"
     copy
     call "memory_manager_get_block_size"
     copy 2
     swap
     sub
     less "__memory_manager_deflate_block_continue"
     push 103
     call "raise"
part "__memory_manager_deflate_block_continue"
     copy
     call "memory_manager_get_cell"
     away
     copy
     copy 3
     push 1
     sub
     add
     copy 2
     call "memory_manager_set_cell"
     away
     away
     back
# def memory_manager_inflate_cell(cells, index):
#     size = memory_manager_get_block_size(index)
#     if size < cells:
#         start, end = memory_manager_get_cell(index)
#         end = start + cells - 1
#         memory_manager_set_cell(start, end, index)
#         return
#     raise Exception(109)
part "memory_manager_inflate_cell"
     copy
     call "memory_manager_get_block_size"
     copy 2
     sub
     less "__memory_manager_inflate_cell_continue"
     push 109
     call "raise"
part "__memory_manager_inflate_cell_continue"
     copy
     call "memory_manager_get_cell"
     away
     copy
     copy 3
     push 1
     sub
     add
     copy 2
     call "memory_manager_set_cell"
     away
     away
     back
# def memory_manager_potential_after(index):
#     size = memory_manager_get_block_size(index)
#     start = memory_manager_get_cell(index + 1)[0]
#     end = memory_manager_get_cell(index)[1]
#     empty = start - end - 1
#     return size + empty
part "memory_manager_potential_after"
     copy
     call "memory_manager_get_block_size"
     copy 1
     push 1
     add
     call "memory_manager_get_cell"
     away
     copy 2
     call "memory_manager_get_cell"
     away 1
     sub
     push 1
     sub
     add
     away 1
     back
# def memory_manager_potential_before(index):
#     if index == 0:
#         head = HEAP[-3]
#         start = HEAP[-1]
#         space = head - start
#     else:
#         start = memory_manager_get_cell(index)[0]
#         end = memory_manager_get_cell(index - 1)[1]
#         space = start - end - 1
#     return space + memory_manager_potential_after(index)
part "memory_manager_potential_before"
     copy
     zero "__memory_manager_potential_before_head"
     copy
     call "memory_manager_get_cell"
     away
     copy 1
     push 1
     sub
     call "memory_manager_get_cell"
     away 1
     sub
     push 1
     sub
     goto "__memory_manager_potential_before_total"
part "__memory_manager_potential_before_head"
     push -3
     get
     push -1
     get
     sub
part "__memory_manager_potential_before_total"
     copy 1
     call "memory_manager_potential_after"
     add
     away 1
     back
# def memory_manager_compress(index):
#     if index == 0:
#         return HEAP[-1]
#     return memory_manager_get_cell(index - 1)[1] + 1
part "memory_manager_compress"
     copy
     zero "__memory_manager_compress_start"
     push 1
     sub
     call "memory_manager_get_cell"
     away 1
     push 1
     add
     back
part "__memory_manager_compress_start"
     away
     push -1
     get
     back
# compare_cells(addr_a, addr_b):
#    b = HEAP[addr_b]
#    a = HEAP[addr_a]
#    if b == a:
#        return 0
#    if b < a:
#        return 1
#    return -1 
part "compare_cells"
     get
     swap
     get
     sub
     copy
     zero "__compare_cells_equal"
     less "__compare_cells_greater"
     push -1
     back
part "__compare_cells_greater"
     push 1
     back
part "__compare_cells_equal"
     push 0
     away 1
     back
# def compare_memory(a, b, length):
#     if length < 0:
#         raise Exception(120)
#     if length == 0:
#         return 0
#     if a == b:
#         return 0
#     offset = 0
#     while offset < length:
#         addr_a = a + offset
#         addr_b = b + offset
#         value = compare_cells(addr_a, addr_b)
#         if value == 0:
#             offset += 1
#         elif value < 0:
#             return -1
#         else:
#             return 1
#     return 0
part "compare_memory"
     copy
     less "__compare_memory_negative_length"
     copy
     zero "__compare_memory_equal_buffers"
     copy 2
     copy 2
     sub
     zero "__compare_memory_equal_buffers"
     push 0
part "__compare_memory_loop_test"
     copy
     copy 2
     sub
     less "__compare_memory_loop_body"
     away
part "__compare_memory_equal_buffers"
     push 0
     away 3
     back
part "__compare_memory_negative_length"
     push 120
     call "raise"
part "__compare_memory_loop_body"
     copy 3
     copy 1
     add
     copy 3
     copy 2
     add
     call "compare_cells"
     copy
     zero "__compare_memory_inc_offset"
     less "__compare_memory_less_than"
     push 1
     away 4
     back
part "__compare_memory_less_than"
     push -1
     away 4
     back
part "__compare_memory_inc_offset"
     away
     push 1
     add
     goto "__compare_memory_loop_test"
# def direction(number):
#     if number:
#         if number > 0:
#             return 1
#         return -1
#     return number
part "direction"
     copy
     zero "__direction_zero"
     less "__direction_negative"
     push 1
     back
part "__direction_negative"
     push -1
part "__direction_zero"
     back
# def range(address, start, stop, step):
#     if direction(stop - start) != direction(step):
#         raise Exception(129)
#     value = start
#     while (value > stop) if direction(step) < 0 else (value < stop):
#         offset = (value - start) // step
#         HEAP[offset + address] = value
#         value += step
part "range"
     copy 1
     copy 3
     sub
     call "direction"
     copy 1
     call "direction"
     sub
     zero "__range_loop_setup"
     push 129
     call "raise"
part "__range_loop_setup"
     copy 2
part "__range_loop_test"
     copy
     copy 3
     copy 3
     call "direction"
     less "__range_switch_compare"
part "__range_do_compare"
     sub
     less "__range_loop_body"
     away 4
     away
     back
part "__range_switch_compare"
     swap
     goto "__range_do_compare"
part "__range_loop_body"
     copy
     copy 4
     sub
     copy 2
     div
     copy 5
     add
     copy 1
     set
     copy 1
     add
     goto "__range_loop_test"
# def memory_manager_size(pointer):
#     index = memory_manager_search(pointer)
#     if index < 0:
#         raise Exception(137)
#     a, b = memory_manager_get_cell(index)
#     return b - a + 1
part "memory_manager_size"
     call "memory_manager_search"
     copy
     less "__memory_manager_size_not_found"
     call "memory_manager_get_cell"
     swap
     sub
     push 1
     add
     back
part "__memory_manager_size_not_found"
     push 137
     call "raise"
     back
# def mark(pointer):
#     size = memory_manager_size(pointer)
#     range(pointer, 1, size + 1, 1)
part "mark"
     push 1
     copy 1
     call "memory_manager_size"
     push 1
     add
     push 1
     call "range"
     back
# def memory_manager_inflate_before(pointer, cells, index):
#     from_start, from_end = memory_manager_get_cell(index)
#     to_start = memory_manager_compress(index)
#     to_end = to_start + from_end - from_start
#     copy(from_start, from_end, to_start, to_end)
#     to_end = to_start + cells - 1
#     memory_manager_set_cell(to_start, to_end, index)
#     return to_start
part "memory_manager_inflate_before"
     copy
     call "memory_manager_get_cell"
     copy 2
     call "memory_manager_compress"
     copy
     copy 2
     copy 4
     sub
     add
     push 0
     copy 2
     set
     call "copy"
     push 0
     get
     copy
     copy
     copy 4
     add
     push 1
     sub
     copy 3
     call "memory_manager_set_cell"
     away 3
     back
# def rotate_3_down():
#     HEAP[0] = stack.pop()
#     stack[-1], stack[-2] = stack[-2], stack[-1]
#     stack.push(HEAP[0])
#     stack[-1], stack[-2] = stack[-2], stack[-1]
part "rotate_3_down"
     push 0
     swap
     set
     swap
     push 0
     get
     swap
     back
# def rotate_3_up():
#     stack[-1], stack[-2] = stack[-2], stack[-1]
#     HEAP[0] = stack.pop()
#     stack[-1], stack[-2] = stack[-2], stack[-1]
#     stack.push(HEAP[0])
part "rotate_3_up"
     swap
     push 0
     swap
     set
     swap
     push 0
     get
     back
# def memory_manager_inflate_move(pointer, cells, index):
#     from_start, from_end = memory_manager_get_cell(index)
#     new = malloc(cells)
#     to_start = new
#     to_end = new + from_end - from_start
#     copy(from_start, from_end, to_start, to_end)
#     free(pointer)
#     return new
part "memory_manager_inflate_move"
     call "memory_manager_get_cell"
     call "rotate_3_down"
     call "malloc"
     call "rotate_3_up"
     copy 2
     copy
     copy 2
     add
     copy 3
     sub
     call "copy"
     swap
     call "free"
     back
# def memory_manager_inflate_block(pointer, cells, index):
#     if index == HEAP[-2] - 1:
#         memory_manager_inflate_cell(cells, index)
#         return pointer
#     potential = memory_manager_potential_after(index)
#     if potential < cells:
#         potential = memory_manager_potential_before(index)
#         if potential < cells:
#             return memory_manager_inflate_move(pointer, cells, index)
#         return memory_manager_inflate_before(pointer, cells, index)
#     memory_manager_inflate_cell(cells, index)
#     return pointer
part "memory_manager_inflate_block"
     copy
     push -2
     get
     push 1
     sub
     sub
     zero "__memory_manager_inflate_block_cell"
     copy
     call "memory_manager_potential_after"
     copy 2
     sub
     less "__memory_manager_inflate_block_not_after"
part "__memory_manager_inflate_block_cell"
     call "memory_manager_inflate_cell"
     back
part "__memory_manager_inflate_block_not_after"
     copy
     call "memory_manager_potential_before"
     copy 2
     sub
     less "__memory_manager_inflate_block_not_before"
     call "memory_manager_inflate_before"
     back
part "__memory_manager_inflate_block_not_before"
     call "memory_manager_inflate_move"
     back
# def realloc(pointer, cells):
#     if cells <= 0:
#         free(pointer)
#         return 0
#     index = memory_manager_search(pointer)
#     if index == -1:
#         raise Exception(101)
#     size = memory_manager_get_block_size(index)
#     if cells == size:
#         return pointer
#     if cells < size:
#         memory_manager_deflate_block(cells, index)
#         return pointer
#     return memory_manager_inflate_block(pointer, cells, index)
part "realloc"
     copy
     less "__realloc_free"
     copy
     zero "__realloc_free"
     copy 1
     call "memory_manager_search"
     copy
     push 1
     add
     zero "__realloc_not_found"
     copy
     call "memory_manager_get_block_size"
     copy 2
     swap
     sub
     copy
     zero "__realloc_return_pointer"
     less "__realloc_return_deflate"
     call "memory_manager_inflate_block"
     back
part "__realloc_free"
     away
     call "free"
     push 0
     back
part "__realloc_not_found"
     push 101
     call "raise"
part "__realloc_return_pointer"
     away 2
     away
     back
part "__realloc_return_deflate"
     call "memory_manager_deflate_block"
     back
# def memory_manager_blocks():
#     return HEAP[-2]
part "memory_manager_blocks"
     push -2
     get
     back
# def memory_manager_cells():
#     blocks = HEAP[-2]
#     index = 0
#     total = 0
#     while index < blocks:
#         addr = (index + 2) * -2
#         end = HEAP[addr]
#         start = HEAP[addr + 1]
#         size = end - start + 1
#         total += size
#         index += 1
#     return total
part "memory_manager_cells"
     push -2
     get
     push 0
     push 0
part "__memory_manager_cells_loop_test"
     copy 1
     copy 3
     sub
     less "__memory_manager_cells_loop_body"
     away 2
     back
part "__memory_manager_cells_loop_body"
     copy 1
     push 2
     add
     push -2
     mul
     copy
     get
     swap
     push 1
     add
     get
     sub
     push 1
     add
     add
     swap
     push 1
     add
     swap
     goto "__memory_manager_cells_loop_test"
# def memory_manager_pointers(include_self):
#     bool = direction(include_self)
#     if bool < 0:
#         raise Exception(175)
#     pointer_count = HEAP[-2] + bool
#     array_length = pointer_count + 1
#     array = malloc(array_length)
#     HEAP[array] = pointer_count
#     mm_size = HEAP[-2]
#     array_address = array + 1
#     index = 0
#     while index < mm_size:
#         mm_addr = -2 * index - 3
#         pointer = HEAP[mm_addr]
#         if pointer != array or bool:
#             HEAP[array_address] = pointer
#             array_address += 1
#         index += 1
#     return array
part "memory_manager_pointers"
     call "direction"
     copy
     less "__memory_manager_pointers_bad_bool"
     copy
     push -2
     get
     add
     copy
     push 1
     add
     call "malloc"
     swap
     copy 1
     swap
     set
     push -2
     get
     copy 1
     push 1
     add
     push 0
part "__memory_manager_pointers_loop_test"
     copy
     copy 3
     sub
     less "__memory_manager_pointers_loop_body"
     away
     away
     away
     away 1
     back
part "__memory_manager_pointers_bad_bool"
     push 175
     call "raise"
part "__memory_manager_pointers_loop_body"
     copy
     push -2
     mul
     push 3
     sub
     get
     copy
     copy 5
     sub
     zero "__memory_manager_pointers_check_bool"
part "__memory_manager_pointers_add_pointer"
     copy 2
     swap
     set
     swap
     push 1
     add
     swap
part "__memory_manager_pointers_inc_index"
     push 1
     add
     goto "__memory_manager_pointers_loop_test"
part "__memory_manager_pointers_check_bool"
     copy 5
     zero "__memory_manager_pointers_away_inc_index"
     goto "__memory_manager_pointers_add_pointer"
part "__memory_manager_pointers_away_inc_index"
     away
     goto "__memory_manager_pointers_inc_index"
# def memory_manager_find(address):
#     size = HEAP[-2]
#     if not size:
#         return 0
#     last = size - 1
#     first = 0
#     while first <= last:
#         index = (last + first) // 2
#         addr = -2 * index - 4
#         b = HEAP[addr]
#         a = HEAP[addr + 1]
#         if a <= address <= b:
#             return a
#         if a < address:
#             first = index + 1
#         else:
#             last = index - 1
#     return 0
part "memory_manager_find"
     push -2
     get
     copy
     zero "__memory_manager_find_null"
     push 1
     sub
     push 0
part "__memory_manager_find_loop_test"
     copy
     copy 2
     sub
     copy
     less "__memory_manager_find_loop_body_away"
     zero "__memory_manager_find_loop_body"
     away
part "__memory_manager_find_null"
     push 0
     away 2
     back
part "__memory_manager_find_loop_body_away"
     away
part "__memory_manager_find_loop_body"
     copy 1
     copy 1
     add
     push 2
     div
     copy
     push -2
     mul
     push 4
     sub
     copy
     get
     swap
     push 1
     add
     get
     copy
     copy 6
     sub
     copy
     less "__memory_manager_find_check_b_away"
     zero "__memory_manager_find_check_b"
     away 1
part "__memory_manager_find_divide"
     copy 4
     sub
     less "__memory_manager_find_upper"
     push 1
     sub
     push 0
     swap
     set
     away 1
     push 0
     get
     swap
     goto "__memory_manager_find_loop_test"
part "__memory_manager_find_upper"
     away 1
     push 1
     add
     goto "__memory_manager_find_loop_test"
part "__memory_manager_find_check_b_away"
     away
part "__memory_manager_find_check_b"
     swap
     copy 5
     swap
     sub
     copy
     less "__memory_manager_find_return_away"
     zero "__memory_manager_find_return"
     goto "__memory_manager_find_divide"
part "__memory_manager_find_return_away"
     away
part "__memory_manager_find_return"
     away 4
     back
# def uint_cast(number):
#     return number % 4294967296
part "uint_cast"
     push 4294967296
     mod
     back
# def left_shift(number, shift):
#     if not shift:
#         return number
#     if shift < 0:
#         return right_shift(number, -shift)
#     while shift:
#         number *= 2
#         shift -= 1
#     return number
part "left_shift"
     copy
     zero "__left_shift_return"
     copy
     less "__left_shift_reverse"
part "__left_shift_loop"
     copy
     zero "__left_shift_return"
     swap
     push 2
     mul
     swap
     push 1
     sub
     goto "__left_shift_loop"
part "__left_shift_return"
     away
     back
part "__left_shift_reverse"
     push 0
     swap
     sub
     call "right_shift"
     back
# def right_shift(number, shift):
#     if not shift:
#         return number
#     if shift < 0:
#         return left_shift(number, -shift)
#     while shift:
#         number //= 2
#         shift -= 1
#     return number
part "right_shift"
     copy
     zero "__right_shift_return"
     copy
     less "__right_shift_reverse"
part "__right_shift_loop"
     copy
     zero "__right_shift_return"
     swap
     push 2
     div
     swap
     push 1
     sub
     goto "__right_shift_loop"
part "__right_shift_return"
     away
     back
part "__right_shift_reverse"
     push 0
     swap
     sub
     call "left_shift"
     back
# def save_stack(size):
#     if size < 1:
#         raise Exception(219)
#     array = malloc(size + 1)
#     array[0] = size
#     temp = malloc(3)
#     temp[0] = array          // array
#     temp[1] = size           // size
#     temp[2] = 1              // offset
#     while temp[2] <= temp[1]:
#         temp[0][temp[2]] = stack.pop()
#         temp[2] += 1
#     array = temp[0]
#     free(temp)
#     return array
part "save_stack"
     copy
     push 1
     sub
     less "__save_stack_bad_size"
     copy
     push 1
     add
     call "malloc"
     copy
     copy 2
     set
     push 3
     call "malloc"
     swap
     copy 1
     swap
     set
     swap
     copy 1
     push 1
     add
     swap
     set
     copy
     push 2
     add
     push 1
     set
part "__save_stack_loop_test"
     copy
     push 2
     add
     get
     copy 1
     push 1
     add
     get
     sub
     copy
     less "__save_stack_loop_body_away"
     zero "__save_stack_loop_body"
     copy
     get
     swap
     call "free"
     back
part "__save_stack_bad_size"
     push 219
     call "raise"
part "__save_stack_loop_body_away"
     away
part "__save_stack_loop_body"
     copy
     get
     copy 1
     push 2
     add
     get
     add
     call "rotate_3_down"
     set
     copy
     push 2
     add
     copy
     get
     push 1
     add
     set
     goto "__save_stack_loop_test"
# def load_stack(array, size):
#     if size < 1:
#         raise Exception(220)
#     array_size = array[0]
#     if array_size < 1:
#         raise Exception(221)
#     if array_size < size:
#         raise Exception(222)
#     addr = array + array size
#     temp = malloc(3)
#     temp[0] = addr
#     temp[1] = size
#     temp[2] = array
#     while temp[1] != 0:
#         addr = temp[0]
#         value = HEAP[addr]
#         stack.push(value)
#         temp[0] -= 1
#         temp[1] -= 1
#     array = temp[2]
#     diff = array - temp[0]
#     if diff < 0:
#         array[0] = -diff
#     else:
#         free(array)
#     free(temp)
part "load_stack"
     copy
     push 1
     sub
     less "__load_stack_bad_size"
     copy 1
     get
     copy
     push 1
     sub
     less "__load_stack_bad_array"
     copy
     copy 2
     sub
     less "__load_stack_size_greater_than_array"
     copy 2
     add
     push 3
     call "malloc"
     swap
     copy 1
     swap
     set
     swap
     copy 1
     push 1
     add
     swap
     set
     swap
     copy 1
     push 2
     add
     swap
     set
part "__load_stack_loop_test"
     copy
     push 1
     add
     get
     zero "__load_stack_end_loop"
     copy
     get
     get
     swap
     copy
     copy
     get
     push 1
     sub
     set
     copy
     push 1
     add
     copy
     get
     push 1
     sub
     set
     goto "__load_stack_loop_test"
part "__load_stack_bad_size"
     push 220
     call "raise"
part "__load_stack_bad_array"
     push 221
     call "raise"
part "__load_stack_size_greater_than_array"
     push 222
     call "raise"
part "__load_stack_end_loop"
     copy
     push 2
     add
     get
     copy
     copy 2
     get
     sub
     copy
     less "__load_stack_set_length"
     away
     call "free"
     call "free"
     back
part "__load_stack_set_length"
     push -1
     mul
     set
     call "free"
     back
# def divmod(a, b):
#     x = a // b
#     y = a % b
#     return x, y
part "divmod"
     copy 1
     copy 1
     div
     call "rotate_3_up"
     mod
     back
# def sum_length_array(array):
#     index = 1
#     total = 0
#     while index <= array[0]:
#         total += array[index]
#         index += 1
#     return total
part "sum_length_array"
     push 1
     push 0
part "__sum_length_array_loop_test"
     copy 1
     copy 3
     get
     sub
     copy
     less "__sum_length_array_loop_body_away"
     zero "__sum_length_array_loop_body"
     away 2
     back
part "__sum_length_array_loop_body_away"
     away
part "__sum_length_array_loop_body"
     copy 2
     copy 2
     add
     get
     add
     swap
     push 1
     add
     swap
     goto "__sum_length_array_loop_test"
# def value_to_array(value, base):
#     if base < 2:
#         raise Exception(216)
#     size = 8 + 1
#     array = malloc(size)
#     offset = 1
#     while value:
#         if offset == size:
#             size = size * 2 - 1
#             array = realloc(array, size)
#         value, digit = divmod(value, base)
#         array[offset] = digit
#         offset += 1
#     if size != offset:
#         array = realloc(array, offset)
#     array[0] = offset - 1
#     return array
part "value_to_array"
     copy
     push 2
     sub
     less "__value_to_array_bad_base"
     swap
     push 8
     push 1
     add
     swap
     copy 1
     call "malloc"
     swap
     push 1
     swap
part "__value_to_array_loop_test"
     copy
     zero "__value_to_array_loop_end"
     copy 1
     copy 4
     sub
     zero "__value_to_array_adjust_array_size"
part "__value_to_array_get_digit"
     copy 4
     call "divmod"
     copy 3
     copy 3
     add
     swap
     set
     swap
     push 1
     add
     swap
     goto "__value_to_array_loop_test"
part "__value_to_array_bad_base"
     push 216
     call "raise"
part "__value_to_array_loop_end"
     copy 3
     copy 2
     sub
     zero "__value_to_array_skip_resize"
     call "rotate_3_down"
     copy 2
     call "realloc"
     call "rotate_3_up"
part "__value_to_array_skip_resize"
     away
     copy 1
     copy 1
     push 1
     sub
     set
     away
     away 2
     back
part "__value_to_array_adjust_array_size"
     push 3
     call "save_stack"
     swap
     push 2
     mul
     push 1
     sub
     swap
     copy
     push 1
     call "load_stack"
     copy 2
     call "realloc"
     swap
     push 2
     call "load_stack"
     goto "__value_to_array_get_digit"
# def array_to_value(array, base):
#     if base < 2:
#         raise Exception(217)
#     if array[0] == 0:
#         return 0
#     addr = array + array[0]
#     value = 0
#     while addr != array:
#         value *= base
#         tentative = HEAP[addr]
#         if tentative < base:
#             value += tentative
#             addr -= 1
#         else:
#             raise Exception(218)
#     return value
part "array_to_value"
     copy
     push 2
     sub
     less "__array_to_value_bad_base"
     copy 1
     get
     zero "__array_to_value_return_zero"
     copy 1
     copy
     get
     add
     push 0
part "__array_to_value_loop_test"
     copy 3
     copy 2
     sub
     zero "__array_to_value_return"
     copy 2
     mul
     copy 1
     get
     copy
     copy 4
     sub
     less "__array_to_value_loop_continue"
     push 218
     call "raise"
part "__array_to_value_loop_continue"
     add
     swap
     push 1
     sub
     swap
     goto "__array_to_value_loop_test"
part "__array_to_value_bad_base"
     push 217
     call "raise"
part "__array_to_value_return_zero"
     push 0
     away 2
     back
part "__array_to_value_return"
     away 3
     back
# def uint_bits(number):
#     integer = uint_cast(number)
#     array = value_to_array(integer, 2)
#     size = array[0]
#     bits = malloc(32)
#     clear(bits, bits + 31)
#     if size != 0:
#         from_start = array + 1
#         from_end = array + size
#         to_start = bits
#         to_end = bits + size - 1
#         copy(from_start, from_end, to_start, to_end)
#     free(array)
#     return bits
part "uint_bits"
     call "uint_cast"
     push 2
     call "value_to_array"
     copy
     get
     push 32
     call "malloc"
     copy
     copy
     push 31
     add
     call "clear"
     copy 1
     zero "__uint_bits_skip_copy"
     copy 2
     push 1
     add
     copy 3
     copy 3
     add
     copy 2
     copy
     copy 5
     add
     push 1
     sub
     call "copy"
part "__uint_bits_skip_copy"
     away 1
     swap
     call "free"
     back
# def uint_xor(a, b):
#     b = uint_bits(b)
#     a = uint_bits(a)
#     xor = malloc(33)
#     xor[0] = 32
#     offset = 0
#     while offset < 32:
#         b_bit = b[offset]
#         a_bit = a[offset]
#         offset += 1
#         if b_bit != a_bit:
#             xor[offset] = True
#         else:
#             xor[offset] = False
#     free(a)
#     free(b)
#     value = array_to_value(xor, 2)
#     free(xor)
#     return value
part "uint_xor"
     call "uint_bits"
     swap
     call "uint_bits"
     push 33
     call "malloc"
     copy
     push 32
     set
     push 0
part "__uint_xor_loop_test"
     copy
     push 32
     sub
     less "__uint_xor_loop_body"
     away
     call "rotate_3_up"
     call "free"
     call "free"
     copy
     push 2
     call "array_to_value"
     swap
     call "free"
     back
part "__uint_xor_loop_body"
     copy 3
     copy 1
     add
     get
     copy 3
     copy 2
     add
     get
     sub
     swap
     push 1
     add
     swap
     zero "__uint_xor_bit_is_false"
     copy 1
     copy 1
     add
     push 1
     set
     goto "__uint_xor_loop_test"
part "__uint_xor_bit_is_false"
     copy 1
     copy 1
     add
     push 0
     set
     goto "__uint_xor_loop_test"
# def memory_manager_hash():
#     length = HEAP[-2]
#     if length == 0:
#         return 0
#     length *= 2
#     hash = uint_cast(left_shift(HEAP[-3], 7))
#     offset = 0
#     while offset < length:
#         hash = uint_cast(hash * 1000003)
#         hash = uint_xor(hash, HEAP[-3 - offset])
#         offset += 1
#     return uint_xor(hash, HEAP[-2])
part "memory_manager_hash"
     push -2
     get
     copy
     zero "__memory_manager_hash_return"
     push 2
     mul
     push -3
     get
     push 7
     call "left_shift"
     call "uint_cast"
     push 0
part "__memory_manager_hash_loop_test"
     copy
     copy 3
     sub
     less "__memory_manager_hash_loop_body"
     away
     away 1
     push -2
     get
     call "uint_xor"
part "__memory_manager_hash_return"
     back
part "__memory_manager_hash_loop_body"
     swap
     push 1000003
     mul
     call "uint_cast"
     push -3
     copy 2
     sub
     get
     call "uint_xor"
     swap
     push 1
     add
     goto "__memory_manager_hash_loop_test"

################################################################################

# def test_abs_diff():
#     if abs_diff(2, 1) != 1:
#         raise Exception(2)
#     if abs_diff(1, 2) != 1:
#         raise Exception(3)
part "test_abs_diff"
     push 1
     push 2
     push 1
     call "abs_diff"
     sub
     zero "__test_abs_diff_okay"
     push 2
     call "raise"
part "__test_abs_diff_okay"
     push 1
     push 1
     push 2
     call "abs_diff"
     sub
     zero "__test_abs_diff_return"
     push 3
     call "raise"
part "__test_abs_diff_return"
     back
# get test_get_addr():
#     if get_addr(1, 1, 4) != 2:
#         raise Exception(4)
#     if get_addr(2, 1, 4) != 3:
#         raise Exception(4)
#     if get_addr(1, 4, 1) != 3:
#         raise Exception(4)
#     if get_addr(2, 4, 1) != 2:
#         raise Exception(4)
part "test_get_addr"
     push 2
     push 1
     push 1
     push 4
     call "get_addr"
     sub
     zero "__test_get_addr_2"
     push 4
     call "raise"
part "__test_get_addr_2"
     push 3
     push 2
     push 1
     push 4
     call "get_addr"
     sub
     zero "__test_get_addr_3"
     push 5
     call "raise"
part "__test_get_addr_3"
     push 3
     push 1
     push 4
     push 1
     call "get_addr"
     sub
     zero "__test_get_addr_4"
     push 6
     call "raise"
part "__test_get_addr_4"
     push 2
     push 2
     push 4
     push 1
     call "get_addr"
     sub
     zero "__test_get_addr_return"
     push 7
     call "raise"
part "__test_get_addr_return"
     back
# def test_clear():
#     heap[1] = 1
#     heap[2] = 2
#     clear(1, 2)
#     if heap[1]:
#         raise Exception(8)
#     if heap[2]:
#         raise Exception(9)
#     heap[1] = 1
#     heap[2] = 2
#     clear(2, 1)
#     if heap[1]:
#         raise Exception(10)
#     if heap[2]:
#         raise Exception(11)
part "test_clear"
     push 1
     push 1
     set
     push 2
     push 2
     set
     push 1
     push 2
     call "clear"
     push 1
     get
     zero "__test_clear_2"
     push 8
     call "raise"
part "__test_clear_2"
     push 2
     get
     zero "__test_clear_3"
     push 9
     call "raise"
part "__test_clear_3"
     push 1
     push 1
     set
     push 2
     push 2
     set
     push 2
     push 1
     call "clear"
     push 1
     get
     zero "__test_clear_4"
     push 10
     call "raise"
part "__test_clear_4"
     push 2
     get
     zero "__test_clear_return"
     push 11
     call "raise"
part "__test_clear_return"
     back
# def test_copy():
#     heap[1] = 1
#     heap[2] = 2
#     copy(1, 2, 3, 4)
#     if heap[3] != 1:
#         raise Exception(12)
#     if heap[4] != 2:
#         raise Exception(13)
#     copy(1, 2, 4, 3)
#     if heap[3] != 2:
#         raise Exception(14)
#     if heap[4] != 1:
#         raise Exception(15)
#     copy(2, 1, 4, 3)
#     if heap[3] != 1:
#         raise Exception(16)
#     if heap[4] != 2:
#         raise Exception(17)
#     copy(2, 1, 3, 4)
#     if heap[3] != 2:
#         raise Exception(18)
#     if heap[4] != 1:
#         raise Exception(19)
#     clear(1, 4)
part "test_copy"
     push 1
     push 1
     set
     push 2
     push 2
     set
     push 1
     push 2
     push 3
     push 4
     call "copy"
     push 1
     push 3
     get
     sub
     zero "__test_copy_2"
     push 12
     call "raise"
part "__test_copy_2"
     push 2
     push 4
     get
     sub
     zero "__test_copy_3"
     push 13
     call "raise"
part "__test_copy_3"
     push 1
     push 2
     push 4
     push 3
     call "copy"
     push 2
     push 3
     get
     sub
     zero "__test_copy_4"
     push 14
     call "raise"
part "__test_copy_4"
     push 1
     push 4
     get
     sub
     zero "__test_copy_5"
     push 15
     call "raise"
part "__test_copy_5"
     push 2
     push 1
     push 4
     push 3
     call "copy"
     push 1
     push 3
     get
     sub
     zero "__test_copy_6"
     push 16
     call "raise"
part "__test_copy_6"
     push 2
     push 4
     get
     sub
     zero "__test_copy_7"
     push 17
     call "raise"
part "__test_copy_7"
     push 2
     push 1
     push 3
     push 4
     call "copy"
     push 2
     push 3
     get
     sub
     zero "__test_copy_8"
     push 18
     call "raise"
part "__test_copy_8"
     push 1
     push 4
     get
     sub
     zero "__test_copy_return"
     push 19
     call "raise"
part "__test_copy_return"
     push 1
     push 4
     call "clear"
     back
# def test_memory_manager_append_cell():
#     if heap[-2]:
#         raise Exception(20)
#     memory_manager_append_cell(100, 200)
#     if heap[-2] != 1:
#         raise Exception(21)
#     if heap[-3] != 100:
#         raise Exception(22)
#     if heap[-4] != 200:
#         raise Exception(23)
#     memory_manager_append_cell(300, 400)
#     if heap[-2] != 2:
#         raise Exception(24)
#     if heap[-5] != 300:
#         raise Exception(25)
#     if heap[-6] != 400:
#         raise Exception(26)
#     clear(-2, -6)
part "test_memory_manager_append_cell"
     push -2
     get
     zero "__test_memory_manager_append_cell_2"
     push 20
     call "raise"
part "__test_memory_manager_append_cell_2"
     push 100
     push 200
     call "memory_manager_append_cell"
     push 1
     push -2
     get
     sub
     zero "__test_memory_manager_append_cell_3"
     push 21
     call "raise"
part "__test_memory_manager_append_cell_3"
     push 100
     push -3
     get
     sub
     zero "__test_memory_manager_append_cell_4"
     push 22
     call "raise"
part "__test_memory_manager_append_cell_4"
     push 200
     push -4
     get
     sub
     zero "__test_memory_manager_append_cell_5"
     push 23
     call "raise"
part "__test_memory_manager_append_cell_5"
     push 300
     push 400
     call "memory_manager_append_cell"
     push 2
     push -2
     get
     sub
     zero "__test_memory_manager_append_cell_6"
     push 24
     call "raise"
part "__test_memory_manager_append_cell_6"
     push 300
     push -5
     get
     sub
     zero "__test_memory_manager_append_cell_7"
     push 25
     call "raise"
part "__test_memory_manager_append_cell_7"
     push 400
     push -6
     get
     sub
     zero "__test_memory_manager_append_cell_return"
     push 26
     call "raise"
part "__test_memory_manager_append_cell_return"
     push -2
     push -6
     call "clear"
     back
# def test_memory_manager_get_cell():
#     memory_manager_append_cell(80, 90)
#     memory_manager_append_cell(100, 110)
#     d, c = memory_manager_get_cell(1)
#     b, a = memory_manager_get_cell(0)
#     if a != 80:
#         raise Exception(28)
#     if b != 90:
#         raise Exception(29)
#     if c != 100:
#         raise Exception(30)
#     if d != 110:
#         raise Exception(31)
#     clear(-2, -6)
part "test_memory_manager_get_cell"
     push 100
     push 110
     push 80
     push 90
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     push 1
     call "memory_manager_get_cell"
     swap
     push 0
     call "memory_manager_get_cell"
     swap
     push 80
     sub
     zero "__test_memory_manager_get_cell_2"
     push 28
     call "raise"
part "__test_memory_manager_get_cell_2"
     push 90
     sub
     zero "__test_memory_manager_get_cell_3"
     push 29
     call "raise"
part "__test_memory_manager_get_cell_3"
     push 100
     sub
     zero "__test_memory_manager_get_cell_4"
     push 30
     call "raise"
part "__test_memory_manager_get_cell_4"
     push 110
     sub
     zero "__test_memory_manager_get_cell_return"
     push 31
     call "raise"
part "__test_memory_manager_get_cell_return"
     push -2
     push -6
     call "clear"
     back
# def test_memory_manager_insert_cell():
#     memory_manager_insert_cell(11, 20, 0)
#     memory_manager_insert_cell(31, 40, 1)
#     memory_manager_insert_cell(21, 30, 1)
#     memory_manager_insert_cell(1, 10, 0)
#     h, g = memory_manger_get_cell(0)
#     f, e = memory_manger_get_cell(1)
#     c, d = memory_manger_get_cell(2)
#     b, a = memory_manger_get_cell(3)
#     if a != 40:
#         raise Exception(33)
#     if a != 31:
#         raise Exception(34)
#     if a != 30:
#         raise Exception(35)
#     if a != 21:
#         raise Exception(36)
#     if a != 20:
#         raise Exception(37)
#     if a != 11:
#         raise Exception(38)
#     if a != 10:
#         raise Exception(39)
#     if a != 1:
#         raise Exception(40)
#     clear(-2, -10)
part "test_memory_manager_insert_cell"
     push 11
     push 20
     push 0
     call "memory_manager_insert_cell"
     push 31
     push 40
     push 1
     call "memory_manager_insert_cell"
     push 21
     push 30
     push 1
     call "memory_manager_insert_cell"
     push 1
     push 10
     push 0
     call "memory_manager_insert_cell"
     push 0
     call "memory_manager_get_cell"
     push 1
     call "memory_manager_get_cell"
     push 2
     call "memory_manager_get_cell"
     push 3
     call "memory_manager_get_cell"
     push 40
     sub
     zero "__test_memory_manager_insert_cell_2"
     push 33
     call "raise"
part "__test_memory_manager_insert_cell_2"
     push 31
     sub
     zero "__test_memory_manager_insert_cell_3"
     push 34
     call "raise"
part "__test_memory_manager_insert_cell_3"
     push 30
     sub
     zero "__test_memory_manager_insert_cell_4"
     push 35
     call "raise"
part "__test_memory_manager_insert_cell_4"
     push 21
     sub
     zero "__test_memory_manager_insert_cell_5"
     push 36
     call "raise"
part "__test_memory_manager_insert_cell_5"
     push 20
     sub
     zero "__test_memory_manager_insert_cell_6"
     push 37
     call "raise"
part "__test_memory_manager_insert_cell_6"
     push 11
     sub
     zero "__test_memory_manager_insert_cell_7"
     push 38
     call "raise"
part "__test_memory_manager_insert_cell_7"
     push 10
     sub
     zero "__test_memory_manager_insert_cell_8"
     push 39
     call "raise"
part "__test_memory_manager_insert_cell_8"
     push 1
     sub
     zero "__test_memory_manager_insert_cell_return"
     push 40
     call "raise"
part "__test_memory_manager_insert_cell_return"
     push -2
     push -10
     call "clear"
     back
# def test_malloc_check_beginning():
#     HEAP[-1] = 1
#     memory_manager_append_cell(11, 20)
#     if malloc_check_beginning(11):
#         raise Exception(42)
#     if malloc_check_beginning(10) != 1:
#         raise Exception(43)
#     d, c = memory_manager_get_cell(0)
#     b, a = memory_manager_get_cell(1)
#     if a != 20:
#         raise Exception(44)
#     if a != 11:
#         raise Exception(45)
#     if a != 10:
#         raise Exception(46)
#     if a != 1:
#         raise Exception(47)
#     clear(-1, -6)
part "test_malloc_check_beginning"
     push -1
     push 1
     set
     push 11
     push 20
     call "memory_manager_append_cell"
     push 11
     call "malloc_check_beginning"
     zero "__test_malloc_check_beginning_2"
     push 42
     call "raise"
part "__test_malloc_check_beginning_2"
     push 10
     call "malloc_check_beginning"
     push 1
     sub
     zero "__test_malloc_check_beginning_3"
     push 43
     call "raise"
part "__test_malloc_check_beginning_3"
     push 0
     call "memory_manager_get_cell"
     push 1
     call "memory_manager_get_cell"
     push 20
     sub
     zero "__test_malloc_check_beginning_4"
     push 44
     call "raise"
part "__test_malloc_check_beginning_4"
     push 11
     sub
     zero "__test_malloc_check_beginning_5"
     push 45
     call "raise"
part "__test_malloc_check_beginning_5"
     push 10
     sub
     zero "__test_malloc_check_beginning_6"
     push 46
     call "raise"
part "__test_malloc_check_beginning_6"
     push 1
     sub
     zero "__test_malloc_check_beginning_return"
     push 47
     call "raise"
part "__test_malloc_check_beginning_return"
     push -1
     push -6
     call "clear"
     back
# def test_malloc_check_ranges():
#     if malloc_check_ranges(10) != -1:
#         raise Exception(48)
#     memory_manager_append_cell(11, 20)
#     if malloc_check_ranges(10) != -1:
#         raise Exception(49)
#     memory_manager_append_cell(31, 40)
#     if malloc_check_ranges(20) != -1:
#         raise Exception(50)
#     if malloc_check_ranges(5) != 1:
#         raise Exception(51)
#     if malloc_check_ranges(5) != 2:
#         raise Exception(52)
#     d, c = memory_manager_get_cell(1)
#     b, a = memory_manager_get_cell(2)
#     if a != 30:
#         raise Exception(53)
#     if b != 26:
#         raise Exception(54)
#     if c != 25:
#         raise Exception(55)
#     if d != 21:
#         raise Exception(56)
#     clear(-2, -10)
part "test_malloc_check_ranges"
     push 10
     call "malloc_check_ranges"
     push 1
     add
     zero "__test_malloc_check_ranges_2"
     push 48
     call "raise"
part "__test_malloc_check_ranges_2"
     push 11
     push 20
     call "memory_manager_append_cell"
     push 10
     call "malloc_check_ranges"
     push 1
     add
     zero "__test_malloc_check_ranges_3"
     push 49
     call "raise"
part "__test_malloc_check_ranges_3"
     push 31
     push 40
     call "memory_manager_append_cell"
     push 20
     call "malloc_check_ranges"
     push 1
     add
     zero "__test_malloc_check_ranges_4"
     push 50
     call "raise"
part "__test_malloc_check_ranges_4"
     push 5
     call "malloc_check_ranges"
     push 1
     sub
     zero "__test_malloc_check_ranges_5"
     push 51
     call "raise"
part "__test_malloc_check_ranges_5"
     push 5
     call "malloc_check_ranges"
     push 2
     sub
     zero "__test_malloc_check_ranges_6"
     push 52
     call "raise"
part "__test_malloc_check_ranges_6"
     push 1
     call "memory_manager_get_cell"
     push 2
     call "memory_manager_get_cell"
     push 30
     sub
     zero "__test_malloc_check_ranges_7"
     push 53
     call "raise"
part "__test_malloc_check_ranges_7"
     push 26
     sub
     zero "__test_malloc_check_ranges_8"
     push 54
     call "raise"
part "__test_malloc_check_ranges_8"
     push 25
     sub
     zero "__test_malloc_check_ranges_9"
     push 55
     call "raise"
part "__test_malloc_check_ranges_9"
     push 21
     sub
     zero "__test_malloc_check_ranges_return"
     push 56
     call "raise"
part "__test_malloc_check_ranges_return"
     push -2
     push -10
     call "clear"
     back
# def test_malloc_ranges():
#     HEAP[-1] = 1
#     memory_manager_append_cell(11, 20)
#     memory_manager_append_cell(31, 40)
#     if malloc_ranges(10) != 1:
#         raise Exception(57)
#     if malloc_ranges(10) != 21:
#         raise Exception(58)
#     if malloc_ranges(10) != 41:
#         raise Exception(59)
#     f, e = memory_manager_get_cell(0)
#     d, c = memory_manager_get_cell(2)
#     b, a = memory_manager_get_cell(4)
#     if a != 50:
#         raise Exception(60)
#     if b != 41:
#         raise Exception(61)
#     if c != 30:
#         raise Exception(62)
#     if d != 21:
#         raise Exception(63)
#     if e != 10:
#         raise Exception(64)
#     if f != 1:
#         raise Exception(65)
#     clear(-1, -12)
part "test_malloc_ranges"
     push 31
     push 40
     push 11
     push 20
     push -1
     push 1
     set
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     push 10
     call "malloc_ranges"
     push 1
     sub
     zero "__test_malloc_ranges_2"
     push 57
     call "raise"
part "__test_malloc_ranges_2"
     push 10
     call "malloc_ranges"
     push 21
     sub
     zero "__test_malloc_ranges_3"
     push 58
     call "raise"
part "__test_malloc_ranges_3"
     push 10
     call "malloc_ranges"
     push 41
     sub
     zero "__test_malloc_ranges_4"
     push 59
     call "raise"
part "__test_malloc_ranges_4"
     push 0
     call "memory_manager_get_cell"
     push 2
     call "memory_manager_get_cell"
     push 4
     call "memory_manager_get_cell"
     push 50
     sub
     zero "__test_malloc_ranges_5"
     push 60
     call "raise"
part "__test_malloc_ranges_5"
     push 41
     sub
     zero "__test_malloc_ranges_6"
     push 61
     call "raise"
part "__test_malloc_ranges_6"
     push 30
     sub
     zero "__test_malloc_ranges_7"
     push 62
     call "raise"
part "__test_malloc_ranges_7"
     push 21
     sub
     zero "__test_malloc_ranges_8"
     push 63
     call "raise"
part "__test_malloc_ranges_8"
     push 10
     sub
     zero "__test_malloc_ranges_9"
     push 64
     call "raise"
part "__test_malloc_ranges_9"
     push 1
     sub
     zero "__test_malloc_ranges_return"
     push 65
     call "raise"
part "__test_malloc_ranges_return"
     push -1
     push -12
     call "clear"
     back
# def test_malloc():
#     HEAP[-1] = 1
#     if malloc(1) != 1:
#         raise Exception(66)
#     if malloc(2) != 2:
#         raise Exception(67)
#     if malloc(3) != 4:
#         raise Exception(68)
#     if malloc(4) != 7:
#         raise Exception(69)
#     if HEAP[-2] != 4:
#         raise Exception(70)
#     if HEAP[-10] != 10:
#         raise Exception(71)
#     clear(-1, -10)
part "test_malloc"
     push -1
     push 1
     set
     push 1
     call "malloc"
     push 1
     sub
     zero "__test_malloc_2"
     push 66
     call "raise"
part "__test_malloc_2"
     push 2
     call "malloc"
     push 2
     sub
     zero "__test_malloc_3"
     push 67
     call "raise"
part "__test_malloc_3"
     push 3
     call "malloc"
     push 4
     sub
     zero "__test_malloc_4"
     push 68
     call "raise"
part "__test_malloc_4"
     push 4
     call "malloc"
     push 7
     sub
     zero "__test_malloc_5"
     push 69
     call "raise"
part "__test_malloc_5"
     push -2
     get
     push 4
     sub
     zero "__test_malloc_6"
     push 70
     call "raise"
part "__test_malloc_6"
     push -10
     copy
     get
     add
     zero "__test_malloc_return"
     push 71
     call "raise"
part "__test_malloc_return"
     push -1
     push -10
     call "clear"
     back
# def test_calloc():
#     HEAP[-1] = 1
#     if calloc(10, 10) != 1:
#         raise Exception(72)
#     if HEAP[-4] != 100:
#         raise Exception(73)
#     clear(-1, -4)
part "test_calloc"
     push -1
     push 1
     set
     push 10
     copy
     call "calloc"
     push 1
     sub
     zero "__test_calloc_2"
     push 72
     call "raise"
part "__test_calloc_2"
     push 100
     push -4
     get
     sub
     zero "__test_calloc_return"
     push 73
     call "raise"
part "__test_calloc_return"
     push -1
     push -4
     call "clear"
     back
# def test_memory_manager_search():
#     if memory_manager_search(1) != -1:
#         raise Exception(74)
#     memory_manager_append_cell(1, 10)
#     memory_manager_append_cell(11, 20)
#     memory_manager_append_cell(21, 30)
#     memory_manager_append_cell(31, 40)
#     memory_manager_append_cell(41, 50)
#     memory_manager_append_cell(51, 60)
#     memory_manager_append_cell(61, 70)
#     if memory_manager_search(1) != 0:
#         raise Exception(75)
#     if memory_manager_search(31) != 3:
#         raise Exception(76)
#     if memory_manager_search(61) != 6:
#         raise Exception(77)
#     if memory_manager_search(0) != -1:
#         raise Exception(78)
#     if memory_manager_search(62) != -1:
#         raise Exception(79)
#     clear(-2, -16)
part "test_memory_manager_search"
     push 1
     copy
     call "memory_manager_search"
     add
     zero "__test_memory_manager_search_2"
     push 74
     call "raise"
part "__test_memory_manager_search_2"
     push 61
     push 70
     push 51
     push 60
     push 41
     push 50
     push 31
     push 40
     push 21
     push 30
     push 11
     push 20
     push 1
     push 10
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     push 1
     call "memory_manager_search"
     zero "__test_memory_manager_search_3"
     push 75
     call "raise"
part "__test_memory_manager_search_3"
     push 31
     call "memory_manager_search"
     push 3
     sub
     zero "__test_memory_manager_search_4"
     push 76
     call "raise"
part "__test_memory_manager_search_4"
     push 61
     call "memory_manager_search"
     push 6
     sub
     zero "__test_memory_manager_search_5"
     push 77
     call "raise"
part "__test_memory_manager_search_5"
     push 0
     call "memory_manager_search"
     push 1
     add
     zero "__test_memory_manager_search_6"
     push 78
     call "raise"
part "__test_memory_manager_search_6"
     push 62
     call "memory_manager_search"
     push 1
     add
     zero "__test_memory_manager_search_return"
     push 79
     call "raise"
part "__test_memory_manager_search_return"
     push -2
     push -16
     call "clear"
     back
# def test_memory_manager_pop_cell():
#     memory_manager_append_cell(11, 20)
#     memory_manager_append_cell(21, 30)
#     memory_manager_append_cell(31, 40)
#     memory_manager_append_cell(41, 50)
#     h, g = memory_manager_pop_cell(-1)
#     f, e = memory_manager_pop_cell(0)
#     d, c = memory_manager_pop_cell(1)
#     b, a = memory_manager_pop_cell(0)
#     if a != 30:
#         raise Exception(84)
#     if b != 21:
#         raise Exception(85)
#     if c != 40:
#         raise Exception(86)
#     if d != 31:
#         raise Exception(87)
#     if e != 20:
#         raise Exception(88)
#     if f != 11:
#         raise Exception(89)
#     if g != 50:
#         raise Exception(90)
#     if h != 41:
#         raise Exception(91)
part "test_memory_manager_pop_cell"
     push 41
     push 50
     push 31
     push 40
     push 21
     push 30
     push 11
     push 20
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     push -1
     call "memory_manager_pop_cell"
     push 0
     call "memory_manager_pop_cell"
     push 1
     call "memory_manager_pop_cell"
     push 0
     call "memory_manager_pop_cell"
     push 30
     sub
     zero "__test_memory_manager_pop_cell_2"
     push 84
     call "raise"
part "__test_memory_manager_pop_cell_2"
     push 21
     sub
     zero "__test_memory_manager_pop_cell_3"
     push 85
     call "raise"
part "__test_memory_manager_pop_cell_3"
     push 40
     sub
     zero "__test_memory_manager_pop_cell_4"
     push 86
     call "raise"
part "__test_memory_manager_pop_cell_4"
     push 31
     sub
     zero "__test_memory_manager_pop_cell_5"
     push 87
     call "raise"
part "__test_memory_manager_pop_cell_5"
     push 20
     sub
     zero "__test_memory_manager_pop_cell_6"
     push 88
     call "raise"
part "__test_memory_manager_pop_cell_6"
     push 11
     sub
     zero "__test_memory_manager_pop_cell_7"
     push 89
     call "raise"
part "__test_memory_manager_pop_cell_7"
     push 50
     sub
     zero "__test_memory_manager_pop_cell_8"
     push 90
     call "raise"
part "__test_memory_manager_pop_cell_8"
     push 41
     sub
     zero "__test_memory_manager_pop_cell_return"
     push 91
     call "raise"
part "__test_memory_manager_pop_cell_return"
     back
# def test_free():
#     HEAP[-1] = 1
#     a = malloc(100)
#     b = malloc(100)
#     free(a)
#     c = malloc(50)
#     d = malloc(50)
#     e = malloc(50)
#     free(d)
#     f = malloc(25)
#     g = malloc(25)
#     h = malloc(25)
#     free(b)
#     i = malloc(25)
#     j = malloc(100)
#     if memory_manager_get_cell(0)[0] != 1:
#         raise Exception(92)
#     if memory_manager_get_cell(1)[0] != 51:
#         raise Exception(93)
#     if memory_manager_get_cell(2)[0] != 76:
#         raise Exception(94)
#     if memory_manager_get_cell(3)[0] != 101:
#         raise Exception(95)
#     if memory_manager_get_cell(4)[0] != 201:
#         raise Exception(96)
#     if memory_manager_get_cell(5)[0] != 251:
#         raise Exception(97)
#     if memory_manager_get_cell(6)[0] != 276:
#         raise Exception(98)
#     if memory_manager_get_cell(6)[1] != 375:
#         raise Exception(99)
#     free(j)
#     free(i)
#     free(h)
#     free(g)
#     free(f)
#     free(e)
#     free(c)
#     if HEAP[-2] != 0:
#         raise Exception(100)
#     clear(-1, 0)
part "test_free"
     push -1
     push 1
     set
     push 100
     call "malloc"
     push 100
     call "malloc"
     swap
     call "free"
     push 50
     call "malloc"
     push 50
     call "malloc"
     push 50
     call "malloc"
     swap
     call "free"
     push 25
     call "malloc"
     push 25
     call "malloc"
     push 25
     call "malloc"
     copy 5
     call "free"
     push 25
     call "malloc"
     push 100
     call "malloc"
     push 0
     call "memory_manager_get_cell"
     away
     push 1
     sub
     zero "__test_free_2"
     push 92
     call "raise"
part "__test_free_2"
     push 1
     call "memory_manager_get_cell"
     away
     push 51
     sub
     zero "__test_free_3"
     push 93
     call "raise"
part "__test_free_3"
     push 2
     call "memory_manager_get_cell"
     away
     push 76
     sub
     zero "__test_free_4"
     push 94
     call "raise"
part "__test_free_4"
     push 3
     call "memory_manager_get_cell"
     away
     push 101
     sub
     zero "__test_free_5"
     push 95
     call "raise"
part "__test_free_5"
     push 4
     call "memory_manager_get_cell"
     away
     push 201
     sub
     zero "__test_free_6"
     push 96
     call "raise"
part "__test_free_6"
     push 5
     call "memory_manager_get_cell"
     away
     push 251
     sub
     zero "__test_free_7"
     push 97
     call "raise"
part "__test_free_7"
     push 6
     call "memory_manager_get_cell"
     away
     push 276
     sub
     zero "__test_free_8"
     push 98
     call "raise"
part "__test_free_8"
     push 6
     call "memory_manager_get_cell"
     away 1
     push 375
     sub
     zero "__test_free_9"
     push 99
     call "raise"
part "__test_free_9"
     call "free"
     call "free"
     call "free"
     call "free"
     call "free"
     call "free"
     call "free"
     away
     push -2
     get
     zero "__test_free_return"
     push 100
     call "raise"
part "__test_free_return"
     push -1
     push 0
     call "clear"
     back
# def test_memory_manager_get_block_size():
#     HEAP[-1] = 1
#     a = malloc(123)
#     if memory_manager_get_block_size(0) != 123:
#         raise Exception(102)
#     free(a)
#     clear(-1, 0)
part "test_memory_manager_get_block_size"
     push -1
     push 1
     set
     push 123
     call "malloc"
     push 0
     call "memory_manager_get_block_size"
     push 123
     sub
     zero "__test_memory_manager_get_block_size_return"
     push 102
     call "raise"
part "__test_memory_manager_get_block_size_return"
     call "free"
     push -1
     push 0
     call "clear"
     back
# def test_memory_manager_set_cell():
#     memory_manager_append_cell(1, 10)
#     memory_manager_set_cell(11, 20, 0)
#     b, a = memory_manager_get_cell(0)
#     if a != 20:
#         raise Exception(106)
#     if b != 11:
#         raise Exception(107)
#     clear(-2, -4)
part "test_memory_manager_set_cell"
     push 0
     push 11
     push 20
     push 0
     push 1
     push 10
     call "memory_manager_append_cell"
     call "memory_manager_set_cell"
     call "memory_manager_get_cell"
     push 20
     sub
     zero "__test_memory_manager_set_cell_2"
     push 106
     call "raise"
part "__test_memory_manager_set_cell_2"
     push 11
     sub
     zero "__test_memory_manager_set_cell_return"
     push 107
     call "raise"
part "__test_memory_manager_set_cell_return"
     push -2
     push -4
     call "clear"
     back
# def test_memory_manager_deflate_block():
#     memory_manager_append_cell(1, 100)
#     memory_manager_deflate_block(50, 0)
#     if memory_manager_get_block_size(0) != 50:
#         raise Exception(108)
#     clear(-2, -4)
part "test_memory_manager_deflate_block"
     push 1
     push 100
     call "memory_manager_append_cell"
     push 50
     push 0
     call "memory_manager_deflate_block"
     push 0
     call "memory_manager_get_block_size"
     push 50
     sub
     zero "__test_memory_manager_deflate_block_return"
     push 108
     call "raise"
part "__test_memory_manager_deflate_block_return"
     push -2
     push -4
     call "clear"
     back
# def test_memory_manager_inflate_cell():
#     memory_manager_append_cell(1, 50)
#     memory_manager_inflate_cell(100, 0)
#     if memory_manager_get_block_size(0) != 100:
#         raise Exception(110)
#     clear(-2, -4)
part "test_memory_manager_inflate_cell"
     push 1
     push 50
     call "memory_manager_append_cell"
     push 100
     push 0
     call "memory_manager_inflate_cell"
     push 0
     call "memory_manager_get_block_size"
     push 100
     sub
     zero "__test_memory_manager_inflate_cell_return"
     push 110
     call "raise"
part "__test_memory_manager_inflate_cell_return"
     push -2
     push -4
     call "clear"
     back
# def test_memory_manager_potential_after():
#     memory_manager_append_cell(101, 200)
#     memory_manager_append_cell(251, 300)
#     if memory_manager_potential_after(0) != 150:
#         raise Exception(111)
#     clear(-2, -6)
part "test_memory_manager_potential_after"
     push -2
     push -6
     push 150
     push 0
     push 251
     push 300
     push 101
     push 200
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_potential_after"
     sub
     zero "__test_memory_manager_potential_after_return"
     push 111
     call "raise"
part "__test_memory_manager_potential_after_return"
     call "clear"
     back
# def test_memory_manager_potential_before():
#     HEAP[-1] = 51
#     memory_manager_append_cell(101, 250)
#     memory_manager_append_cell(301, 325)
#     memory_manager_append_cell(351, 400)
#     if memory_manager_potential_before(0) != 250:
#         raise Exception(112)
#     if memory_manager_potentail_before(1) != 100:
#         raise Exception(113)
#     clear(-1, -8)
part "test_memory_manager_potential_before"
     push -1
     push -8
     push 100
     push 1
     push 250
     push 0
     push 351
     push 400
     push 301
     push 325
     push 101
     push 250
     push -1
     push 51
     set
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_potential_before"
     sub
     zero "__test_memory_manager_potential_before_2"
     push 112
     call "raise"
part "__test_memory_manager_potential_before_2"
     call "memory_manager_potential_before"
     sub
     zero "__test_memory_manager_potential_before_return"
     push 113
     call "raise"
part "__test_memory_manager_potential_before_return"
     call "clear"
     back
# def test_memory_manager_compress():
#     HEAP[-1] = 101
#     memory_manager_append_cell(201, 300)
#     memory_manager_append_cell(401, 500)
#     if memory_manager_compress(0) != 101:
#         raise Exception(114)
#     if memory_manager_compress(1) != 301:
#         raise Exception(115)
#     clear(-1, -6)
part "test_memory_manager_compress"
     push -1
     push -6
     push 301
     push 1
     push 101
     push 0
     push 401
     push 500
     push 201
     push 300
     push -1
     push 101
     set
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_compress"
     sub
     zero "__test_memory_manager_compress_2"
     push 114
     call "raise"
part "__test_memory_manager_compress_2"
     call "memory_manager_compress"
     sub
     zero "__test_memory_manager_compress_return"
     push 115
     call "raise"
part "__test_memory_manager_compress_return"
     call "clear"
     back
# def test_compare_cells():
#     HEAP[1] = 1
#     HEAP[2] = 1
#     if compare_cells(1, 2) != 0:
#         raise Exception(121)
#     HEAP[1] = 2
#     if compare_cells(1, 2) != 1:
#         raise Exception(122)
#     if compare_cells(2, 1) != -1:
#         raise Exception(123)
#     clear(1, 2)
part "test_compare_cells"
     push 1
     push 2
     push -1
     push 2
     push 1
     push 1
     push 1
     push 2
     push 1
     push 2
     push 1
     push 2
     push 2
     push 1
     push 1
     push 1
     set
     set
     call "compare_cells"
     zero "__test_compare_cells_2"
     push 121
     call "raise"
part "__test_compare_cells_2"
     set
     call "compare_cells"
     sub
     zero "__test_compare_cells_3"
     push 122
     call "raise"
part "__test_compare_cells_3"
     call "compare_cells"
     sub
     zero "__test_compare_cells_return"
     push 123
     call "raise"
part "__test_compare_cells_return"
     call "clear"
     back
# def test_compare_memory():
#     if compare_memory(0, 1, 0) != 0:
#         raise Exception(124)
#     if compare_memory(1, 1, 1) != 0:
#         raise Exception(125)
#     HEAP[1] = 100
#     HEAP[2] = 200
#     HEAP[3] = 100
#     HEAP[4] = 200
#     if compare_memory(1, 3, 2) != 0:
#         raise Exception(126)
#     HEAP[2] = 300
#     if compare_memory(1, 3, 2) != 1:
#         raise Exception(127)
#     HEAP[4] = 400
#     if compare_memory(1, 3, 2) != -1:
#         raise Exception(128)
#     clear(1, 4)
part "test_compare_memory"
     push 1
     push 4
     push -1
     push 1
     push 3
     push 2
     push 4
     push 400
     push 1
     push 1
     push 3
     push 2
     push 2
     push 300
     push 1
     push 3
     push 2
     push 4
     push 200
     push 3
     push 100
     push 2
     push 200
     push 1
     push 100
     push 1
     push 1
     push 1
     push 0
     push 1
     push 0
     call "compare_memory"
     zero "__test_compare_memory_2"
     push 124
     call "raise"
part "__test_compare_memory_2"
     call "compare_memory"
     zero "__test_compare_memory_3"
     push 125
     call "raise"
part "__test_compare_memory_3"
     set
     set
     set
     set
     call "compare_memory"
     zero "__test_compare_memory_4"
     push 126
     call "raise"
part "__test_compare_memory_4"
     set
     call "compare_memory"
     sub
     zero "__test_compare_memory_5"
     push 127
     call "raise"
part "__test_compare_memory_5"
     set
     call "compare_memory"
     sub
     zero "__test_compare_memory_return"
     push 128
     call "raise"
part "__test_compare_memory_return"
     call "clear"
     back
# test_direction():
#     if direction(-100) != -1:
#         raise Exception(130)
#     if direction(0) != 0:
#         raise Exception(131)
#     if direction(100) != 1:
#         raise Exception(132)
part "test_direction"
     push 1
     push 100
     push 0
     push -1
     push -100
     call "direction"
     sub
     zero "__test_direction_2"
     push 130
     call "raise"
part "__test_direction_2"
     call "direction"
     zero "__test_direction_3"
     push 131
     call "raise"
part "__test_direction_3"
     call "direction"
     sub
     zero "__test_direction_return"
     push 132
     call "raise"
part "__test_direction_return"
     back
# def test_range():
#     range(1, 1, 4, 1)
#     HEAP[4] = 1
#     HEAP[5] = 2
#     HEAP[6] = 3
#     if compare_memory(1, 4, 3) != 0:
#         raise Exception(133)
#     range(1, 0, -3, -1)
#     HEAP[4] = 0
#     HEAP[5] = -1
#     HEAP[6] = -2
#     if compare_memory(1, 4, 3) != 0:
#         raise Exception(134)
#     range(1, 0, 6, 2)
#     HEAP[5] = 2
#     HEAP[6] = 4
#     if compare_memory(1, 4, 3) != 0:
#         raise Exception(135)
#     range(1, 8, 3, -2)
#     HEAP[4] = 8
#     HEAP[5] = 6
#     if compare_memory(1, 4, 3) != 0:
#         raise Exception(136)
#     clear(1, 6)
part "test_range"
     push 1
     push 6
     push 1
     push 4
     push 3
     push 5
     push 6
     push 4
     push 8
     push 1
     push 8
     push 3
     push -2
     push 1
     push 4
     push 3
     push 6
     push 4
     push 5
     push 2
     push 1
     push 0
     push 6
     push 2
     push 1
     push 4
     push 3
     push 6
     push -2
     push 5
     push -1
     push 4
     push 0
     push 1
     push 0
     push -3
     push -1
     push 1
     push 4
     push 3
     push 6
     push 3
     push 5
     push 2
     push 4
     push 1
     push 1
     push 1
     push 4
     push 1
     call "range"
     set
     set
     set
     call "compare_memory"
     zero "__test_range_2"
     push 133
     call "raise"
part "__test_range_2"
     call "range"
     set
     set
     set
     call "compare_memory"
     zero "__test_range_3"
     push 134
     call "raise"
part "__test_range_3"
     call "range"
     set
     set
     call "compare_memory"
     zero "__test_range_4"
     push 135
     call "raise"
part "__test_range_4"
     call "range"
     set
     set
     call "compare_memory"
     zero "__test_range_return"
     push 136
     call "raise"
part "__test_range_return"
     call "clear"
     back
# def test_memory_manager_size():
#     HEAP[-1] = 1
#     a = malloc(123)
#     b = malloc(456)
#     c = malloc(789)
#     if memory_manager_size(a) != 123:
#         raise Exception(138)
#     if memory_manager_size(b) != 456:
#         raise Exception(139)
#     if memory_manager_size(c) != 789:
#         raise Exception(140)
#     free(c)
#     free(b)
#     free(a)
#     clear(-1, 0)
part "test_memory_manager_size"
     push -1
     push 1
     set
     push 123
     call "malloc"
     push 456
     call "malloc"
     push 789
     call "malloc"
     copy 2
     call "memory_manager_size"
     push 123
     sub
     zero "__test_memory_manager_size_2"
     push 138
     call "raise"
part "__test_memory_manager_size_2"
     copy 1
     call "memory_manager_size"
     push 456
     sub
     zero "__test_memory_manager_size_3"
     push 139
     call "raise"
part "__test_memory_manager_size_3"
     copy
     call "memory_manager_size"
     push 789
     sub
     zero "__test_memory_manager_size_return"
     push 140
     call "raise"
part "__test_memory_manager_size_return"
     call "free"
     call "free"
     call "free"
     push -1
     push 0
     call "clear"
     back
# def test_mark():
#     HEAP[-1] = 1
#     a = malloc(1500)
#     mark(a)
#     range(3001, 1, 1501, 1)
#     if compare_memory(a, 3001, 3000) != 0:
#         raise Exception(141)
#     free(a)
#     clear(-1, 4500)
part "test_mark"
     push -1
     push 1
     set
     push 1500
     call "malloc"
     copy
     call "mark"
     push 3001
     push 1
     push 1501
     push 1
     call "range"
     copy
     push 3001
     push 3000
     call "compare_memory"
     zero "__test_mark_return"
     push 141
     call "raise"
part "__test_mark_return"
     call "free"
     push -1
     push 4500
     call "clear"
     back
# def test_memory_manager_inflate_before():
#     HEAP[-1] = 101
#     a = malloc(10)
#     b = malloc(10)
#     c = malloc(10)
#     d = malloc(10)
#     if HEAP[-2] != 4:
#         raise Exception(116)
#     mark(d)
#     mark(c)
#     mark(b)
#     free(a)
#     b = memory_manager_inflate_before(b, 15, 0)
#     c = memory_manager_inflate_before(c, 15, 1)
#     if HEAP[-2] != 3:
#         raise Exception(117)
#     e = malloc(40)
#     range(e, 1, 11, 1)
#     range(e + 10, 1, 6, 1)
#     range(e + 15, 1, 6, 1)
#     range(e + 20, 6, 11, 1)
#     range(e + 25, 6, 11, 1)
#     range(e + 30, 1, 11, 1)
#     if compare_memory(b, e, 40) != 0:
#         raise Exception(118)
#     free(e)
#     free(c)
#     free(b)
#     free(d)
#     if HEAP[-2] != 0:
#         raise Exception(119)
#     HEAP[-1] = 0
#     HEAP[0] = 0
#     clear(101, 180)
part "test_memory_manager_inflate_before"
     push -1
     push 101
     set
     push 10
     call "malloc"
     push 10
     call "malloc"
     push 10
     call "malloc"
     push 10
     call "malloc"
     push 4
     push -2
     get
     sub
     zero "__test_memory_manager_inflate_before_2"
     push 116
     call "raise"
part "__test_memory_manager_inflate_before_2"
     copy 3
     copy 3
     copy 3
     copy 3
     call "mark"
     call "mark"
     call "mark"
     call "free"
     copy 2
     push 15
     push 0
     call "memory_manager_inflate_before"
     copy 2
     push 15
     push 1
     call "memory_manager_inflate_before"
     push 3
     push -2
     get
     sub
     zero "__test_memory_manager_inflate_before_3"
     push 117
     call "raise"
part "__test_memory_manager_inflate_before_3"
     push 40
     call "malloc"
     copy
     push 1
     push 11
     push 1
     call "range"
     copy
     push 10
     add
     push 1
     push 6
     push 1
     call "range"
     copy
     push 15
     add
     push 1
     push 6
     push 1
     call "range"
     copy
     push 20
     add
     push 6
     push 11
     push 1
     call "range"
     copy
     push 25
     add
     push 6
     push 11
     push 1
     call "range"
     copy
     push 30
     add
     push 1
     push 11
     push 1
     call "range"
     copy 2
     copy 1
     push 40
     call "compare_memory"
     zero "__test_memory_manager_inflate_before_4"
     push 118
     call "raise"
part "__test_memory_manager_inflate_before_4"
     call "free"
     call "free"
     call "free"
     call "free"
     push -2
     away 3
     get
     zero "__test_memory_manager_inflate_before_return"
     push 119
     call "raise"
part "__test_memory_manager_inflate_before_return"
     push 101
     push 180
     push 0
     push 0
     push -1
     push 0
     set
     set
     call "clear"
     back
# def test_rotate_3_down():
#     stack.extend((1, 2, 3))
#     rotate_3_down()
#     if stack.pop() != 1:
#         raise Exception(147)
#     if stack.pop() != 3:
#         raise Exception(148)
#     if stack.pop() != 2:
#         raise Exception(149)
#     HEAP[0] = 0
part "test_rotate_3_down"
     push 1
     push 2
     push 3
     call "rotate_3_down"
     push 1
     sub
     zero "__test_rotate_3_down_2"
     push 147
     call "raise"
part "__test_rotate_3_down_2"
     push 3
     sub
     zero "__test_rotate_3_down_3"
     push 148
     call "raise"
part "__test_rotate_3_down_3"
     push 2
     sub
     zero "__test_rotate_3_down_return"
     push 149
     call "raise"
part "__test_rotate_3_down_return"
     push 0
     push 0
     set
     back
# def test_rotate_3_up():
#     stack.extend((1, 2, 3))
#     rotate_3_down()
#     if stack.pop() != 2:
#         raise Exception(150)
#     if stack.pop() != 1:
#         raise Exception(151)
#     if stack.pop() != 3:
#         raise Exception(152)
#     HEAP[0] = 0
part "test_rotate_3_up"
     push 1
     push 2
     push 3
     call "rotate_3_up"
     push 2
     sub
     zero "__test_rotate_3_up_2"
     push 150
     call "raise"
part "__test_rotate_3_up_2"
     push 1
     sub
     zero "__test_rotate_3_up_3"
     push 151
     call "raise"
part "__test_rotate_3_up_3"
     push 3
     sub
     zero "__test_rotate_3_up_return"
     push 152
     call "raise"
part "__test_rotate_3_up_return"
     push 0
     push 0
     set
     back
# def test_memory_manager_inflate_move():
#     HEAP[-1] = 1
#     a = malloc(10)
#     b = malloc(25)
#     c = malloc(10)
#     d = malloc(5)
#     e = malloc(10)
#     f = malloc(5)
#     g = malloc(10)
#     free(b)
#     free(d)
#     free(f)
#     mark(e)
#     h = memory_manager_inflate_move(e, 25, 2)
#     if compare_memory(1, e - 10, 50) != 0:
#         raise Exception(142)
#     i = malloc(5)
#     free(g)
#     j = malloc(25)
#     if memory_manager_size(h) != 25:
#         raise Exception(143)
#     if memory_manager_size(j) != 25:
#         raise Exception(144)
#     if compare_memory(h, j, 25) != 0:
#         raise Exception(145)
#     if j != e:
#         raise Exception(146)
#     free(j)
#     free(i)
#     free(h)
#     free(c)
#     free(a)
#     clear(-1, 0)
#     clear(11, 20)
#     clear(51, 60)
part "test_memory_manager_inflate_move"
     push -1
     push 1
     set
     push 10
     call "malloc"
     push 25
     call "malloc"
     push 10
     call "malloc"
     push 5
     call "malloc"
     push 10
     call "malloc"
     push 5
     call "malloc"
     push 10
     call "malloc"
     copy 2
     copy 2
     copy 5
     copy 8
     call "free"
     call "free"
     call "free"
     call "mark"
     copy 2
     push 25
     push 2
     call "memory_manager_inflate_move"
     push 1
     copy 4
     push 10
     sub
     push 50
     call "compare_memory"
     zero "__test_memory_manager_inflate_move_2"
     push 142
     call "raise"
part "__test_memory_manager_inflate_move_2"
     push 5
     call "malloc"
     copy 2
     call "free"
     push 25
     call "malloc"
     copy 2
     call "memory_manager_size"
     push 25
     sub
     zero "__test_memory_manager_inflate_move_3"
     push 143
     call "raise"
part "__test_memory_manager_inflate_move_3"
     copy
     call "memory_manager_size"
     push 25
     sub
     zero "__test_memory_manager_inflate_move_4"
     push 144
     call "raise"
part "__test_memory_manager_inflate_move_4"
     copy 2
     copy 1
     push 25
     call "compare_memory"
     zero "__test_memory_manager_inflate_move_5"
     push 145
     call "raise"
part "__test_memory_manager_inflate_move_5"
     copy
     copy 6
     sub
     zero "__test_memory_manager_inflate_move_return"
     push 146
     call "raise"
part "__test_memory_manager_inflate_move_return"
     call "free"
     call "free"
     away 4
     call "free"
     call "free"
     away
     call "free"
     push -1
     push 0
     call "clear"
     push 11
     push 20
     call "clear"
     push 51
     push 60
     call "clear"
     back
# def test_memory_manager_inflate_block():
#     HEAP[-1] = 1
#     a = malloc(10)
#     b = memory_manager_inflate_block(a, 20, 0)
#     if a != b:
#         raise Exception(153)
#     if memory_manager_size(a) != 20:
#         raise Exception(154)
#     c = malloc(10)
#     d = malloc(10)
#     free(c)
#     e = memory_manager_inflate_block(a, 30, 0)
#     if a != e:
#         raise Exception(155)
#     if memory_manager_size(a) != 30:
#         raise Exception(156)
#     f = malloc(10)
#     free(a)
#     mark(d)
#     g = memory_manager_inflate_block(d, 40, 0)
#     if a != g:
#         raise Exception(157)
#     if memory_manager_size(a) != 40:
#         raise Exception(158)
#     if compare_memory(1, 31, 10) != 0:
#         raise Exception(159)
#     h = memory_manager_inflate_block(a, 50, 0)
#     if h != f + memory_manager_size(f):
#         raise Exception(160)
#     if compare_memory(1, 51, 50) != 0:
#         raise Exception(161)
#     free(h)
#     free(f)
#     clear(-1, 90)
part "test_memory_manager_inflate_block"
     push -1
     push 1
     set
     push 10
     call "malloc"
     copy
     push 20
     push 0
     call "memory_manager_inflate_block"
     copy 1
     sub
     zero "__test_memory_manager_inflate_block_2"
     push 153
     call "raise"
     back
part "__test_memory_manager_inflate_block_2"
     copy
     call "memory_manager_size"
     push 20
     sub
     zero "__test_memory_manager_inflate_block_3"
     push 154
     call "raise"
part "__test_memory_manager_inflate_block_3"
     push 10
     call "malloc"
     push 10
     call "malloc"
     swap
     call "free"
     copy 1
     push 30
     push 0
     call "memory_manager_inflate_block"
     copy 2
     sub
     zero "__test_memory_manager_inflate_block_4"
     push 155
     call "raise"
part "__test_memory_manager_inflate_block_4"
     copy 1
     call "memory_manager_size"
     push 30
     sub
     zero "__test_memory_manager_inflate_block_5"
     push 156
     call "raise"
part "__test_memory_manager_inflate_block_5"
     push 10
     call "malloc"
     copy 2
     call "free"
     copy 1
     copy
     call "mark"
     push 40
     push 0
     call "memory_manager_inflate_block"
     copy 3
     sub
     zero "__test_memory_manager_inflate_block_6"
     push 157
     call "raise"
part "__test_memory_manager_inflate_block_6"
     copy 2
     call "memory_manager_size"
     push 40
     sub
     zero "__test_memory_manager_inflate_block_7"
     push 158
     call "raise"
part "__test_memory_manager_inflate_block_7"
     push 1
     push 31
     push 10
     call "compare_memory"
     zero "__test_memory_manager_inflate_block_8"
     push 159
     call "raise"
part "__test_memory_manager_inflate_block_8"
     copy 2
     push 50
     push 0
     call "memory_manager_inflate_block"
     copy
     copy 2
     copy
     call "memory_manager_size"
     add
     sub
     zero "__test_memory_manager_inflate_block_9"
     push 160
     call "raise"
part "__test_memory_manager_inflate_block_9"
     push 1
     push 51
     push 50
     call "compare_memory"
     zero "__test_memory_manager_inflate_block_return"
     push 161
     call "raise"
part "__test_memory_manager_inflate_block_return"
     call "free"
     away 2
     call "free"
     push -1
     push 90
     call "clear"
     back
# def test_realloc():
#     HEAP[-1] = 1
#     a = malloc(3)
#     if realloc(a, 0) != 0:
#         raise Exception(162)
#     a = malloc(3)
#     if realloc(a, -1) != 0:
#         raise Exception(163)
#     a = malloc(3)
#     if realloc(a, 3) != a:
#         raise Exception(164)
#     if memory_manager_size(a) != 3:
#         raise Exception(165)
#     if realloc(a, 2) != a:
#         raise Exception(166)
#     if memory_manager_size(a) != 2:
#         raise Exception(167)
#     b = malloc(3)
#     if realloc(a, 3) != 6:
#         raise Exception(168)
#     if memory_manager_size(6) != 3:
#         raise Exception(169)
#     free(b)
#     free(6)
#     clear(-1, 0)
part "test_realloc"
     push -1
     push 1
     set
     push 3
     call "malloc"
     push 0
     call "realloc"
     zero "__test_realloc_2"
     push 162
     call "raise"
part "__test_realloc_2"
     push 3
     call "malloc"
     push -1
     call "realloc"
     zero "__test_realloc_3"
     push 163
     call "raise"
part "__test_realloc_3"
     push 3
     call "malloc"
     copy
     copy
     copy
     push 3
     call "realloc"
     sub
     zero "__test_realloc_4"
     push 164
     call "raise"
part "__test_realloc_4"
     call "memory_manager_size"
     push 3
     sub
     zero "__test_realloc_5"
     push 165
     call "raise"
part "__test_realloc_5"
     copy
     copy
     copy
     push 2
     call "realloc"
     sub
     zero "__test_realloc_6"
     push 166
     call "raise"
part "__test_realloc_6"
     call "memory_manager_size"
     push 2
     sub
     zero "__test_realloc_7"
     push 167
     call "raise"
part "__test_realloc_7"
     push 3
     call "malloc"
     swap
     push 3
     call "realloc"
     push 6
     sub
     zero "__test_realloc_8"
     push 168
     call "raise"
part "__test_realloc_8"
     push 3
     push 6
     call "memory_manager_size"
     sub
     zero "__test_realloc_return"
     push 169
     call "raise"
part "__test_realloc_return"
     call "free"
     push 6
     call "free"
     push -1
     push 0
     call "clear"
     back
# def test_memory_manager_blocks():
#     HEAP[-1] = 1
#     a = malloc(10)
#     b = malloc(10)
#     c = malloc(10)
#     if memory_manager_blocks() != 3:
#         raise Exception(170)
#     free(c)
#     free(b)
#     free(a)
#     if memory_manager_blocks() != 0:
#         raise Exception(171)
#     clear(-1, 0)
part "test_memory_manager_blocks"
     push -1
     push 1
     set
     push 10
     call "malloc"
     push 10
     call "malloc"
     push 10
     call "malloc"
     call "memory_manager_blocks"
     push 3
     sub
     zero "__test_memory_manager_blocks_2"
     push 170
     call "raise"
part "__test_memory_manager_blocks_2"
     call "free"
     call "free"
     call "free"
     call "memory_manager_blocks"
     zero "__test_memory_manager_blocks_return"
     push 171
     call "raise"
part "__test_memory_manager_blocks_return"
     push -1
     push 0
     call "clear"
     back
# def test_memory_manager_cells():
#     memory_manager_append_cell(11, 20)
#     memory_manager_append_cell(31, 40)
#     if memory_manager_cells() != 20:
#         raise Exception(172)
#     memory_manager_pop_cell(-1)
#     if memory_manager_cells() != 10:
#         raise Exception(173)
#     memory_manager_pop_cell(-1)
#     if memory_manager_cells() != 0:
#         raise Exception(174)
#     HEAP[0] = 0
part "test_memory_manager_cells"
     push 0
     push 0
     push -1
     push 10
     push -1
     push 20
     push 31
     push 40
     push 11
     push 20
     call "memory_manager_append_cell"
     call "memory_manager_append_cell"
     call "memory_manager_cells"
     sub
     zero "__test_memory_manager_cells_2"
     push 172
     call "raise"
part "__test_memory_manager_cells_2"
     call "memory_manager_pop_cell"
     away
     away
     call "memory_manager_cells"
     sub
     zero "__test_memory_manager_cells_3"
     push 173
     call "raise"
part "__test_memory_manager_cells_3"
     call "memory_manager_pop_cell"
     away
     away
     call "memory_manager_cells"
     zero "__test_memory_manager_cells_return"
     push 174
     call "raise"
part "__test_memory_manager_cells_return"
     set
     back
# def test_memory_manager_pointers():
#     HEAP[-1] = 1025
#     array = memory_manager_pointers(False)
#     if array[0] != 0:
#         raise Exception(176)
#     free(array)
#     array = memory_manager_pointers(True)
#     if array[0] != 1:
#         raise Exception(177)
#     if array[1] != array:
#         raise Exception(178)
#     test = memory_manager_pointers(False)
#     if compare_memory(array, test, 2) != 0:
#         raise Exception(179)
#     free(test)
#     test = memory_manager_pointers(True)
#     if test[0] != 2:
#         raise Exception(180)
#     if test[1] != array:
#         raise Exception(181)
#     if test[2] != test:
#         raise Exception(182)
#     free(test)
#     free(array)
#     clear(-1, 0)
#     clear(1025, 1029)
part "test_memory_manager_pointers"
     push -1
     push 1025
     set
     push 0
     call "memory_manager_pointers"
     copy
     get
     zero "__test_memory_manager_pointers_2"
     push 176
     call "raise"
part "__test_memory_manager_pointers_2"
     call "free"
     push 1
     call "memory_manager_pointers"
     copy
     get
     push 1
     sub
     zero "__test_memory_manager_pointers_3"
     push 177
     call "raise"
part "__test_memory_manager_pointers_3"
     copy
     copy
     push 1
     add
     get
     sub
     zero "__test_memory_manager_pointers_4"
     push 178
     call "raise"
part "__test_memory_manager_pointers_4"
     push 0
     call "memory_manager_pointers"
     copy 1
     copy 1
     push 2
     call "compare_memory"
     zero "__test_memory_manager_pointers_5"
     push 179
     call "raise"
part "__test_memory_manager_pointers_5"
     call "free"
     push 1
     call "memory_manager_pointers"
     copy
     get
     push 2
     sub
     zero "__test_memory_manager_pointers_6"
     push 180
     call "raise"
part "__test_memory_manager_pointers_6"
     copy 1
     copy 1
     push 1
     add
     get
     sub
     zero "__test_memory_manager_pointers_7"
     push 181
     call "raise"
part "__test_memory_manager_pointers_7"
     copy
     copy
     push 2
     add
     get
     sub
     zero "__test_memory_manager_pointers_return"
     push 182
     call "raise"
part "__test_memory_manager_pointers_return"
     call "free"
     call "free"
     push 1025
     push 1029
     push -1
     push 0
     call "clear"
     call "clear"
     back
# def test_memory_manager_find():
#     if memory_manager_find(1) != 0:
#         raise Exception(183)
#     memory_manager_append_cell(1, 10)
#     memory_manager_append_cell(21, 30)
#     memory_manager_append_cell(41, 50)
#     if memory_manager_find(0) != 0:
#         raise Exception(184)
#     if memory_manager_find(1) != 1:
#         raise Exception(185)
#     if memory_manager_find(5) != 1:
#         raise Exception(186)
#     if memory_manager_find(10) != 1:
#         raise Exception(187)
#     if memory_manager_find(11) != 0:
#         raise Exception(188)
#     if memory_manager_find(15) != 0:
#         raise Exception(189)
#     if memory_manager_find(20) != 0:
#         raise Exception(190)
#     if memory_manager_find(21) != 21:
#         raise Exception(191)
#     if memory_manager_find(25) != 21:
#         raise Exception(192)
#     if memory_manager_find(30) != 21:
#         raise Exception(193)
#     if memory_manager_find(31) != 0:
#         raise Exception(194)
#     if memory_manager_find(35) != 0:
#         raise Exception(195)
#     if memory_manager_find(40) != 0:
#         raise Exception(196)
#     if memory_manager_find(41) != 41:
#         raise Exception(197)
#     if memory_manager_find(45) != 41:
#         raise Exception(198)
#     if memory_manager_find(50) != 41:
#         raise Exception(199)
#     if memory_manager_find(51) != 0:
#         raise Exception(200)
#     clear(-8, 0)
part "test_memory_manager_find"
     push 1
     call "memory_manager_find"
     zero "__test_memory_manager_find_2"
     push 183
     call "raise"
part "__test_memory_manager_find_2"
     push 1
     push 10
     call "memory_manager_append_cell"
     push 21
     push 30
     call "memory_manager_append_cell"
     push 41
     push 50
     call "memory_manager_append_cell"
     push 0
     call "memory_manager_find"
     zero "__test_memory_manager_find_3"
     push 184
     call "raise"
part "__test_memory_manager_find_3"
     push 1
     call "memory_manager_find"
     push 1
     sub
     zero "__test_memory_manager_find_4"
     push 185
     call "raise"
part "__test_memory_manager_find_4"
     push 5
     call "memory_manager_find"
     push 1
     sub
     zero "__test_memory_manager_find_5"
     push 186
     call "raise"
part "__test_memory_manager_find_5"
     push 10
     call "memory_manager_find"
     push 1
     sub
     zero "__test_memory_manager_find_6"
     push 187
     call "raise"
part "__test_memory_manager_find_6"
     push 11
     call "memory_manager_find"
     zero "__test_memory_manager_find_7"
     push 188
     call "raise"
part "__test_memory_manager_find_7"
     push 15
     call "memory_manager_find"
     zero "__test_memory_manager_find_8"
     push 189
     call "raise"
part "__test_memory_manager_find_8"
     push 20
     call "memory_manager_find"
     zero "__test_memory_manager_find_9"
     push 190
     call "raise"
part "__test_memory_manager_find_9"
     push 21
     call "memory_manager_find"
     push 21
     sub
     zero "__test_memory_manager_find_10"
     push 191
     call "raise"
part "__test_memory_manager_find_10"
     push 25
     call "memory_manager_find"
     push 21
     sub
     zero "__test_memory_manager_find_11"
     push 192
     call "raise"
part "__test_memory_manager_find_11"
     push 30
     call "memory_manager_find"
     push 21
     sub
     zero "__test_memory_manager_find_12"
     push 193
     call "raise"
part "__test_memory_manager_find_12"
     push 31
     call "memory_manager_find"
     zero "__test_memory_manager_find_13"
     push 194
     call "raise"
part "__test_memory_manager_find_13"
     push 35
     call "memory_manager_find"
     zero "__test_memory_manager_find_14"
     push 195
     call "raise"
part "__test_memory_manager_find_14"
     push 40
     call "memory_manager_find"
     zero "__test_memory_manager_find_15"
     push 196
     call "raise"
part "__test_memory_manager_find_15"
     push 41
     call "memory_manager_find"
     push 41
     sub
     zero "__test_memory_manager_find_16"
     push 197
     call "raise"
part "__test_memory_manager_find_16"
     push 45
     call "memory_manager_find"
     push 41
     sub
     zero "__test_memory_manager_find_17"
     push 198
     call "raise"
part "__test_memory_manager_find_17"
     push 50
     call "memory_manager_find"
     push 41
     sub
     zero "__test_memory_manager_find_18"
     push 199
     call "raise"
part "__test_memory_manager_find_18"
     push 51
     call "memory_manager_find"
     zero "__test_memory_manager_find_return"
     push 200
     call "raise"
part "__test_memory_manager_find_return"
     push -8
     push 0
     call "clear"
     back
# def test_uint_cast():
#     if uint_cast(0) != 0:
#         raise Exception(201)
#     if uint_cast(4294967296) != 0:
#         raise Exception(202)
#     if uint_cast(-4294967296) != 0:
#         raise Exception(203)
#     if uint_cast(1) != 1
#         raise Exception(204)
#     if uint_cast(4294967297) != 1:
#         raise Exception(205)
#     if uint_cast(-4294967295) != 1:
#         raise Exception(206)
#     if uint_cast(-1) != 4294967295:
#         raise Exception(207)
#     if uint_cast(4294967295) != 4294967295:
#         raise Exception(208)
#     if uint_cast(-4294967297) != 4294967295:
#         raise Exception(209)
part "test_uint_cast"
     push 4294967295
     push -4294967297
     push 4294967295
     push 4294967295
     push 4294967295
     push -1
     push 1
     push -4294967295
     push 1
     push 4294967297
     push 1
     push 1
     push -4294967296
     push 4294967296
     push 0
     call "uint_cast"
     zero "__test_uint_cast_2"
     push 201
     call "raise"
part "__test_uint_cast_2"
     call "uint_cast"
     zero "__test_uint_cast_3"
     push 202
     call "raise"
part "__test_uint_cast_3"
     call "uint_cast"
     zero "__test_uint_cast_4"
     push 203
     call "raise"
part "__test_uint_cast_4"
     call "uint_cast"
     sub
     zero "__test_unint_cast_5"
     push 204
     call "raise"
part "__test_unint_cast_5"
     call "uint_cast"
     sub
     zero "__test_unint_cast_6"
     push 205
     call "raise"
part "__test_unint_cast_6"
     call "uint_cast"
     sub
     zero "__test_unint_cast_7"
     push 206
     call "raise"
part "__test_unint_cast_7"
     call "uint_cast"
     sub
     zero "__test_unint_cast_8"
     push 207
     call "raise"
part "__test_unint_cast_8"
     call "uint_cast"
     sub
     zero "__test_unint_cast_9"
     push 208
     call "raise"
part "__test_unint_cast_9"
     call "uint_cast"
     sub
     zero "__test_unint_cast_return"
     push 209
     call "raise"
part "__test_unint_cast_return"
     back
# def test_shift():
#     if left_shift(100, 0) != 100:
#         raise Exception(210)
#     if right_shift(100, 0) != 100:
#         raise Exception(211)
#     if left_shift(100, 2) != 400:
#         raise Exception(212)
#     if right_shift(100, 2) != 25:
#         raise Exception(213)
#     if left_shift(100, -2) != 25:
#         raise Exception(214)
#     if right_shift(100, -2) != 400:
#         raise Exception(215)
part "test_shift"
     push 400
     push 100
     push -2
     push 25
     push 100
     push -2
     push 25
     push 100
     push 2
     push 400
     push 100
     push 2
     push 100
     push 100
     push 0
     push 100
     push 100
     push 0
     call "left_shift"
     sub
     zero "__test_shift_2"
     push 210
     call "raise"
part "__test_shift_2"
     call "right_shift"
     sub
     zero "__test_shift_3"
     push 211
     call "raise"
part "__test_shift_3"
     call "left_shift"
     sub
     zero "__test_shift_4"
     push 212
     call "raise"
part "__test_shift_4"
     call "right_shift"
     sub
     zero "__test_shift_5"
     push 213
     call "raise"
part "__test_shift_5"
     call "left_shift"
     sub
     zero "__test_shift_6"
     push 214
     call "raise"
part "__test_shift_6"
     call "right_shift"
     sub
     zero "__test_shift_return"
     push 215
     call "raise"
part "__test_shift_return"
     back
# def test_save_stack():
#     HEAP[-1] = 1
#     stack.push(0)
#     stack.push(2)
#     stack.push(3)
#     stack.push(5)
#     stack.push(7)
#     stack.push(11)
#     stack.push(13)
#     stack.push(17)
#     stack.push(19)
#     array = save_stack(4)
#     if array[0] != 4:
#         raise Exception(223)
#     if array[4] != 11:
#         raise Exception(224)
#     free(array)
#     array = save_stack(4)
#     if array[0] != 4:
#         raise Exception(225)
#     if array[1] != 7:
#         raise Exception(226)
#     free(array)
#     if stack.pop() != 0:
#         raise Exception(227)
#     clear(-1, 8)
part "test_save_stack"
     push -1
     push 1
     set
     push 0
     push 2
     push 3
     push 5
     push 7
     push 11
     push 13
     push 17
     push 19
     push 4
     call "save_stack"
     copy
     get
     push 4
     sub
     zero "__test_save_stack_2"
     push 223
     call "raise"
part "__test_save_stack_2"
     copy
     push 4
     add
     get
     push 11
     sub
     zero "__test_save_stack_3"
     push 224
     call "raise"
part "__test_save_stack_3"
     call "free"
     push 4
     call "save_stack"
     copy
     get
     push 4
     sub
     zero "__test_save_stack_4"
     push 225
     call "raise"
part "__test_save_stack_4"
     copy
     push 1
     add
     get
     push 7
     sub
     zero "__test_save_stack_5"
     push 226
     call "raise"
part "__test_save_stack_5"
     call "free"
     zero "__test_save_stack_return"
     push 227
     call "raise"
part "__test_save_stack_return"
     push -1
     push 8
     call "clear"
     back
# def test_load_stack():
#     HEAP[-1] = 1
#     stack.push(0)
#     stack.push(2)
#     stack.push(3)
#     stack.push(5)
#     stack.push(7)
#     stack.push(11)
#     stack.push(13)
#     stack.push(17)
#     stack.push(19)
#     array = save_stack(3)
#     if stack[-1] != 11:
#         raise Exception(228)
#     load_stack(array, 3)
#     if stack.pop() != 19:
#         raise Exception(229)
#     del stack[-1]
#     if stack.pop() != 13:
#         raise Exception(230)
#     array = save_stack(3)
#     load_stack(array, 1)
#     if stack.pop() != 5:
#         raise Exception(231)
#     load_stack(array, 2)
#     if stack.pop() != 11:
#         raise Exception(232)
#     del stack[-1]
#     array = save_stack(2)
#     load_stack(array, 1)
#     del stack[-1]
#     if array[0] != 1:
#         raise Exception(233)
#     load_stack(array, 1)
#     if stack[-2] + stack[-1] != 3:
#         raise Exception(234)
#     clear(-1, 7)
part "test_load_stack"
     push -1
     push 1
     set
     push 0
     push 2
     push 3
     push 5
     push 7
     push 11
     push 13
     push 17
     push 19
     push 3
     call "save_stack"
     copy 1
     push 11
     sub
     zero "__test_load_stack_2"
     push 228
     call "raise"
part "__test_load_stack_2"
     push 3
     call "load_stack"
     push 19
     sub
     zero "__test_load_stack_3"
     push 229
     call "raise"
part "__test_load_stack_3"
     away
     push 13
     sub
     zero "__test_load_stack_4"
     push 230
     call "raise"
part "__test_load_stack_4"
     push 3
     call "save_stack"
     copy
     push 1
     call "load_stack"
     push 5
     sub
     zero "__test_load_stack_5"
     push 231
     call "raise"
part "__test_load_stack_5"
     push 2
     call "load_stack"
     push 11
     sub
     zero "__test_load_stack_6"
     push 232
     call "raise"
part "__test_load_stack_6"
     away
     push 2
     call "save_stack"
     copy
     push 1
     call "load_stack"
     away
     copy
     get
     push 1
     sub
     zero "__test_load_stack_7"
     push 233
     call "raise"
part "__test_load_stack_7"
     push 1
     call "load_stack"
     add
     push 3
     sub
     zero "__test_load_stack_return"
     push 234
     call "raise"
part "__test_load_stack_return"
     push -1
     push 7
     call "clear"
     back
# def test_divmod():
#     a, b = divmod(99, 2)
#     if b != 1:
#         raise Exception(235)
#     if a != 49:
#         raise Exception(236)
#     a, b = divmod(5, 10)
#     if b != 5:
#         raise Exception(237)
#     if a != 0:
#         raise Exception(238)
#     a, b = divmod(27, 3)
#     if b != 0:
#         raise Exception(239)
#     if a != 9:
#         raise Exception(240)
#     HEAP[0] = 0
part "test_divmod"
     push 99
     push 2
     call "divmod"
     push 1
     sub
     zero "__test_divmod_2"
     push 235
     call "raise"
part "__test_divmod_2"
     push 49
     sub
     zero "__test_divmod_3"
     push 236
     call "raise"
part "__test_divmod_3"
     push 5
     push 10
     call "divmod"
     push 5
     sub
     zero "__test_divmod_4"
     push 237
     call "raise"
part "__test_divmod_4"
     zero "__test_divmod_5"
     push 238
     call "raise"
part "__test_divmod_5"
     push 27
     push 3
     call "divmod"
     zero "__test_divmod_6"
     push 239
     call "raise"
part "__test_divmod_6"
     push 9
     sub
     zero "__test_divmod_return"
     push 240
     call "raise"
part "__test_divmod_return"
     push 0
     push 0
     set
     back
# def test_sum_length_array():
#     HEAP[-1] = 1
#     array = malloc(3)
#     array[0] = 2
#     array[1] = 3
#     array[2] = 4
#     if sum_length_array(array) != 7:
#         raise Exception(237)
#     array[1] = 5
#     array[2] = 2
#     if sum_length_array(array) != 7:
#         raise Exception(238)
#     array = realloc(array, 4)
#     array[3] = 3
#     if sum_length_array(array) != 7:
#         raise Exception(239)
#     array[0] = 3
#     if sum_length_array(array) != 10:
#         raise Exception(240)
#     range(array + 1, 1, 4, 1)
#     if sum_length_array(array) != 6:
#         raise Exception(241)
#     range(array + 1, 100, 373, 91)
#     if sum_length_array(array) != 573:
#         raise Exception(242)
#     free(array)
#     clear(-1, 4)
part "test_sum_length_array"
     push -1
     push 1
     set
     push 3
     call "malloc"
     copy
     push 2
     set
     copy
     push 1
     add
     push 3
     set
     copy
     push 2
     add
     push 4
     set
     copy
     call "sum_length_array"
     push 7
     sub
     zero "__test_sum_length_array_2"
     push 237
     call "raise"
part "__test_sum_length_array_2"
     copy
     push 1
     add
     push 5
     set
     copy
     push 2
     add
     push 2
     set
     copy
     call "sum_length_array"
     push 7
     sub
     zero "__test_sum_length_array_3"
     push 238
     call "raise"
part "__test_sum_length_array_3"
     push 4
     call "realloc"
     copy
     push 3
     add
     push 3
     set
     copy
     call "sum_length_array"
     push 7
     sub
     zero "__test_sum_length_array_4"
     push 239
     call "raise"
part "__test_sum_length_array_4"
     copy
     push 3
     set
     copy
     call "sum_length_array"
     push 10
     sub
     zero "__test_sum_length_array_5"
     push 240
     call "raise"
part "__test_sum_length_array_5"
     copy
     push 1
     add
     push 1
     push 4
     push 1
     call "range"
     copy
     call "sum_length_array"
     push 6
     sub
     zero "__test_sum_length_array_6"
     push 241
     call "raise"
part "__test_sum_length_array_6"
     copy
     push 1
     add
     push 100
     push 373
     push 91
     call "range"
     copy
     call "sum_length_array"
     push 573
     sub
     zero "__test_sum_length_array_return"
     push 242
     call "raise"
part "__test_sum_length_array_return"
     call "free"
     push -1
     push 4
     call "clear"
     back
# def test_value_to_array():
#     HEAP[-1] = 1
#     array = value_to_array(7, 2)
#     if array[0] != 3:
#         raise Exception(243)
#     if array[1] != 1:
#         raise Exception(244)
#     if array[2] != 1:
#         raise Exception(245)
#     if array[3] != 1:
#         raise Exception(246)
#     free(array)
#     array = value_to_array(100, 3)
#     if sum_length_array(array) != 4:
#         raise Exception(247)
#     free(array)
#     array = value_to_array(123456789, 7)
#     if sum_length_array(array) != 27:
#         raise Exception(248)
#     free(array)
#     array = value_to_array(123456789, 13)
#     if sum_length_array(array) != 45:
#         raise Exception(249)
#     free(array)
#     array = value_to_array(100000, 5)
#     if sum_length_array(array) != 4:
#         raise Exception(250)
#     free(array)
#     clear(-1, 24)
part "test_value_to_array"
     push -1
     push 1
     set
     push 7
     push 2
     call "value_to_array"
     copy
     get
     push 3
     sub
     zero "__test_value_to_array_2"
     push 243
     call "raise"
part "__test_value_to_array_2"
     copy
     push 1
     add
     get
     push 1
     sub
     zero "__test_value_to_array_3"
     push 244
     call "raise"
part "__test_value_to_array_3"
     copy
     push 2
     add
     get
     push 1
     sub
     zero "__test_value_to_array_4"
     push 245
     call "raise"
part "__test_value_to_array_4"
     copy
     push 3
     add
     get
     push 1
     sub
     zero "__test_value_to_array_5"
     push 246
     call "raise"
part "__test_value_to_array_5"
     call "free"
     push 100
     push 3
     call "value_to_array"
     copy
     call "sum_length_array"
     push 4
     sub
     zero "__test_value_to_array_6"
     push 247
     call "raise"
part "__test_value_to_array_6"
     call "free"
     push 123456789
     push 7
     call "value_to_array"
     copy
     call "sum_length_array"
     push 27
     sub
     zero "__test_value_to_array_7"
     push 248
     call "raise"
part "__test_value_to_array_7"
     call "free"
     push 123456789
     push 13
     call "value_to_array"
     copy
     call "sum_length_array"
     push 45
     sub
     zero "__test_value_to_array_8"
     push 249
     call "raise"
part "__test_value_to_array_8"
     call "free"
     push 100000
     push 5
     call "value_to_array"
     copy
     call "sum_length_array"
     push 4
     sub
     zero "__test_value_to_array_return"
     push 250
     call "raise"
part "__test_value_to_array_return"
     call "free"
     push -1
     push 24
     call "clear"
     back
# def test_array_to_value():
#     HEAP[-1] = 1
#     array = value_to_array(0, 10)
#     if array_to_value(array, 10) != 0:
#         raise Exception(251)
#     free(array)
#     array = value_to_array(1234567890, 13)
#     if array_to_value(array, 13) != 1234567890:
#         raise Exception(252)
#     free(array)
#     array = value_to_array(19850126, 12)
#     if array_to_value(array, 13) != 31824236:
#         raise Exception(253)
#     free(array)
#     array = value_to_array(100, 8)
#     if array_to_value(array, 16) != 324:
#         raise Exception(254)
#     free(array)
#     array = value_to_array(341, 2)
#     if array_to_value(array, 3) != 7381:
#         raise Exception(255)
#     free(array)
#     clear(-1, 23)
part "test_array_to_value"
     push -1
     push 1
     set
     push 0
     push 10
     call "value_to_array"
     copy
     push 10
     call "array_to_value"
     zero "__test_array_to_value_2"
     push 251
     call "raise"
part "__test_array_to_value_2"
     call "free"
     push 1234567890
     push 13
     call "value_to_array"
     copy
     push 13
     call "array_to_value"
     push 1234567890
     sub
     zero "__test_array_to_value_3"
     push 252
     call "raise"
part "__test_array_to_value_3"
     call "free"
     push 19850126
     push 12
     call "value_to_array"
     copy
     push 13
     call "array_to_value"
     push 31824236
     sub
     zero "__test_array_to_value_4"
     push 253
     call "raise"
part "__test_array_to_value_4"
     call "free"
     push 100
     push 8
     call "value_to_array"
     copy
     push 16
     call "array_to_value"
     push 324
     sub
     zero "__test_array_to_value_5"
     push 254
     call "raise"
part "__test_array_to_value_5"
     call "free"
     push 341
     push 2
     call "value_to_array"
     copy
     push 3
     call "array_to_value"
     push 7381
     sub
     zero "__test_array_to_value_return"
     push 255
     call "raise"
part "__test_array_to_value_return"
     call "free"
     push -1
     push 23
     call "clear"
     back
# def test_uint_bits():
#     HEAP[-1] = 1
#     number = left_shift(1, 32)
#     bits = uint_bits(number - 1)
#     if bits[0] != 1:
#         raise Exception(256)
#     if bits[31] != 1:
#         raise Exception(257)
#     free(bits)
#     bits = uint_bits(number)
#     if bits[0] != 0:
#         raise Exception(258)
#     if bits[31] != 0:
#         raise Exception(259)
#     free(bits)
#     clear(-1, 78)
part "test_uint_bits"
     push -1
     push 1
     set
     push 1
     push 32
     call "left_shift"
     copy
     push 1
     sub
     call "uint_bits"
     copy
     get
     push 1
     sub
     zero "__test_uint_bits_2"
     push 256
     call "raise"
part "__test_uint_bits_2"
     copy
     push 31
     add
     get
     push 1
     sub
     zero "__test_uint_bits_3"
     push 257
     call "raise"
part "__test_uint_bits_3"
     call "free"
     call "uint_bits"
     copy
     get
     zero "__test_uint_bits_4"
     push 258
     call "raise"
part "__test_uint_bits_4"
     copy
     push 31
     add
     get
     zero "__test_uint_bits_return"
     push 259
     call "raise"
part "__test_uint_bits_return"
     call "free"
     push -1
     push 78
     call "clear"
     back
# def test_uint_xor():
#     HEAP[-1] = 1
#     if uint_xor(123, 124) != 7:
#         raise Exception(260)
#     if uint_xor(127, 128) != 255:
#         raise Exception(261)
#     if uint_xor(19891229, 19850126) != 92051:
#         raise Exception(262)
#     if uint_xor(3558890251, 3920765046) != 1033010045:
#         raise Exception(263)
#     if uint_xor(2010047493, 4018657910) != 2554936947:
#         raise Exception(264)
#     if uint_xor(83517729861, 159352312248) != 1747467773:
#         raise Exception(265)
#     clear(-1, 109)
part "test_uint_xor"
     push -1
     push 1
     set
     push 123
     push 124
     call "uint_xor"
     push 7
     sub
     zero "__test_uint_xor_2"
     push 260
     call "raise"
part "__test_uint_xor_2"
     push 127
     push 128
     call "uint_xor"
     push 255
     sub
     zero "__test_uint_xor_3"
     push 261
     call "raise"
part "__test_uint_xor_3"
     push 19891229
     push 19850126
     call "uint_xor"
     push 92051
     sub
     zero "__test_uint_xor_4"
     push 262
     call "raise"
part "__test_uint_xor_4"
     push 3558890251
     push 3920765046
     call "uint_xor"
     push 1033010045
     sub
     zero "__test_uint_xor_5"
     push 263
     call "raise"
part "__test_uint_xor_5"
     push 2010047493
     push 4018657910
     call "uint_xor"
     push 2554936947
     sub
     zero "__test_uint_xor_6"
     push 264
     call "raise"
part "__test_uint_xor_6"
     push 83517729861
     push 159352312248
     call "uint_xor"
     push 1747467773
     sub
     zero "__test_uint_xor_return"
     push 265
     call "raise"
part "__test_uint_xor_return"
     push -1
     push 109
     call "clear"
     back
# def test_memory_manager_hash():
#     HEAP[-1] = 1
#     if memory_manager_hash() != 0:
#         raise Exception(266)
#     memory_manager_append_cell(1, 2)
#     if memory_manager_hash() != 2153645760:
#         raise Exception(267)
#     memory_manager_append_cell(3, 5)
#     if memory_manager_hash() != 4048040839:
#         raise Exception(268)
#     memory_manager_append_cell(7, 11)
#     if memory_manager_hash() != 265376592:
#         raise Exception(269)
#     memory_manager_append_cell(1000033, 1000037)
#     if memory_manager_hash() != 880511209:
#         raise Exception(270)
#     clear(-10, 141)
part "test_memory_manager_hash"
     push -1
     push 1
     set
     call "memory_manager_hash"
     zero "__test_memory_manager_hash_2"
     push 266
     call "raise"
part "__test_memory_manager_hash_2"
     push 1
     push 2
     call "memory_manager_append_cell"
     call "memory_manager_hash"
     push 2153645760
     sub
     zero "__test_memory_manager_hash_3"
     push 267
     call "raise"
part "__test_memory_manager_hash_3"
     push 3
     push 5
     call "memory_manager_append_cell"
     call "memory_manager_hash"
     push 4048040839
     sub
     zero "__test_memory_manager_hash_4"
     push 268
     call "raise"
part "__test_memory_manager_hash_4"
     push 7
     push 11
     call "memory_manager_append_cell"
     call "memory_manager_hash"
     push 265376592
     sub
     zero "__test_memory_manager_hash_5"
     push 269
     call "raise"
part "__test_memory_manager_hash_5"
     push 1000033
     push 1000037
     call "memory_manager_append_cell"
     call "memory_manager_hash"
     push 880511209
     sub
     zero "__test_memory_manager_hash_return"
     push 270
     call "raise"
part "__test_memory_manager_hash_return"
     push -10
     push 141
     call "clear"
     back

Diff to Previous Revision

--- revision 1 2011-04-21 12:16:13
+++ revision 2 2011-04-21 12:34:56
@@ -1,663 +1,6372 @@
-def main(width, height, colors):
-    size = height * width
-    array = [0] * size
-    create_image(array, width)
-    add_one(array, colors)
-    while sum(array) != 0:
-        create_image(array, width)
-        add_one(array, colors)
-
-def add_one(array, colors):
-    for index, digit in enumerate(array):
-        digit += 1
-        if digit == colors:
-            array[index] = 0
-        else:
-            array[index] = digit
-            break
-
-def create_image(array, width, counter=[1]):
-    image = BitMap(width, len(array) // width)
-    for index, pixel in enumerate(array):
-        image.setPenColor(PALETTE[pixel])
-        image.plotPoint(*reversed(divmod(index, width)))
-    image.saveFile(str(counter[0]) + '.bmp')
-    counter[0] += 1
+# HEAP[0] = temporary memory for anyone.
+# HEAP[-1] = beginning of dynamic memory.
+# HEAP[-2] = number of blocks allocated.
 
 ################################################################################
 
-"""
-bmp.py - module for constructing simple BMP graphics files
+# Untested Functions:
+#     print_stack_c_string()
+#     raise(error)
+#     trace(reference)
 
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
+# Standard Memory Functions:
+#     malloc(cells) -> pointer
+#     calloc(block_count, block_size) -> pointer
+#     free(pointer)
+#     realloc(pointer, cells) -> pointer
 
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
+# Debugging Memory Functions:
+#     memory_manager_size(pointer) -> block_size
+#     memory_manager_blocks() -> block_count
+#     memory_manager_cells() -> used_memory
+#     memory_manager_pointers(include_self) -> pointer_array
+#     memory_manager_find(address) -> pointer
+#     memory_manager_hash() -> hash_number
 
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+# Utility Memory Functions:
+#     clear(start_address, end_address)
+#     copy(from_start, from_end, to_start, to_end)
+#     compare_cells(addr_a, addr_b) -> -1, 0, +1
+#     compare_memory(a, b, length) -> -1, 0, +1
+#     range(address, start, stop, step)
+#     mark(pointer)
+#     sum_length_array(array) -> sum
 
-"""
-__version__ = "0.3"
-__about =  "bmp module, version %s, written by Paul McGuire, October, 2003, updated by Margus Laak, September, 2009" % __version__ 
+# Private Memory Functions:
+#     memory_manager_append_cell(start, end)
+#     memory_manager_get_cell(index) -> start, end
+#     memory_manager_insert_cell(start, end, index)
+#     malloc_check_beginning(cells) -> enough_space
+#     malloc_check_ranges(cells) -> index
+#     malloc_ranges(cells) -> pointer
+#     memory_manager_search(pointer) -> index
+#     memory_manager_pop_cell(index) -> start, end
+#     memory_manager_get_block_size(index) -> size
+#     memory_manager_set_cell(start, end, index)
+#     memory_manager_deflate_block(cells, index)
+#     memory_manager_inflate_cell(cells, index)
+#     memory_manager_potential_after(index) -> size
+#     memory_manager_potential_before(index) -> size
+#     memory_manager_compress(index) -> address
+#     memory_manager_inflate_before(pointer, cells, index) -> pointer
+#     memory_manager_inflate_move(pointer, cells, index) -> pointer
+#     memory_manager_inflate_block(pointer, cells, index) -> pointer
 
-from math import ceil, hypot
+# Stack Helper Functions:
+#     rotate_3_down()
+#     rotate_3_up()
+#     save_stack(size) -> pointer
+#     load_stack(pointer, size)
 
-def shortToString(i):
-  hi = (i & 0xff00) >> 8
-  lo = i & 0x00ff
-  return chr(lo) + chr(hi)
-
-def longToString(i):
-  hi = (int(i) & 0x7fff0000) >> 16
-  lo = int(i) & 0x0000ffff
-  return shortToString(lo) + shortToString(hi)
-
-def long24ToString(i):
-  return chr(i & 0xff) + chr(i >> 8 & 0xff) + chr(i >> 16 & 0xff)
-
-def stringToLong(input_string, offset):
-  return ord(input_string[offset+3]) << 24 | ord(input_string[offset+2]) << 16 | ord(input_string[offset+1]) << 8 | ord(input_string[offset])
-
-def stringToLong24(input_string, offset):
-  return ord(input_string[offset+2]) << 16 | ord(input_string[offset+1]) << 8 | ord(input_string[offset])
-
-class Color(object):
-  """class for specifying colors while drawing BitMap elements"""
-  __slots__ = [ 'red', 'grn', 'blu' ]
-  __shade = 32
-  
-  def __init__( self, r=0, g=0, b=0 ):
-    self.red = r
-    self.grn = g
-    self.blu = b
-
-  def __setattr__(self, name, value):
-    if hasattr(self, name):
-      raise AttributeError("Color is immutable")
-    else:
-      object.__setattr__(self, name, value)
-
-  def __str__( self ):
-    return "R:%d G:%d B:%d" % (self.red, self.grn, self.blu )
-    
-  def __hash__( self ):
-    return ( ( int(self.blu) ) + 
-              ( int(self.grn) <<  8 ) + 
-              ( int(self.red) << 16 ) )
-  
-  def __eq__( self, other ):
-    return (self is other) or (self.toLong == other.toLong)
-
-  def lighten( self ):
-    return Color( 
-      min( self.red + Color.__shade, 255), 
-      min( self.grn + Color.__shade, 255), 
-      min( self.blu + Color.__shade, 255)  
-      )
-  
-  def darken( self ):
-    return Color( 
-      max( self.red - Color.__shade, 0), 
-      max( self.grn - Color.__shade, 0), 
-      max( self.blu - Color.__shade, 0)  
-      )
-       
-  def toLong( self ):
-    return self.__hash__()
-    
-  def fromLong( l ):
-    b = l & 0xff
-    l = l >> 8
-    g = l & 0xff
-    l = l >> 8
-    r = l & 0xff
-    return Color( r, g, b )
-  fromLong = staticmethod(fromLong)
-
-# define class constants for common colors
-Color.BLACK    = Color(   0,   0,   0 )
-Color.RED      = Color( 255,   0,   0 )
-Color.GREEN    = Color(   0, 255,   0 )
-Color.BLUE     = Color(   0,   0, 255 )
-Color.CYAN     = Color(   0, 255, 255 )
-Color.MAGENTA  = Color( 255,   0, 255 )
-Color.YELLOW   = Color( 255, 255,   0 )
-Color.WHITE    = Color( 255, 255, 255 )
-Color.DKRED    = Color( 128,   0,   0 )
-Color.DKGREEN  = Color(   0, 128,   0 )
-Color.DKBLUE   = Color(   0,   0, 128 )
-Color.TEAL     = Color(   0, 128, 128 )
-Color.PURPLE   = Color( 128,   0, 128 )
-Color.BROWN    = Color( 128, 128,   0 )
-Color.GRAY     = Color( 128, 128, 128 )
-
-class BitMap(object):
-  """class for drawing and saving simple Windows bitmap files"""
-  
-  LINE_SOLID  = 0
-  LINE_DASHED = 1
-  LINE_DOTTED = 2
-  LINE_DOT_DASH=3
-  _DASH_LEN = 12.0
-  _DOT_LEN = 6.0
-  _DOT_DASH_LEN = _DOT_LEN + _DASH_LEN
-  
-  def __init__( self, width, height, 
-                 bkgd = Color.WHITE, frgd = Color.BLACK ):
-    self.wd = int( ceil(width) )
-    self.ht = int( ceil(height) )
-    self.bgcolor = 0
-    self.fgcolor = 1
-    self.palette = []
-    self.palette.append( bkgd.toLong() )
-    self.palette.append( frgd.toLong() )
-    self.setDefaultPenColor()
-
-    tmparray = [ self.bgcolor ] * self.wd
-    self.bitarray = [ tmparray[:] for i in range( self.ht ) ]
-    self.currentPen = 1
-    self.fontName = "%s-%d-%s" % ( "none", 0, "none" )
-    
-  def setDefaultPenColor( self ):
-    self.currentPen = self.fgcolor
-    
-  def setPenColor( self, pcolor ):
-    oldColor = self.currentPen
-    # look for c in palette
-    pcolornum = pcolor.toLong()
-    try:
-      self.currentPen = self.palette.index( pcolornum )
-    except ValueError:
-      if len( self.palette ) < 256 :
-        self.palette.append( pcolornum )
-        self.currentPen = len( self.palette ) - 1
-      else:
-        self.currentPen = self.fgcolor
-    
-    return Color.fromLong( self.palette[oldColor] )
-    
-  def getPenColor( self ):
-    return Color.fromLong( self.palette[self.currentPen] )
-
-  def plotPoint( self, x, y ):
-    if ( 0 <= x < self.wd and 0 <= y < self.ht ):
-      x = int(x)
-      y = int(y)
-      self.bitarray[y][x] = self.currentPen
-      
-  def drawRect( self, x, y, wid, ht, fill=False ):
-    x = int(x)
-    y = int(y)
-    cury = y
-
-    # subtract one for line width
-    wid -= 1
-    ht -= 1
-    
-    self.drawLine( x, y, x+wid, y )
-    if fill:
-      cury = y
-      while cury < y+ht:
-        self.drawLine( x, cury, x+wid, cury )
-        cury += 1
-    else:
-      self.drawLine( x, y, x, y+ht )
-      self.drawLine( x+wid, y, x+wid, y+ht )
-    self.drawLine( x, y+ht, x+wid, y+ht )
-    
-  def drawSquare( self, x, y, wid, fill=False ):
-    self.drawRect( x, y, wid, wid, fill )
-
-  def bresLine(x,y,x2,y2):
-    """Bresenham line algorithm"""
-    steep = 0
-    coords = []
-    dx = int(abs(x2 - x)+0.5)
-    if (x2 - x) > 0: 
-      sx = 1
-    else: 
-      sx = -1
-    dy = int(abs(y2 - y)+0.5)
-    if (y2 - y) > 0: 
-      sy = 1
-    else: 
-      sy = -1
-    if dy > dx:
-      steep = 1
-      x,y = y,x
-      dx,dy = dy,dx
-      sx,sy = sy,sx
-    dx2 = dx*2
-    dy2 = dy*2
-    d = dy2 - dx
-    for i in range(0,dx):
-      coords.append( (x,y) )
-      while d >= 0:
-        y += sy
-        d -= dx2
-      x += sx
-      d += dy2
-
-    if steep: #transpose x's and y's
-      coords = [ (c[1],c[0]) for c in coords ]
-    
-    coords.append( (x2,y2) )
-      
-    return coords
-  bresLine = staticmethod( bresLine )
-
-  def _drawLine( self, x1, y1, x2, y2 ):
-    # special checks for vert and horiz lines
-    if ( x1 == x2 ):
-      if 0 <= x1 < self.wd:
-        if ( y2 < y1 ): 
-          y1,y2 = y2,y1
-        cury = max( y1, 0 )
-        maxy = min( y2, self.ht-1 )
-        while cury <= maxy :
-          self.plotPoint( x1, cury )
-          cury += 1
-      return
-      
-    if ( y1 == y2 ):
-      if ( 0 <= y1 < self.ht ):
-        if ( x2 < x1 ):
-          x1,x2 = x2,x1
-        curx = max( x1, 0 )
-        maxx = min( x2, self.wd-1 )
-        while curx <= maxx:
-          self.plotPoint( curx, y1 )
-          curx += 1
-      return
-
-    for pt in BitMap.bresLine(x1, y1, x2, y2):
-      self.plotPoint( pt[0], pt[1] )
-  
-  def _drawLines( self, lineSegs ):
-    for x1,y1,x2,y2 in lineSegs:
-      self._drawLine( x1, y1, x2, y2 )
-
-  def drawLine( self, x1, y1, x2, y2, type=LINE_SOLID ):
-    if type == BitMap.LINE_SOLID:
-      self._drawLine( x1, y1, x2, y2 )
-    elif type == BitMap.LINE_DASHED:
-      # how many segs?
-      len = hypot( x2-x1, y2-y1 )
-      numsegs = len / BitMap._DASH_LEN
-      dx = ( x2 - x1 ) / numsegs
-      dy = ( y2 - y1 ) / numsegs
-      dx2 = dx / 2.0
-      dy2 = dy / 2.0
-      if ( x2 < x1 ):
-        x1,x2 = x2,x1
-        y1,y2 = y2,y1
-      segs = []
-      curx = x1
-      cury = y1
-      for i in range( int(numsegs) ):
-        segs.append( ( curx, cury, curx + dx2, cury + dy2 ) )
-        curx += dx
-        cury += dy
-      if curx + dx2 > x2:
-        segs.append( ( curx, cury, x2, y2 ) )
-      else:
-        segs.append( ( curx, cury, curx + dx2, cury + dy2 ) )
-      self._drawLines( segs )
-    elif type == BitMap.LINE_DOTTED:
-      len = hypot( x2-x1, y2-y1 )
-      numsegs = len / BitMap._DOT_LEN
-      dx = ( x2 - x1 ) / numsegs
-      dy = ( y2 - y1 ) / numsegs
-      dx2 = dx / 2.0
-      dy2 = dy / 2.0
-      if ( x2 < x1 ):
-        x1,x2 = x2,x1
-        y1,y2 = y2,y1
-      segs = []
-      curx = x1
-      cury = y1
-      for i in range( int(numsegs) ):
-        segs.append( ( curx, cury, curx + dx2, cury + dy2 ) )
-        curx += dx
-        cury += dy
-      if curx + dx2 > x2:
-        segs.append( ( curx, cury, x2, y2 ) )
-      else:
-        segs.append( ( curx, cury, curx + dx2, cury + dy2 ) )
-      self._drawLines( segs )
-    elif type == BitMap.LINE_DOT_DASH:
-      len = hypot( x2-x1, y2-y1 )
-      numsegs = len / BitMap._DOT_DASH_LEN
-      dx = ( x2 - x1 ) / numsegs
-      dy = ( y2 - y1 ) / numsegs
-      dx3 = dx / 3.0
-      dy3 = dy / 3.0
-      dx23 = 0.62*dx
-      dy23 = 0.62*dy
-      dx56 = 0.78*dx
-      dy56 = 0.78*dy
-      if ( x2 < x1 ):
-        x1,x2 = x2,x1
-        y1,y2 = y2,y1
-      segs = []
-      curx = x1
-      cury = y1
-      for i in range( int(numsegs) ):
-        segs.append( ( curx, cury, curx + dx3, cury + dy3 ) )
-        segs.append( ( curx + dx23, cury + dy23, curx + dx56, cury + dy56  ) )
-        curx += dx
-        cury += dy
-      if curx + dx3 > x2:
-        segs.append( ( curx, cury, x2, y2 ) )
-      else:
-        segs.append( ( curx, cury, curx + dx3, cury + dy3 ) )
-        if curx + dx23 < x2:
-          if curx + dx56 > x2:
-            segs.append( ( curx + dx23, cury + dy23, x2, y2 ) )
-          else:
-            segs.append( ( curx + dx23, cury + dy23, curx + dx56, cury + dy56  ) )
-        else:
-          pass #segs.append( ( curx, cury, curx + dx3, cury + dy3 ) )
-      segs.append( ( curx, cury, x2, y2 ) )
-      self._drawLines( segs )
-
-  def drawCircle( self, cx, cy, r, fill=False ):
-    x = 0
-    y = r
-    d = 1 - r
-    
-    self.plotPoint(cx, cy + y)
-    self.plotPoint(cx, cy - y)
-    if fill:
-      self.drawLine(cx - y, cy, cx + y, cy)
-    else:
-      self.plotPoint(cx + y, cy)
-      self.plotPoint(cx - y, cy)
-    
-    while( y > x ):
-      if ( d < 0 ):
-        d += ( 2*x + 3 )
-      else:
-        d += ( 2*(x-y) + 5 )
-        y -= 1
-      x += 1
-      
-      if fill:
-        self.drawLine(cx + x - 1, cy + y, cx - x + 1, cy + y)
-        self.drawLine(cx - x + 1, cy - y, cx + x - 1, cy - y)
-        self.drawLine(cx + y - 1, cy + x, cx - y + 1, cy + x)
-        self.drawLine(cx - y + 1, cy - x, cx + y - 1, cy - x)
-      else:
-        self.plotPoint(cx + x, cy + y)
-        self.plotPoint(cx + y, cy + x)
-        self.plotPoint(cx - x, cy - y)
-        self.plotPoint(cx - y, cy - x)
-        self.plotPoint(cx + x, cy - y)
-        self.plotPoint(cx - y, cy + x)
-        self.plotPoint(cx - x, cy + y)
-        self.plotPoint(cx + y, cy - x)
-
-  def _saveBitMapNoCompression( self ):
-    line_padding = (4 - (self.wd % 4)) % 4
-    
-    # write bitmap header
-    _bitmap = "BM"
-    _bitmap += longToString( 54 + self.ht*(self.wd*3 + line_padding) )   # DWORD size in bytes of the file
-    _bitmap += longToString( 0 )    # DWORD 0
-    _bitmap += longToString( 54  )
-    _bitmap += longToString( 40 )    # DWORD header size = 40
-    _bitmap += longToString( self.wd )    # DWORD image width
-    _bitmap += longToString( self.ht )    # DWORD image height
-    _bitmap += shortToString( 1 )    # WORD planes = 1
-    _bitmap += shortToString( 24 )    # WORD bits per pixel = 8
-    _bitmap += longToString( 0 )    # DWORD compression = 0
-    _bitmap += longToString( self.ht * (self.wd * 3 + line_padding) )    # DWORD sizeimage = size in bytes of the bitmap = width * height
-    _bitmap += longToString( 0 )    # DWORD horiz pixels per meter (?)
-    _bitmap += longToString( 0 )    # DWORD ver pixels per meter (?)
-    _bitmap += longToString( 0 )    # DWORD number of colors used = 256
-    _bitmap += longToString( 0 )    # DWORD number of "import colors = len( self.palette )
-
-    # write pixels
-    self.bitarray.reverse()
-    for row in self.bitarray:
-      for pixel in row:
-        c = self.palette[pixel]
-        _bitmap += long24ToString(c)
-      for i in range(line_padding):
-        _bitmap += chr( 0 )
-
-    return _bitmap
-
-    """
-    f = file( filename, "wb" )
-    
-    line_padding = (4 - (self.wd % 4)) % 4
-    
-    # write bitmap header
-    f.write( "BM" )
-    #f.write( longToString( 54 + 256*4 + self.ht*self.wd ) )   # DWORD size in bytes of the file
-    f.write( longToString( 54 + self.ht*(self.wd*3 + line_padding) ) )   # DWORD size in bytes of the file
-    f.write( longToString( 0 ) )    # DWORD 0
-    #f.write( longToString( 54 + 256*4 ) )    # DWORD offset to the data
-    f.write( longToString( 54  ) )
-    f.write( longToString( 40 ) )    # DWORD header size = 40
-    f.write( longToString( self.wd ) )    # DWORD image width
-    f.write( longToString( self.ht ) )    # DWORD image height
-    f.write( shortToString( 1 ) )    # WORD planes = 1
-    f.write( shortToString( 24 ) )    # WORD bits per pixel = 8
-    f.write( longToString( 0 ) )    # DWORD compression = 0
-    f.write( longToString( self.ht * (self.wd * 3 + line_padding) ) )    # DWORD sizeimage = size in bytes of the bitmap = width * height
-    f.write( longToString( 0 ) )    # DWORD horiz pixels per meter (?)
-    f.write( longToString( 0 ) )    # DWORD ver pixels per meter (?)
-    f.write( longToString( 0 ) )    # DWORD number of colors used = 256
-    f.write( longToString( 0 ) )    # DWORD number of "import colors = len( self.palette )
-
-    # write pixels
-    self.bitarray.reverse()
-    for row in self.bitarray:
-      print len(row)
-      for pixel in row:
-        c = self.palette[pixel]
-        f.write( long24ToString(c) )
-      for i in range(line_padding):
-        f.write( chr( 0 ) )
-    
-    # close file
-    f.close()
-    """
-    
-  def _saveBitMapWithCompression( self, filename ):
-    """
-    At the moment we don't support it
-    """
-    # open file
-    f = file( filename, "wb" )
-    
-    # write bitmap header
-    f.write( "BM" )
-    f.write( longToString( 54 + 256*4 + self.ht*self.wd ) )   # DWORD size in bytes of the file
-    f.write( longToString( 0 ) )    # DWORD 0
-    f.write( longToString( 54 + 256*4 ) )    # DWORD offset to the data
-    f.write( longToString( 40 ) )    # DWORD header size = 40
-    f.write( longToString( self.wd ) )    # DWORD image width
-    f.write( longToString( self.ht ) )    # DWORD image height
-    f.write( shortToString( 1 ) )    # WORD planes = 1
-    f.write( shortToString( 8 ) )    # WORD bits per pixel = 8
-    f.write( longToString( 1 ) )    # DWORD compression = 1=RLE8
-    f.write( longToString( self.wd * self.ht ) )    # DWORD sizeimage = size in bytes of the bitmap = width * height
-    f.write( longToString( 0 ) )    # DWORD horiz pixels per meter (?)
-    f.write( longToString( 0 ) )    # DWORD ver pixels per meter (?)
-    f.write( longToString( len(self.palette) ) )   # DWORD number of colors used = 256
-    f.write( longToString( len(self.palette) ) )    # DWORD number of "import colors = len( self.palette )
-
-    # write bitmap palette 
-    for clr in self.palette:
-      f.write( longToString( clr ) )
-    for i in range( len(self.palette), 256 ):
-      f.write( longToString( 0 ) )
-    
-    # write pixels
-    pixelBytes = 0
-    self.bitarray.reverse()
-    for row in self.bitarray:
-      rleStart = 0
-      curPixel = rleStart+1
-      while curPixel < len(row):
-        if row[curPixel] != row[rleStart] or curPixel-rleStart == 255:
-          # write out from rleStart thru curPixel-1
-          f.write( chr( curPixel-rleStart ) )
-          f.write( chr( row[rleStart] ) )
-          pixelBytes += 2
-          rleStart = curPixel
-        else:
-          pass
-        curPixel += 1
-          
-      # write out last run of colors
-      f.write( chr( curPixel-rleStart ) )
-      f.write( chr( row[rleStart] ) ) 
-      pixelBytes += 2
-      
-      # end of line code
-      f.write( chr(0) )
-      f.write( chr(0) )
-      pixelBytes += 2
-    
-    # end of bitmap code
-    f.write( chr(0) )
-    f.write( chr(1) )
-    pixelBytes += 2
-
-    # now fix sizes in header
-    f.seek(2)
-    f.write( longToString( 54 + 256*4 + pixelBytes ) )   # DWORD size in bytes of the file
-    f.seek(34)
-    f.write( longToString( pixelBytes ) )   # DWORD size in bytes of the file
-
-    # close file
-    f.close()
-    
-  def saveFile( self, filename, compress=False ):
-    if compress:
-      _b = self._saveBitMapWithCompression( filename )
-    else:
-      _b = self._saveBitMapNoCompression( )
-    
-    f = open(filename, 'wb')
-    f.write(bytes(map(ord, _b)))
-    f.close()
-  
-  def getBitmap(self, compress=False):
-    _b = ''
-    if  compress:
-      print('Not yet implemented')
-    else:
-      _b = self._saveBitMapNoCompression()
-    
-    return _b
-
-
-  def _drawFont(self, start_x, start_y, data):
-    max_width = 0
-    # empty font, like space
-    if len(data) == 0:
-      return (0, 0)
-
-    start_y += data[0]
-    for data_y in range(1, len(data)):
-        
-      # calculate maximum font width
-      if len(data[data_y]) > max_width:
-        max_width = len(data[data_y])
-        
-      for data_x in range(0, len(data[data_y])):
-        #d_x = start_x * 3 + data_x * 3
-        d_x = start_x + data_x
-        if data[data_y][data_x] == '1':
-          self.plotPoint(d_x, start_y + data_y)
-
-    width = max_width
-    height = len(data)
-
-    return (width, height)
-
-  def drawText(self, text, x, y):
-    offset_x = 0
-    offset_y = 0
-    for idx in range(0, len(text)):
-      (width, height) = self._drawFont(x + offset_x, y + offset_y, self.font[ord(text[idx])])
-      offset_x += (width + 1)
-
-  def setFont(self, font_data):
-    self.font = font_data
-  
-  def loadImage(self, image):
-    
-    width = stringToLong(image, 0x12)
-    height = stringToLong(image, 0x16)
-    self.wd = width
-    self.ht = height
-    self.bgcolor = 0
-    self.fgcolor = 0
-    self.palette = []
-    self.currentPen = 0
-    
-    bitarray = []
-    bitarray.append([])
-    
-    row_idx = 0
-    col_idx = 0
-    idx_offset = stringToLong(image, 0xa)
-    idx = idx_offset
-    line_padding = (4 - ( width % 4 ) ) % 4
-    bytes_in_row = width*3 + line_padding
-    
-    while (idx+3) <= len(image):
-      if col_idx >= width:
-        # end of row, dismiss padding
-        row_idx += 1
-        idx += line_padding
-        col_idx = 0
-        if idx + 3 > len(image):
-          break
-        # add new row to image
-        bitarray.append([])
-       
-      c = Color(ord(image[idx+2]), ord(image[idx+1]), ord(image[idx]))
-      # register palette
-      colorNum = c.toLong()
-      try:
-        self.currentPen = self.palette.index(colorNum)
-      except ValueError:
-        if len( self.palette ) < 256 :
-          self.palette.append(colorNum)
-          self.currentPen = len( self.palette ) - 1
-        else:
-          self.currentPen = self.fgcolor
-      
-      bitarray[row_idx].append(self.currentPen)
-      idx += 3
-      col_idx += 1
-    
-    # this is it
-    bitarray.reverse()
-    self.bitarray = bitarray
+# Number Manipulation Functions:
+#     abs_diff(a, b) -> number
+#     get_addr(offset, start, end) -> address
+#     direction(number) -> -1, 0, +1
+#     uint_cast(number) -> uint
+#     left_shift(number, shift) -> number
+#     right_shift(number, shift) -> number
+#     divmod(x, y) -> div, mod
+#     value_to_array(value) -> array
+#     array_to_value(array) -> value
+#     uint_bits(number) -> bits
+#     uint_xor(a, b) -> xor_value
 
 ################################################################################
 
-PALETTE = tuple(value for key, value in vars(Color).items() if key.isupper())
+# Error 1   = Copy's two ranges are not equal.
+# Error 2   = abs_diff(2, 1) != 1
+# Error 3   = abs_diff(1, 2) != 1
+# Error 4   = get_addr(1, 1, 4) != 2
+# Error 5   = get_addr(2, 1, 4) != 3
+# Error 6   = get_addr(1, 4, 1) != 3
+# Error 7   = get_addr(2, 4, 1) != 2
+# Error 8   = heap[1] != 0 after clear()
+# Error 9   = heap[2] != 0 after clear()
+# Error 10  = heap[1] != 0 after clear()
+# Error 11  = heap[2] != 0 after clear()
+# Error 12  = heap[3] != 1 after copy(1, 2, 3, 4)
+# Error 13  = heap[4] != 2 after copy(1, 2, 3, 4)
+# Error 14  = heap[3] != 2 after copy(1, 2, 4, 3)
+# Error 15  = heap[4] != 1 after copy(1, 2, 4, 3)
+# Error 16  = heap[3] != 1 after copy(2, 1, 4, 3)
+# Error 17  = heap[4] != 2 after copy(2, 1, 4, 3)
+# Error 18  = heap[3] != 2 after copy(2, 1, 3, 4)
+# Error 19  = heap[4] != 1 after copy(2, 1, 3, 4)
+# Error 20  = heap[-2] != 0
+# Error 21  = heap[-2] != 1
+# Error 22  = heap[-3] != 100
+# Error 23  = heap[-4] != 200
+# Error 24  = heap[-2] != 2
+# Error 25  = heap[-5] != 300
+# Error 26  = heap[-6] != 400
+# Error 27  = Memory manager cell is out of range.
+# Error 28  = MM[0][0] != 80
+# Error 29  = MM[0][1] != 90
+# Error 30  = MM[1][0] != 100
+# Error 31  = MM[1][1] != 110
+# Error 32  = MM_insert_cell had negative index.
+# Error 33  = MM[3][1] != 40
+# Error 34  = MM[3][0] != 31
+# Error 35  = MM[2][1] != 30
+# Error 36  = MM[2][0] != 21
+# Error 37  = MM[1][1] != 20
+# Error 38  = MM[1][0] != 11
+# Error 39  = MM[0][1] != 10
+# Error 40  = MM[0][0] != 1
+# Error 41  = There was a request for zero or less cells.
+# Error 42  = malloc_check_beginning accepted invalid range.
+# Error 43  = malloc_check_beginngng did not accept valid range.
+# Error 44  = MM[1][1] != 20
+# Error 45  = MM[1][0] != 11
+# Error 46  = MM[0][1] != 10
+# Error 47  = MM[0][0] != 1
+# Error 48  = malloc_check_ranges found space.
+# Error 49  = malloc_check_ranges found space.
+# Error 50  = malloc_check_ranges found space.
+# Error 51  = malloc_check_ranges did not insert at MM[1].
+# Error 52  = malloc_check_ranges did not insert at MM[2].
+# Error 53  = MM[2][1] != 30
+# Error 54  = MM[2][0] != 26
+# Error 55  = MM[1][1] != 25
+# Error 56  = MM[1][0] != 21
+# Error 57  = malloc_ranges failed head insert.
+# Error 58  = malloc_ranges failed body insert.
+# Error 59  = mallox_ranges failed tail insert.
+# Error 60  = MM[4][1] != 50
+# Error 61  = MM[4][0] != 41
+# Error 62  = MM[2][1] != 30
+# Error 63  = MM[2][0] != 21
+# Error 64  = MM[0][1] != 10
+# Error 65  = MM[0][0] != 1
+# Error 66  = malloc(1) produced bad pointer.
+# Error 67  = malloc(2) produced bad pointer.
+# Error 68  = malloc(3) produced bad pointer.
+# Error 69  = malloc(4) produced bad pointer.
+# Error 70  = Memory manager does not have four blocks.
+# Error 71  = Block four does not have the correct end.
+# Error 72  = calloc produced bad pointer.
+# Error 73  = Allocated block has bad end.
+# Error 74  = Block found in empty array.
+# Error 75  = Binary search did not find first block.
+# Error 76  = Binary search did not find middle block.
+# Error 77  = Binary search did not find last block.
+# Error 78  = Block found before allocations.
+# Error 79  = Block found after allocations.
+# Error 80  = Tried to free unknown memory block.
+# Error 81  = Tried getting cell at negative index.
+# Error 82  = Tried popping cell at negative index.
+# Error 83  = Tried popping cell beyond memory array.
+# Error 84  = memory_manager_pop_cell(0)[1] != 30
+# Error 85  = memory_manager_pop_cell(0)[0] != 21
+# Error 86  = memory_manager_pop_cell(1)[1] != 40
+# Error 87  = memory_manager_pop_cell(1)[0] != 31
+# Error 88  = memory_manager_pop_cell(0)[1] != 20
+# Error 89  = memory_manager_pop_cell(0)[0] != 11
+# Error 90  = memory_manager_pop_cell(-1)[1] != 50
+# Error 91  = memory_manager_pop_cell(-1)[0] != 41
+# Error 92  = MM[0][0] != 1
+# Error 93  = MM[1][0] != 51
+# Error 94  = MM[2][0] != 76
+# Error 95  = MM[3][0] != 101
+# Error 96  = MM[4][0] != 201
+# Error 97  = MM[5][0] != 251
+# Error 98  = MM[6][0] != 276
+# Error 99  = MM[6][1] != 375
+# Error 100 = HEAP[-2] != 0
+# Error 101 = Tried realloc unknown block.
+# Error 102 = Did not get correct block size.
+# Error 103 = Cannot deflate block to requested size.
+# Error 104 = Tried setting a negative cell.
+# Error 105 = Tried setting cell beyond array end.
+# Error 106 = MM[0][1] != 20
+# Error 107 = MM[0][0] != 11
+# Error 108 = Could not deflate block size.
+# Error 109 = Cannot inflate block to requested size.
+# Error 110 = Could not inflate block size.
+# Error 111 = Potential after was not calculated correctly.
+# Error 112 = Potential before (0) was not calculated correctly.
+# Error 113 = Potential before (1) was not calculated correctly.
+# Error 114 = Compression vector (0) was not calculated correctly.
+# Error 115 = Compression vector (1) was not calculated correctly.
+# Error 116 = Wrong number of blocks allocated (should be 4).
+# Error 117 = Wrong number of blocks allocated (should be 3).
+# Error 118 = Memory does not compare equal.
+# Error 119 = Wrong number of blocks allocated (should be 0).
+# Error 120 = compare_memory given negative length.
+# Error 121 = Cells did not evaluate to equal.
+# Error 122 = !(Cell A > Cell B)
+# Error 123 = !(Cell A < Cell B)
+# Error 124 = Empty comparison does not return equal.
+# Error 125 = Same address does not return equal.
+# Error 126 = Same values do not return equal.
+# Error 127 = First memory does not return greater than.
+# Error 128 = First memory does not return less than.
+# Error 129 = range has bad argument directions.
+# Error 130 = Negative number should have negative direction.
+# Error 131 = Zero number should have zero direction.
+# Error 132 = Positive number should have positive direction.
+# Error 133 = First range did not fill correctly.
+# Error 134 = Second range did not fill correctly.
+# Error 135 = Third range did not fill correctly.
+# Error 136 = Fourth range did not fill correctly.
+# Error 137 = Could not find block by pointer.
+# Error 138 = First block size is incorrect.
+# Error 139 = Second block size is incorrect.
+# Error 140 = Third block size is incorrect.
+# Error 141 = Mark did not perform correctly.
+# Error 142 = Memory was not copied correctly.
+# Error 143 = Block (h) does not have correct size.
+# Error 144 = Block (j) does not have correct size.
+# Error 145 = Blocks do not have same content.
+# Error 146 = Block addresses do not match.
+# Error 147 = stack[-1] was not correct.
+# Error 148 = stack[-2] was not correct.
+# Error 149 = stack[-3] was not correct.
+# Error 150 = stack[-1] was not correct.
+# Error 151 = stack[-2] was not correct.
+# Error 152 = stack[-3] was not correct.
+# Error 153 = Block should not have been moved.
+# Error 154 = Size was not set correctly.
+# Error 155 = Block should not have been moved.
+# Error 156 = Size was not set correctly.
+# Error 157 = Block should have been moved to front of memory.
+# Error 158 = Size was not set correctly.
+# Error 159 = Block was not correctly copied.
+# Error 160 = Block was not moved to end of memory.
+# Error 161 = Memory does not appear the same.
+# Error 162 = Memory was not freed.
+# Error 163 = Memory was not freed.
+# Error 164 = Same memory was not returned.
+# Error 165 = Memory size should not have changed.
+# Error 166 = Same memory was not returned.
+# Error 167 = Memory size is not correct.
+# Error 168 = Memory was not moved to correct place.
+# Error 169 = Memory size is not correct.
+# Error 170 = Correct number of blocks not returned.
+# Error 171 = Correct number of blocks not returned.
+# Error 172 = Used memory not returned correctly.
+# Error 173 = Used memory not returned correctly.
+# Error 174 = Used memory not returned correctly.
+# Error 175 = Negative argument not accepted.
+# Error 176 = Array should have been empty.
+# Error 177 = Array should have one value.
+# Error 178 = Second item should refer to self.
+# Error 179 = array and test should be the same.
+# Error 180 = There should be two items in array.
+# Error 181 = Second item should refer to array.
+# Error 182 = Third item should refer to self.
+# Error 183 = Null pointer should have been returned.
+# Error 184 = Null pointer should have been returned.
+# Error 185 = Pointer to first cell was not returned.
+# Error 186 = Pointer to first cell was not returned.
+# Error 187 = Pointer to first cell was not returned.
+# Error 188 = Null pointer should have been returned.
+# Error 189 = Null pointer should have been returned.
+# Error 190 = Null pointer should have been returned.
+# Error 191 = Pointer to second cell was not returned.
+# Error 192 = Pointer to second cell was not returned.
+# Error 193 = Pointer to second cell was not returned.
+# Error 194 = Null pointer should have been returned.
+# Error 195 = Null pointer should have been returned.
+# Error 196 = Null pointer should have been returned.
+# Error 197 = Pointer to third cell was not returned.
+# Error 198 = Pointer to third cell was not returned.
+# Error 199 = Pointer to third cell was not returned.
+# Error 200 = Null pointer should have been returned.
+# Error 201 = Cast should have returned 0.
+# Error 202 = Cast should have returned 0.
+# Error 203 = Cast should have returned 0.
+# Error 204 = Cast should have returned 1.
+# Error 205 = Cast should have returned 1.
+# Error 206 = Cast should have returned 1.
+# Error 207 = Cast should have returned 4294967295.
+# Error 208 = Cast should have returned 4294967295.
+# Error 209 = Cast should have returned 4294967295.
+# Error 210 = Zero left shift was incorrect.
+# Error 211 = Zero right shift was incorrect.
+# Error 212 = Shift left by two was incorrect.
+# Error 213 = Shift right by two was incorrect.
+# Error 214 = Negative left shift was incorrect.
+# Error 215 = Negative right shift was incorrect.
+# Error 216 = value_to_array received a bad base.
+# Error 217 = array_to_value received a bad base.
+# Error 218 = Digit was too high for base.
+# Error 219 = Cannot save stack size less than 1.
+# Error 220 = Cannot load stack size less than 1.
+# Error 221 = There is nothing in the array.
+# Error 222 = Cannot load more than what is in array.
+# Error 223 = Array length is not correct.
+# Error 224 = Fourth element was not correct.
+# Error 225 = Array length is not correct.
+# Error 226 = First element was not correct.
+# Error 227 = Sentinel value was not correct.
+# Error 228 = Sanity check failed for save_stack.
+# Error 229 = Full reload of stack failed.
+# Error 230 = Full reload of stack failed.
+# Error 231 = Single reload of stack failed.
+# Error 232 = Double reload of stack failed.
+# Error 233 = Array resize operation failed.
+# Error 234 = Unexpected sum was detected.
+# Error 235 = First div was not correct.
+# Error 236 = First mod was not correct.
+# Error 235 = Second div was not correct.
+# Error 236 = Second mod was not correct.
+# Error 235 = Third div was not correct.
+# Error 236 = Third mod was not correct.
+# Error 237 = First sum was not correct.
+# Error 238 = Second sum was not correct.
+# Error 239 = Third sum was not correct.
+# Error 240 = Fourth sum was not correct.
+# Error 241 = Fifth sum was not correct.
+# Error 242 = Sixth sum was not correct.
+# Error 243 = Length was not written correctly.
+# Error 244 = Least significant digit is incorrect.
+# Error 245 = Middle digit is incorrect.
+# Error 246 = Most significant digit is incorrect.
+# Error 247 = Second value was incorrect.
+# Error 248 = Third value was incorrect.
+# Error 249 = Fourth value was incorrect.
+# Error 250 = Fifth value was incorrect.
+# Error 251 = Zero was expected but not found.
+# Error 252 = One through zero was expected but not found.
+# Error 253 = Date in base thirteen was expected but not found.
+# Error 254 = One hundred across bases was expected but not found.
+# Error 255 = Value from bases two to three was expected but not found.
+# Error 256 = First bit is not one.
+# Error 257 = Last bit is not one.
+# Error 258 = First bit is not zero.
+# Error 259 = Last bit is not zero.
+# Error 260 = The expected value (7) was not returned.
+# Error 261 = The expected value (255) was not returned.
+# Error 262 = The expected value (92051) was not returned.
+# Error 263 = The expected value (1033010045) was not returned.
+# Error 264 = The expected value (2554936947) was not returned.
+# Error 265 = The expected value (1747467773) was not returned.
+# Error 266 = The expected value (0) was not returned.
+# Error 267 = The expected value (2153645760) was not returned.
+# Error 268 = The expected value (4048040839) was not returned.
+# Error 269 = The expected value (265376592) was not returned.
+# Error 270 = The expected value (880511209) was not returned.
 
-if __name__ == '__main__':
-    main(2, 2, 15)
+################################################################################
+
+     call "self_test"
+     exit
+
+# def self_test():
+#     test_abs_diff()
+#     test_get_addr()
+#     test_clear()
+#     test_copy()
+#     test_memory_manager_append_cell()
+#     test_memory_manager_get_cell()
+#     test_memory_manager_insert_cell()
+#     test_malloc_check_beginning()
+#     test_malloc_check_ranges()
+#     test_malloc_ranges()
+#     test_malloc()
+#     test_calloc()
+#     test_memory_manager_search()
+#     test_memory_manager_pop_cell()
+#     test_free()
+#     test_memory_manager_get_block_size()
+#     test_memory_manager_set_cell()
+#     test_memory_manager_deflate_block()
+#     test_memory_manager_inflate_cell()
+#     test_memory_manager_potential_after()
+#     test_memory_manager_potential_before()
+#     test_memory_manager_compress()
+#     test_compare_cells()
+#     test_compare_memory()
+#     test_direction()
+#     test_range()
+#     test_memory_manager_size()
+#     test_mark()
+#     test_memory_manager_inflate_before()
+#     test_rotate_3_down()
+#     test_rotate_3_up()
+#     test_memory_manager_inflate_move()
+#     test_memory_manager_inflate_block()
+#     test_realloc()
+#     test_memory_manager_blocks()
+#     test_memory_manager_cells()
+#     test_memory_manager_pointers()
+#     test_memory_manager_find()
+#     test_uint_cast()
+#     test_shift()
+#     test_save_stack()
+#     test_load_stack()
+#     test_divmod()
+#     test_sum_length_array()
+#     test_value_to_array()
+#     test_array_to_value()
+#     test_uint_bits()
+#     test_uint_xor()
+#     test_memory_manager_hash()
+#     print('All 49 tests have passed.')
+part "self_test"
+     call "test_abs_diff"
+     call "test_get_addr"
+     call "test_clear"
+     call "test_copy"
+     call "test_memory_manager_append_cell"
+     call "test_memory_manager_get_cell"
+     call "test_memory_manager_insert_cell"
+     call "test_malloc_check_beginning"
+     call "test_malloc_check_ranges"
+     call "test_malloc_ranges"
+     call "test_malloc"
+     call "test_calloc"
+     call "test_memory_manager_search"
+     call "test_memory_manager_pop_cell"
+     call "test_free"
+     call "test_memory_manager_get_block_size"
+     call "test_memory_manager_set_cell"
+     call "test_memory_manager_deflate_block"
+     call "test_memory_manager_inflate_cell"
+     call "test_memory_manager_potential_after"
+     call "test_memory_manager_potential_before"
+     call "test_memory_manager_compress"
+     call "test_compare_cells"
+     call "test_compare_memory"
+     call "test_direction"
+     call "test_range"
+     call "test_memory_manager_size"
+     call "test_mark"
+     call "test_memory_manager_inflate_before"
+     call "test_rotate_3_down"
+     call "test_rotate_3_up"
+     call "test_memory_manager_inflate_move"
+     call "test_memory_manager_inflate_block"
+     call "test_realloc"
+     call "test_memory_manager_blocks"
+     call "test_memory_manager_cells"
+     call "test_memory_manager_pointers"
+     call "test_memory_manager_find"
+     call "test_uint_cast"
+     call "test_shift"
+     call "test_save_stack"
+     call "test_load_stack"
+     call "test_divmod"
+     call "test_sum_length_array"
+     call "test_value_to_array"
+     call "test_array_to_value"
+     call "test_uint_bits"
+     call "test_uint_xor"
+     call "test_memory_manager_hash"
+     push 0
+     push 46
+     push 100
+     push 101
+     push 115
+     push 115
+     push 97
+     push 112
+     push 32
+     push 101
+     push 118
+     push 97
+     push 104
+     push 32
+     push 115
+     push 116
+     push 115
+     push 101
+     push 116
+     push 32
+     push 57
+     push 52
+     push 32
+     push 108
+     push 108
+     push 65
+     call "print_stack_c_string"
+     back
+
+################################################################################
+
+# def print_stack_c_string():
+#     while True:
+#         value = stack[-1]
+#         if not value:
+#             stack.pop()
+#             return
+#         print(chr(stack.pop()), end='')
+part "print_stack_c_string"
+     copy
+     zero "__print_stack_c_string_return"
+     ochr
+     goto "print_stack_c_string"
+part "__print_stack_c_string_return"
+     away
+     back
+# def raise(error):
+#     print('Error:', error)
+#     sys.exit()
+part "raise"
+     push 0
+     push 32
+     push 58
+     push 114
+     push 111
+     push 114
+     push 114
+     push 69
+     push 10
+     call "print_stack_c_string"
+     oint
+     push 10
+     ochr
+     exit
+# def trace(reference):
+#     print('Trace:', reference)
+part "trace"
+     push 0
+     push 32
+     push 58
+     push 101
+     push 99
+     push 97
+     push 114
+     push 84
+     push 10
+     call "print_stack_c_string"
+     oint
+     push 10
+     ochr
+     back
+
+################################################################################
+
+# def abs_diff(a, b):
+#     c = a - b
+#     if c < 0:
+#         return 0 - c
+#     return c
+part "abs_diff"
+     sub
+     copy
+     less "__abs_diff_sign"
+     back
+part "__abs_diff_sign"
+     push 0
+     swap
+     sub
+     back
+# def get_addr(offset, start, end):
+#     if end < start:
+#         return start - offset
+#     return offset + start
+part "get_addr"
+     copy 1
+     sub
+     less "__get_addr_reverse"
+     add
+     back
+part "__get_addr_reverse"
+     swap
+     sub
+     back
+# clear(start_addr, end_addr):
+#     if start_addr < end_addr:
+#         start_addr, end_addr = end_addr, start_addr
+#     while True:
+#         heap[end_addr] = 0
+#         if start_addr == end_addr:
+#             return
+#         end_addr += 1
+part "clear"
+     copy 1
+     copy 1
+     sub
+     less "__clear_swap"
+part "__clear_loop"
+     copy
+     push 0
+     set
+     copy 1
+     copy 1
+     sub
+     zero "__clear_return"
+     push 1
+     add
+     goto "__clear_loop"
+part "__clear_swap"
+     swap
+     goto "__clear_loop"
+part "__clear_return"
+     away
+     away
+     back
+# def copy(from_start, from_end, to_start, to_end):
+#     if abs_diff(from_start, from_end) != abs_diff(to_start, to_end):
+#         raise Exception(1)
+#     offset = 0
+#     while True:
+#         to_addr = get_addr(offset, to_start, to_end)
+#         from_addr = get_addr(offset, from_start, from_end)
+#         heap[to_addr] = heap[from_addr]
+#         if to_addr == to_end:
+#             return
+#         offset += 1
+part "copy"
+     copy 3
+     copy 3
+     call "abs_diff"
+     copy 2
+     copy 2
+     call "abs_diff"
+     sub
+     zero "__copy_no_arg_error"
+     push 1
+     call "raise"
+part "__copy_no_arg_error"
+     push 0
+part "__copy_loop"
+     copy
+     copy 3
+     copy 3
+     call "get_addr"
+     copy
+     copy 2
+     copy 7
+     copy 7
+     call "get_addr"
+     get
+     set
+     copy 2
+     sub
+     zero "__copy_return"
+     push 1
+     add
+     goto "__copy_loop"
+part "__copy_return"
+     away 4
+     away
+     back
+# def memory_manager_append_cell(start, end):
+#     heap[-2] += 1
+#     addr = -2 * heap[-2] - 1
+#     heap[addr] = start
+#     heap[addr - 1] = end
+part "memory_manager_append_cell"
+     push -2
+     copy
+     copy
+     copy
+     get
+     push 1
+     add
+     set
+     get
+     mul
+     push 1
+     sub
+     copy
+     copy 3
+     set
+     push 1
+     sub
+     swap
+     set
+     away
+     back
+# def memory_manger_get_cell(index):
+#     if index < 0:
+#         raise Exception(81)
+#     if index < HEAP[-2]:
+#         address = -2 * index - 3
+#         start_addr = HEAP[address]
+#         stop_addr = HEAP[address - 1]
+#         return start_addr, stop_addr
+#     raise Exception(27)
+part "memory_manager_get_cell"
+     copy
+     less "__memory_manager_get_cell_under_zero"
+     copy
+     push -2
+     get
+     sub
+     less "__memory_manager_get_cell_in_range"
+     push 27
+     call "raise"
+part "__memory_manager_get_cell_under_zero"
+     push 81
+     call "raise"
+part "__memory_manager_get_cell_in_range"
+     push -2
+     mul
+     push 3
+     sub
+     copy
+     get
+     swap
+     push 1
+     sub
+     get
+     back
+# def memory_manager_insert_cell(start, end, index):
+#     if index < 0:
+#         raise Exception(32)
+#     if index - HEAP[-2] < 0:
+#         address = -2 * index - 3
+#         from_end = (HEAP[-2] + 1) * -2
+#         from_start, from_end = from_end, address
+#         to_start = address - 2
+#         to_end = from_end - 2
+#         copy(from_start, from_end, to_start, to_end)
+#         HEAP[address - 1] = end
+#         HEAP[address] = start
+#         HEAP[-2] += 1
+#     else:
+#         memory_manager_append_cell(start, end)
+part "memory_manager_insert_cell"
+     copy
+     less "__memory_manager_insert_cell_bad_index"
+     copy
+     push -2
+     get
+     sub
+     less "__memory_manager_insert_cell_continue"
+     away
+     call "memory_manager_append_cell"
+     back
+part "__memory_manager_insert_cell_bad_index"
+     push 32
+     call "raise"
+part "__memory_manager_insert_cell_continue"
+     push -2
+     mul
+     push 3
+     sub
+     copy
+     push -2
+     push 1
+     push -2
+     get
+     add
+     mul
+     swap
+     copy 1
+     push 2
+     sub
+     copy 1
+     push 2
+     sub
+     call "copy"
+     swap
+     copy 1
+     push 1
+     sub
+     swap
+     set
+     swap
+     set
+     push -2
+     copy
+     get
+     push 1
+     add
+     set
+     back
+# def malloc_check_beginning(cells):
+#     start = memory_manager_get_cell(0)[0]
+#     open_space = start - HEAP[-1]
+#     if cells > open_space:
+#         return False
+#     start = HEAP[-1]
+#     end = cells + start - 1
+#     memory_manager_insert_cell(start, end, 0)
+#     return True
+part "malloc_check_beginning"
+     copy
+     push 0
+     call "memory_manager_get_cell"
+     away
+     push -1
+     get
+     sub
+     sub
+     copy
+     less "__malloc_check_beginning_insert"
+     copy
+     zero "__malloc_check_beginning_insert"
+     push 0
+     away 2
+     back
+part "__malloc_check_beginning_insert"
+     away
+     push -1
+     get
+     swap
+     copy 1
+     add
+     push 1
+     sub
+     push 0
+     call "memory_manager_insert_cell"
+     push 1
+     back
+# def malloc_check_ranges(cells):
+#     if HEAP[-2] >= 2:
+#         index = 0
+#         while index + 1 < HEAP[-2]:
+#             end = memory_manager_get_cell(index)[1]
+#             start = memory_manager_get_cell(index + 1)[0]
+#             empty_space = end - start
+#             excess = empty_space + cells
+#             if excess < 0:
+#                 location = index + 1
+#                 end = memory_manager_get_cell(index)[1]
+#                 new_end = end + cells
+#                 new _start = end + 1
+#                 memory_manager_insert_cell(new_start, new_end, location)
+#                 return location
+#             index += 1
+#     return -1
+part "malloc_check_ranges"
+     push -2
+     copy
+     get
+     add
+     less "__malloc_check_ranges_unable"
+     push 0
+part "__malloc_check_ranges_loop_check"
+     copy
+     push 1
+     add
+     push -2
+     get
+     sub
+     less "__malloc_check_ranges_loop_body"
+     away
+part "__malloc_check_ranges_unable"
+     away
+     push -1
+     back
+part "__malloc_check_ranges_loop_body"
+     copy
+     call "memory_manager_get_cell"
+     away 1
+     copy 1
+     push 1
+     add
+     call "memory_manager_get_cell"
+     away
+     sub
+     copy 2
+     add
+     less "__malloc_check_ranges_found"
+     push 1
+     add
+     goto "__malloc_check_ranges_loop_check"
+part "__malloc_check_ranges_found"
+     copy
+     push 1
+     add
+     swap
+     call "memory_manager_get_cell"
+     away 1
+     copy
+     copy 3
+     add
+     swap
+     push 1
+     add
+     swap
+     copy 2
+     call "memory_manager_insert_cell"
+     away 1
+     back
+# def malloc_ranges(cells):
+#     if malloc_check_beginning(cells):
+#         return HEAP[-1]
+#     index = malloc_check_ranges(cells)
+#     if index == -1:
+#         address = -2 * HEAP[-2] - 2
+#         end = HEAP[address]
+#         new_end = end + cells
+#         new start = end + 1
+#         memory_manager_append_cell(new_start, new_end)
+#         return new_start
+#     return memory_manager_get_cell(index)[0]
+part "malloc_ranges"
+     copy
+     call "malloc_check_beginning"
+     zero "__malloc_ranges_not_beginning"
+     away
+     push -1
+     get
+     back
+part "__malloc_ranges_not_beginning"
+     copy
+     call "malloc_check_ranges"
+     copy
+     push 1
+     add
+     zero "__malloc_ranges_append"
+     call "memory_manager_get_cell"
+     swap
+     away 2
+     back
+part "__malloc_ranges_append"
+     away
+     push -2
+     copy
+     copy
+     get
+     mul
+     add
+     get
+     swap
+     copy 1
+     add
+     swap
+     push 1
+     add
+     swap
+     copy 1
+     swap
+     call "memory_manager_append_cell"
+     back
+# def malloc(cells):
+#     if cells <= 0:
+#         raise Exception(41)
+#     if not heap[-2]:
+#         start = heap[-1]
+#         end = start + cells - 1
+#         memory_manager_append_cell(start, end)
+#         return start
+#     return malloc_ranges(cells)
+part "malloc"
+     copy
+     less "__malloc_bad_argument"
+     copy
+     zero "__malloc_bad_argument"
+     push -2
+     get
+     zero "__malloc_start"
+     call "malloc_ranges"
+     back
+part "__malloc_bad_argument"
+     push 41
+     call "raise"
+part "__malloc_start"
+     push -1
+     get
+     copy
+     copy
+     copy 3
+     add
+     push 1
+     sub
+     call "memory_manager_append_cell"
+     away 1
+     back
+# def calloc(block_count, block_size):
+#     return malloc(block_count * block_size)
+part "calloc"
+     mul
+     call "malloc"
+     back
+# def memory_manager_search(pointer):
+#     size = HEAP[-2]
+#     if not size:
+#         return -1
+#     last = size - 1
+#     first = 0
+#     while first <= last:
+#         index = (last + first) // 2
+#         value = memory_manager_get_cell(index)[0]
+#         if value < pointer:
+#             first = index + 1
+#         elif value == pointer:
+#             return index
+#         else:
+#             last = index - 1
+#     return -1
+part "memory_manager_search"
+     push -2
+     get
+     copy
+     zero "__memory_manager_search_not_found"
+     push 1
+     sub
+     push 0
+part "__memory_manager_search_loop_test"
+     copy
+     copy 2
+     sub
+     copy
+     less "__memory_manager_search_loop_body_away"
+     zero "__memory_manager_search_loop_body"
+     goto "__memory_manager_search_not_found_away"
+part "__memory_manager_search_loop_body_away"
+     away
+part "__memory_manager_search_loop_body"
+     copy 1
+     copy 1
+     add
+     push 2
+     div
+     copy
+     call "memory_manager_get_cell"
+     away
+     copy 4
+     sub
+     copy
+     less "__memory_manager_search_high"
+     zero "__memory_manager_search_return"
+     push 1
+     sub
+     swap
+     push 0
+     swap
+     set
+     away 1
+     push 0
+     get
+     goto "__memory_manager_search_loop_test"
+part "__memory_manager_search_return"
+     away 3
+     back
+part "__memory_manager_search_high"
+     away
+     away 1
+     push 1
+     add
+     goto "__memory_manager_search_loop_test"
+part "__memory_manager_search_not_found_away"
+     away
+part "__memory_manager_search_not_found"
+     push -1
+     away 2
+     back
+# def memory_manager_pop_cell(index):
+#     if index == -1:
+#         index = HEAP[-2] - 1
+#     if index < 0:
+#         raise Exception(82)
+#     if index < HEAP[-2]:
+#         a, b = memory_manager_get_cell(index)
+#         HEAP[-2] -= 1
+#         if index != HEAP[-2]:
+#             from_start = -2 * index - 5
+#             from_end = (HEAP[-2] + 2) * -2
+#             to_start = from_start + 2
+#             to_end = from_end + 2
+#             copy(from_start, from_end, to_start, to_end)
+#         start = -2 * HEAP[-2] - 3
+#         end = start - 1
+#         clear(start, end)
+#         return a, b
+#     raise Exception(83)
+part "memory_manager_pop_cell"
+     copy
+     push 1
+     add
+     zero "__memory_manager_pop_cell_last_cell"
+part "__memory_manager_pop_cell_negative_index_check"
+     copy
+     less "__memory_manager_pop_cell_negative_index_raise"
+     copy
+     push -2
+     get
+     sub
+     less "__memory_manager_pop_cell_index_okay"
+     push 83
+     call "raise"
+part "__memory_manager_pop_cell_index_okay"
+     copy
+     call "memory_manager_get_cell"
+     push -1
+     push -2
+     get
+     add
+     copy
+     push -2
+     swap
+     set
+     copy
+     copy 4
+     sub
+     zero "__memory_manager_pop_cell_clear_end"
+     push -5
+     push -2
+     copy 5
+     mul
+     add
+     push -2
+     push 2
+     copy 3
+     add
+     mul
+     copy 1
+     push 2
+     add
+     copy 1
+     push 2
+     add
+     call "copy"
+part "__memory_manager_pop_cell_clear_end"
+     push -2
+     mul
+     push 3
+     sub
+     copy
+     push 1
+     sub
+     call "clear"
+     push 0
+     swap
+     set
+     away 1
+     push 0
+     get
+     back
+part "__memory_manager_pop_cell_negative_index_raise"
+     push 82
+     call "raise"
+part "__memory_manager_pop_cell_last_cell"
+     push -2
+     get
+     add
+     goto "__memory_manager_pop_cell_negative_index_check"
+# def free(pointer):
+#     index = memory_manager_search(pointer)
+#     if index == -1:
+#         raise Exception(80)
+#     memory_manager_pop_cell(index)
+part "free"
+     call "memory_manager_search"
+     copy
+     push 1
+     add
+     zero "__free_not_found"
+     call "memory_manager_pop_cell"
+     away
+     away
+     back
+part "__free_not_found"
+     push 80
+     call "raise"
+     back
+# def memory_manager_get_block_size(index):
+#     start, end = memory_manager_get_cell(index)
+#     return end - start + 1
+part "memory_manager_get_block_size"
+     call "memory_manager_get_cell"
+     swap
+     sub
+     push 1
+     add
+     back
+# def memory_manager_set_cell(start, end, index):
+#     if index < 0:
+#         raise Exception(104)
+#     if index < HEAP[-2]:
+#         address = -2 * index - 4
+#         HEAP[address] = end
+#         HEAP[address + 1] = start
+#         return
+#     raise Exception(105)
+part "memory_manager_set_cell"
+     copy
+     less "__memory_manager_set_cell_negative"
+     copy
+     push -2
+     get
+     sub
+     less "__memory_manager_set_cell_in_range"
+     push 105
+     call "raise"
+part "__memory_manager_set_cell_negative"
+     push 104
+     call "raise"
+part "__memory_manager_set_cell_in_range"
+     push -2
+     mul
+     push 4
+     sub
+     copy
+     copy 2
+     set
+     push 1
+     add
+     away 1
+     swap
+     set
+     back
+# def memory_manager_deflate_block(cells, index):
+#     size = memory_manager_get_block_size(index)
+#     if cells < size:
+#         start, end = memory_manager_get_cell(index)
+#         end = start + cells - 1
+#         memory_manager_set_cell(start, end, index)
+#         return
+#     raise Exception(103)
+part "memory_manager_deflate_block"
+     copy
+     call "memory_manager_get_block_size"
+     copy 2
+     swap
+     sub
+     less "__memory_manager_deflate_block_continue"
+     push 103
+     call "raise"
+part "__memory_manager_deflate_block_continue"
+     copy
+     call "memory_manager_get_cell"
+     away
+     copy
+     copy 3
+     push 1
+     sub
+     add
+     copy 2
+     call "memory_manager_set_cell"
+     away
+     away
+     back
+# def memory_manager_inflate_cell(cells, index):
+#     size = memory_manager_get_block_size(index)
+#     if size < cells:
+#         start, end = memory_manager_get_cell(index)
+#         end = start + cells - 1
+#         memory_manager_set_cell(start, end, index)
+#         return
+#     raise Exception(109)
+part "memory_manager_inflate_cell"
+     copy
+     call "memory_manager_get_block_size"
+     copy 2
+     sub
+     less "__memory_manager_inflate_cell_continue"
+     push 109
+     call "raise"
+part "__memory_manager_inflate_cell_continue"
+     copy
+     call "memory_manager_get_cell"
+     away
+     copy
+     copy 3
+     push 1
+     sub
+     add
+     copy 2
+     call "memory_manager_set_cell"
+     away
+     away
+     back
+# def memory_manager_potential_after(index):
+#     size = memory_manager_get_block_size(index)
+#     start = memory_manager_get_cell(index + 1)[0]
+#     end = memory_manager_get_cell(index)[1]
+#     empty = start - end - 1
+#     return size + empty
+part "memory_manager_potential_after"
+     copy
+     call "memory_manager_get_block_size"
+     copy 1
+     push 1
+     add
+     call "memory_manager_get_cell"
+     away
+     copy 2
+     call "memory_manager_get_cell"
+     away 1
+     sub
+     push 1
+     sub
+     add
+     away 1
+     back
+# def memory_manager_potential_before(index):
+#     if index == 0:
+#         head = HEAP[-3]
+#         start = HEAP[-1]
+#         space = head - start
+#     else:
+#         start = memory_manager_get_cell(index)[0]
+#         end = memory_manager_get_cell(index - 1)[1]
+#         space = start - end - 1
+#     return space + memory_manager_potential_after(index)
+part "memory_manager_potential_before"
+     copy
+     zero "__memory_manager_potential_before_head"
+     copy
+     call "memory_manager_get_cell"
+     away
+     copy 1
+     push 1
+     sub
+     call "memory_manager_get_cell"
+     away 1
+     sub
+     push 1
+     sub
+     goto "__memory_manager_potential_before_total"
+part "__memory_manager_potential_before_head"
+     push -3
+     get
+     push -1
+     get
+     sub
+part "__memory_manager_potential_before_total"
+     copy 1
+     call "memory_manager_potential_after"
+     add
+     away 1
+     back
+# def memory_manager_compress(index):
+#     if index == 0:
+#         return HEAP[-1]
+#     return memory_manager_get_cell(index - 1)[1] + 1
+part "memory_manager_compress"
+     copy
+     zero "__memory_manager_compress_start"
+     push 1
+     sub
+     call "memory_manager_get_cell"
+     away 1
+     push 1
+     add
+     back
+part "__memory_manager_compress_start"
+     away
+     push -1
+     get
+     back
+# compare_cells(addr_a, addr_b):
+#    b = HEAP[addr_b]
+#    a = HEAP[addr_a]
+#    if b == a:
+#        return 0
+#    if b < a:
+#        return 1
+#    return -1 
+part "compare_cells"
+     get
+     swap
+     get
+     sub
+     copy
+     zero "__compare_cells_equal"
+     less "__compare_cells_greater"
+     push -1
+     back
+part "__compare_cells_greater"
+     push 1
+     back
+part "__compare_cells_equal"
+     push 0
+     away 1
+     back
+# def compare_memory(a, b, length):
+#     if length < 0:
+#         raise Exception(120)
+#     if length == 0:
+#         return 0
+#     if a == b:
+#         return 0
+#     offset = 0
+#     while offset < length:
+#         addr_a = a + offset
+#         addr_b = b + offset
+#         value = compare_cells(addr_a, addr_b)
+#         if value == 0:
+#             offset += 1
+#         elif value < 0:
+#             return -1
+#         else:
+#             return 1
+#     return 0
+part "compare_memory"
+     copy
+     less "__compare_memory_negative_length"
+     copy
+     zero "__compare_memory_equal_buffers"
+     copy 2
+     copy 2
+     sub
+     zero "__compare_memory_equal_buffers"
+     push 0
+part "__compare_memory_loop_test"
+     copy
+     copy 2
+     sub
+     less "__compare_memory_loop_body"
+     away
+part "__compare_memory_equal_buffers"
+     push 0
+     away 3
+     back
+part "__compare_memory_negative_length"
+     push 120
+     call "raise"
+part "__compare_memory_loop_body"
+     copy 3
+     copy 1
+     add
+     copy 3
+     copy 2
+     add
+     call "compare_cells"
+     copy
+     zero "__compare_memory_inc_offset"
+     less "__compare_memory_less_than"
+     push 1
+     away 4
+     back
+part "__compare_memory_less_than"
+     push -1
+     away 4
+     back
+part "__compare_memory_inc_offset"
+     away
+     push 1
+     add
+     goto "__compare_memory_loop_test"
+# def direction(number):
+#     if number:
+#         if number > 0:
+#             return 1
+#         return -1
+#     return number
+part "direction"
+     copy
+     zero "__direction_zero"
+     less "__direction_negative"
+     push 1
+     back
+part "__direction_negative"
+     push -1
+part "__direction_zero"
+     back
+# def range(address, start, stop, step):
+#     if direction(stop - start) != direction(step):
+#         raise Exception(129)
+#     value = start
+#     while (value > stop) if direction(step) < 0 else (value < stop):
+#         offset = (value - start) // step
+#         HEAP[offset + address] = value
+#         value += step
+part "range"
+     copy 1
+     copy 3
+     sub
+     call "direction"
+     copy 1
+     call "direction"
+     sub
+     zero "__range_loop_setup"
+     push 129
+     call "raise"
+part "__range_loop_setup"
+     copy 2
+part "__range_loop_test"
+     copy
+     copy 3
+     copy 3
+     call "direction"
+     less "__range_switch_compare"
+part "__range_do_compare"
+     sub
+     less "__range_loop_body"
+     away 4
+     away
+     back
+part "__range_switch_compare"
+     swap
+     goto "__range_do_compare"
+part "__range_loop_body"
+     copy
+     copy 4
+     sub
+     copy 2
+     div
+     copy 5
+     add
+     copy 1
+     set
+     copy 1
+     add
+     goto "__range_loop_test"
+# def memory_manager_size(pointer):
+#     index = memory_manager_search(pointer)
+#     if index < 0:
+#         raise Exception(137)
+#     a, b = memory_manager_get_cell(index)
+#     return b - a + 1
+part "memory_manager_size"
+     call "memory_manager_search"
+     copy
+     less "__memory_manager_size_not_found"
+     call "memory_manager_get_cell"
+     swap
+     sub
+     push 1
+     add
+     back
+part "__memory_manager_size_not_found"
+     push 137
+     call "raise"
+     back
+# def mark(pointer):
+#     size = memory_manager_size(pointer)
+#     range(pointer, 1, size + 1, 1)
+part "mark"
+     push 1
+     copy 1
+     call "memory_manager_size"
+     push 1
+     add
+     push 1
+     call "range"
+     back
+# def memory_manager_inflate_before(pointer, cells, index):
+#     from_start, from_end = memory_manager_get_cell(index)
+#     to_start = memory_manager_compress(index)
+#     to_end = to_start + from_end - from_start
+#     copy(from_start, from_end, to_start, to_end)
+#     to_end = to_start + cells - 1
+#     memory_manager_set_cell(to_start, to_end, index)
+#     return to_start
+part "memory_manager_inflate_before"
+     copy
+     call "memory_manager_get_cell"
+     copy 2
+     call "memory_manager_compress"
+     copy
+     copy 2
+     copy 4
+     sub
+     add
+     push 0
+     copy 2
+     set
+     call "copy"
+     push 0
+     get
+     copy
+     copy
+     copy 4
+     add
+     push 1
+     sub
+     copy 3
+     call "memory_manager_set_cell"
+     away 3
+     back
+# def rotate_3_down():
+#     HEAP[0] = stack.pop()
+#     stack[-1], stack[-2] = stack[-2], stack[-1]
+#     stack.push(HEAP[0])
+#     stack[-1], stack[-2] = stack[-2], stack[-1]
+part "rotate_3_down"
+     push 0
+     swap
+     set
+     swap
+     push 0
+     get
+     swap
+     back
+# def rotate_3_up():
+#     stack[-1], stack[-2] = stack[-2], stack[-1]
+#     HEAP[0] = stack.pop()
+#     stack[-1], stack[-2] = stack[-2], stack[-1]
+#     stack.push(HEAP[0])
+part "rotate_3_up"
+     swap
+     push 0
+     swap
+     set
+     swap
+     push 0
+     get
+     back
+# def memory_manager_inflate_move(pointer, cells, index):
+#     from_start, from_end = memory_manager_get_cell(index)
+#     new = malloc(cells)
+#     to_start = new
+#     to_end = new + from_end - from_start
+#     copy(from_start, from_end, to_start, to_end)
+#     free(pointer)
+#     return new
+part "memory_manager_inflate_move"
+     call "memory_manager_get_cell"
+     call "rotate_3_down"
+     call "malloc"
+     call "rotate_3_up"
+     copy 2
+     copy
+     copy 2
+     add
+     copy 3
+     sub
+     call "copy"
+     swap
+     call "free"
+     back
+# def memory_manager_inflate_block(pointer, cells, index):
+#     if index == HEAP[-2] - 1:
+#         memory_manager_inflate_cell(cells, index)
+#         return pointer
+#     potential = memory_manager_potential_after(index)
+#     if potential < cells:
+#         potential = memory_manager_potential_before(index)
+#         if potential < cells:
+#             return memory_manager_inflate_move(pointer, cells, index)
+#         return memory_manager_inflate_before(pointer, cells, index)
+#     memory_manager_inflate_cell(cells, index)
+#     return pointer
+part "memory_manager_inflate_block"
+     copy
+     push -2
+     get
+     push 1
+     sub
+     sub
+     zero "__memory_manager_inflate_block_cell"
+     copy
+     call "memory_manager_potential_after"
+     copy 2
+     sub
+     less "__memory_manager_inflate_block_not_after"
+part "__memory_manager_inflate_block_cell"
+     call "memory_manager_inflate_cell"
+     back
+part "__memory_manager_inflate_block_not_after"
+     copy
+     call "memory_manager_potential_before"
+     copy 2
+     sub
+     less "__memory_manager_inflate_block_not_before"
+     call "memory_manager_inflate_before"
+     back
+part "__memory_manager_inflate_block_not_before"
+     call "memory_manager_inflate_move"
+     back
+# def realloc(pointer, cells):
+#     if cells <= 0:
+#         free(pointer)
+#         return 0
+#     index = memory_manager_search(pointer)
+#     if index == -1:
+#         raise Exception(101)
+#     size = memory_manager_get_block_size(index)
+#     if cells == size:
+#         return pointer
+#     if cells < size:
+#         memory_manager_deflate_block(cells, index)
+#         return pointer
+#     return memory_manager_inflate_block(pointer, cells, index)
+part "realloc"
+     copy
+     less "__realloc_free"
+     copy
+     zero "__realloc_free"
+     copy 1
+     call "memory_manager_search"
+     copy
+     push 1
+     add
+     zero "__realloc_not_found"
+     copy
+     call "memory_manager_get_block_size"
+     copy 2
+     swap
+     sub
+     copy
+     zero "__realloc_return_pointer"
+     less "__realloc_return_deflate"
+     call "memory_manager_inflate_block"
+     back
+part "__realloc_free"
+     away
+     call "free"
+     push 0
+     back
+part "__realloc_not_found"
+     push 101
+     call "raise"
+part "__realloc_return_pointer"
+     away 2
+     away
+     back
+part "__realloc_return_deflate"
+     call "memory_manager_deflate_block"
+     back
+# def memory_manager_blocks():
+#     return HEAP[-2]
+part "memory_manager_blocks"
+     push -2
+     get
+     back
+# def memory_manager_cells():
+#     blocks = HEAP[-2]
+#     index = 0
+#     total = 0
+#     while index < blocks:
+#         addr = (index + 2) * -2
+#         end = HEAP[addr]
+#         start = HEAP[addr + 1]
+#         size = end - start + 1
+#         total += size
+#         index += 1
+#     return total
+part "memory_manager_cells"
+     push -2
+     get
+     push 0
+     push 0
+part "__memory_manager_cells_loop_test"
+     copy 1
+     copy 3
+     sub
+     less "__memory_manager_cells_loop_body"
+     away 2
+     back
+part "__memory_manager_cells_loop_body"
+     copy 1
+     push 2
+     add
+     push -2
+     mul
+     copy
+     get
+     swap
+     push 1
+     add
+     get
+     sub
+     push 1
+     add
+     add
+     swap
+     push 1
+     add
+     swap
+     goto "__memory_manager_cells_loop_test"
+# def memory_manager_pointers(include_self):
+#     bool = direction(include_self)
+#     if bool < 0:
+#         raise Exception(175)
+#     pointer_count = HEAP[-2] + bool
+#     array_length = pointer_count + 1
+#     array = malloc(array_length)
+#     HEAP[array] = pointer_count
+#     mm_size = HEAP[-2]
+#     array_address = array + 1
+#     index = 0
+#     while index < mm_size:
+#         mm_addr = -2 * index - 3
+#         pointer = HEAP[mm_addr]
+#         if pointer != array or bool:
+#             HEAP[array_address] = pointer
+#             array_address += 1
+#         index += 1
+#     return array
+part "memory_manager_pointers"
+     call "direction"
+     copy
+     less "__memory_manager_pointers_bad_bool"
+     copy
+     push -2
+     get
+     add
+     copy
+     push 1
+     add
+     call "malloc"
+     swap
+     copy 1
+     swap
+     set
+     push -2
+     get
+     copy 1
+     push 1
+     add
+     push 0
+part "__memory_manager_pointers_loop_test"
+     copy
+     copy 3
+     sub
+     less "__memory_manager_pointers_loop_body"
+     away
+     away
+     away
+     away 1
+     back
+part "__memory_manager_pointers_bad_bool"
+     push 175
+     call "raise"
+part "__memory_manager_pointers_loop_body"
+     copy
+     push -2
+     mul
+     push 3
+     sub
+     get
+     copy
+     copy 5
+     sub
+     zero "__memory_manager_pointers_check_bool"
+part "__memory_manager_pointers_add_pointer"
+     copy 2
+     swap
+     set
+     swap
+     push 1
+     add
+     swap
+part "__memory_manager_pointers_inc_index"
+     push 1
+     add
+     goto "__memory_manager_pointers_loop_test"
+part "__memory_manager_pointers_check_bool"
+     copy 5
+     zero "__memory_manager_pointers_away_inc_index"
+     goto "__memory_manager_pointers_add_pointer"
+part "__memory_manager_pointers_away_inc_index"
+     away
+     goto "__memory_manager_pointers_inc_index"
+# def memory_manager_find(address):
+#     size = HEAP[-2]
+#     if not size:
+#         return 0
+#     last = size - 1
+#     first = 0
+#     while first <= last:
+#         index = (last + first) // 2
+#         addr = -2 * index - 4
+#         b = HEAP[addr]
+#         a = HEAP[addr + 1]
+#         if a <= address <= b:
+#             return a
+#         if a < address:
+#             first = index + 1
+#         else:
+#             last = index - 1
+#     return 0
+part "memory_manager_find"
+     push -2
+     get
+     copy
+     zero "__memory_manager_find_null"
+     push 1
+     sub
+     push 0
+part "__memory_manager_find_loop_test"
+     copy
+     copy 2
+     sub
+     copy
+     less "__memory_manager_find_loop_body_away"
+     zero "__memory_manager_find_loop_body"
+     away
+part "__memory_manager_find_null"
+     push 0
+     away 2
+     back
+part "__memory_manager_find_loop_body_away"
+     away
+part "__memory_manager_find_loop_body"
+     copy 1
+     copy 1
+     add
+     push 2
+     div
+     copy
+     push -2
+     mul
+     push 4
+     sub
+     copy
+     get
+     swap
+     push 1
+     add
+     get
+     copy
+     copy 6
+     sub
+     copy
+     less "__memory_manager_find_check_b_away"
+     zero "__memory_manager_find_check_b"
+     away 1
+part "__memory_manager_find_divide"
+     copy 4
+     sub
+     less "__memory_manager_find_upper"
+     push 1
+     sub
+     push 0
+     swap
+     set
+     away 1
+     push 0
+     get
+     swap
+     goto "__memory_manager_find_loop_test"
+part "__memory_manager_find_upper"
+     away 1
+     push 1
+     add
+     goto "__memory_manager_find_loop_test"
+part "__memory_manager_find_check_b_away"
+     away
+part "__memory_manager_find_check_b"
+     swap
+     copy 5
+     swap
+     sub
+     copy
+     less "__memory_manager_find_return_away"
+     zero "__memory_manager_find_return"
+     goto "__memory_manager_find_divide"
+part "__memory_manager_find_return_away"
+     away
+part "__memory_manager_find_return"
+     away 4
+     back
+# def uint_cast(number):
+#     return number % 4294967296
+part "uint_cast"
+     push 4294967296
+     mod
+     back
+# def left_shift(number, shift):
+#     if not shift:
+#         return number
+#     if shift < 0:
+#         return right_shift(number, -shift)
+#     while shift:
+#         number *= 2
+#         shift -= 1
+#     return number
+part "left_shift"
+     copy
+     zero "__left_shift_return"
+     copy
+     less "__left_shift_reverse"
+part "__left_shift_loop"
+     copy
+     zero "__left_shift_return"
+     swap
+     push 2
+     mul
+     swap
+     push 1
+     sub
+     goto "__left_shift_loop"
+part "__left_shift_return"
+     away
+     back
+part "__left_shift_reverse"
+     push 0
+     swap
+     sub
+     call "right_shift"
+     back
+# def right_shift(number, shift):
+#     if not shift:
+#         return number
+#     if shift < 0:
+#         return left_shift(number, -shift)
+#     while shift:
+#         number //= 2
+#         shift -= 1
+#     return number
+part "right_shift"
+     copy
+     zero "__right_shift_return"
+     copy
+     less "__right_shift_reverse"
+part "__right_shift_loop"
+     copy
+     zero "__right_shift_return"
+     swap
+     push 2
+     div
+     swap
+     push 1
+     sub
+     goto "__right_shift_loop"
+part "__right_shift_return"
+     away
+     back
+part "__right_shift_reverse"
+     push 0
+     swap
+     sub
+     call "left_shift"
+     back
+# def save_stack(size):
+#     if size < 1:
+#         raise Exception(219)
+#     array = malloc(size + 1)
+#     array[0] = size
+#     temp = malloc(3)
+#     temp[0] = array          // array
+#     temp[1] = size           // size
+#     temp[2] = 1              // offset
+#     while temp[2] <= temp[1]:
+#         temp[0][temp[2]] = stack.pop()
+#         temp[2] += 1
+#     array = temp[0]
+#     free(temp)
+#     return array
+part "save_stack"
+     copy
+     push 1
+     sub
+     less "__save_stack_bad_size"
+     copy
+     push 1
+     add
+     call "malloc"
+     copy
+     copy 2
+     set
+     push 3
+     call "malloc"
+     swap
+     copy 1
+     swap
+     set
+     swap
+     copy 1
+     push 1
+     add
+     swap
+     set
+     copy
+     push 2
+     add
+     push 1
+     set
+part "__save_stack_loop_test"
+     copy
+     push 2
+     add
+     get
+     copy 1
+     push 1
+     add
+     get
+     sub
+     copy
+     less "__save_stack_loop_body_away"
+     zero "__save_stack_loop_body"
+     copy
+     get
+     swap
+     call "free"
+     back
+part "__save_stack_bad_size"
+     push 219
+     call "raise"
+part "__save_stack_loop_body_away"
+     away
+part "__save_stack_loop_body"
+     copy
+     get
+     copy 1
+     push 2
+     add
+     get
+     add
+     call "rotate_3_down"
+     set
+     copy
+     push 2
+     add
+     copy
+     get
+     push 1
+     add
+     set
+     goto "__save_stack_loop_test"
+# def load_stack(array, size):
+#     if size < 1:
+#         raise Exception(220)
+#     array_size = array[0]
+#     if array_size < 1:
+#         raise Exception(221)
+#     if array_size < size:
+#         raise Exception(222)
+#     addr = array + array size
+#     temp = malloc(3)
+#     temp[0] = addr
+#     temp[1] = size
+#     temp[2] = array
+#     while temp[1] != 0:
+#         addr = temp[0]
+#         value = HEAP[addr]
+#         stack.push(value)
+#         temp[0] -= 1
+#         temp[1] -= 1
+#     array = temp[2]
+#     diff = array - temp[0]
+#     if diff < 0:
+#         array[0] = -diff
+#     else:
+#         free(array)
+#     free(temp)
+part "load_stack"
+     copy
+     push 1
+     sub
+     less "__load_stack_bad_size"
+     copy 1
+     get
+     copy
+     push 1
+     sub
+     less "__load_stack_bad_array"
+     copy
+     copy 2
+     sub
+     less "__load_stack_size_greater_than_array"
+     copy 2
+     add
+     push 3
+     call "malloc"
+     swap
+     copy 1
+     swap
+     set
+     swap
+     copy 1
+     push 1
+     add
+     swap
+     set
+     swap
+     copy 1
+     push 2
+     add
+     swap
+     set
+part "__load_stack_loop_test"
+     copy
+     push 1
+     add
+     get
+     zero "__load_stack_end_loop"
+     copy
+     get
+     get
+     swap
+     copy
+     copy
+     get
+     push 1
+     sub
+     set
+     copy
+     push 1
+     add
+     copy
+     get
+     push 1
+     sub
+     set
+     goto "__load_stack_loop_test"
+part "__load_stack_bad_size"
+     push 220
+     call "raise"
+part "__load_stack_bad_array"
+     push 221
+     call "raise"
+part "__load_stack_size_greater_than_array"
+     push 222
+     call "raise"
+part "__load_stack_end_loop"
+     copy
+     push 2
+     add
+     get
+     copy
+     copy 2
+     get
+     sub
+     copy
+     less "__load_stack_set_length"
+     away
+     call "free"
+     call "free"
+     back
+part "__load_stack_set_length"
+     push -1
+     mul
+     set
+     call "free"
+     back
+# def divmod(a, b):
+#     x = a // b
+#     y = a % b
+#     return x, y
+part "divmod"
+     copy 1
+     copy 1
+     div
+     call "rotate_3_up"
+     mod
+     back
+# def sum_length_array(array):
+#     index = 1
+#     total = 0
+#     while index <= array[0]:
+#         total += array[index]
+#         index += 1
+#     return total
+part "sum_length_array"
+     push 1
+     push 0
+part "__sum_length_array_loop_test"
+     copy 1
+     copy 3
+     get
+     sub
+     copy
+     less "__sum_length_array_loop_body_away"
+     zero "__sum_length_array_loop_body"
+     away 2
+     back
+part "__sum_length_array_loop_body_away"
+     away
+part "__sum_length_array_loop_body"
+     copy 2
+     copy 2
+     add
+     get
+     add
+     swap
+     push 1
+     add
+     swap
+     goto "__sum_length_array_loop_test"
+# def value_to_array(value, base):
+#     if base < 2:
+#         raise Exception(216)
+#     size = 8 + 1
+#     array = malloc(size)
+#     offset = 1
+#     while value:
+#         if offset == size:
+#             size = size * 2 - 1
+#             array = realloc(array, size)
+#         value, digit = divmod(value, base)
+#         array[offset] = digit
+#         offset += 1
+#     if size != offset:
+#         array = realloc(array, offset)
+#     array[0] = offset - 1
+#     return array
+part "value_to_array"
+     copy
+     push 2
+     sub
+     less "__value_to_array_bad_base"
+     swap
+     push 8
+     push 1
+     add
+     swap
+     copy 1
+     call "malloc"
+     swap
+     push 1
+     swap
+part "__value_to_array_loop_test"
+     copy
+     zero "__value_to_array_loop_end"
+     copy 1
+     copy 4
+     sub
+     zero "__value_to_array_adjust_array_size"
+part "__value_to_array_get_digit"
+     copy 4
+     call "divmod"
+     copy 3
+     copy 3
+     add
+     swap
+     set
+     swap
+     push 1
+     add
+     swap
+     goto "__value_to_array_loop_test"
+part "__value_to_array_bad_base"
+     push 216
+     call "raise"
+part "__value_to_array_loop_end"
+     copy 3
+     copy 2
+     sub
+     zero "__value_to_array_skip_resize"
+     call "rotate_3_down"
+     copy 2
+     call "realloc"
+     call "rotate_3_up"
+part "__value_to_array_skip_resize"
+     away
+     copy 1
+     copy 1
+     push 1
+     sub
+     set
+     away
+     away 2
+     back
+part "__value_to_array_adjust_array_size"
+     push 3
+     call "save_stack"
+     swap
+     push 2
+     mul
+     push 1
+     sub
+     swap
+     copy
+     push 1
+     call "load_stack"
+     copy 2
+     call "realloc"
+     swap
+     push 2
+     call "load_stack"
+     goto "__value_to_array_get_digit"
+# def array_to_value(array, base):
+#     if base < 2:
+#         raise Exception(217)
+#     if array[0] == 0:
+#         return 0
+#     addr = array + array[0]
+#     value = 0
+#     while addr != array:
+#         value *= base
+#         tentative = HEAP[addr]
+#         if tentative < base:
+#             value += tentative
+#             addr -= 1
+#         else:
+#             raise Exception(218)
+#     return value
+part "array_to_value"
+     copy
+     push 2
+     sub
+     less "__array_to_value_bad_base"
+     copy 1
+     get
+     zero "__array_to_value_return_zero"
+     copy 1
+     copy
+     get
+     add
+     push 0
+part "__array_to_value_loop_test"
+     copy 3
+     copy 2
+     sub
+     zero "__array_to_value_return"
+     copy 2
+     mul
+     copy 1
+     get
+     copy
+     copy 4
+     sub
+     less "__array_to_value_loop_continue"
+     push 218
+     call "raise"
+part "__array_to_value_loop_continue"
+     add
+     swap
+     push 1
+     sub
+     swap
+     goto "__array_to_value_loop_test"
+part "__array_to_value_bad_base"
+     push 217
+     call "raise"
+part "__array_to_value_return_zero"
+     push 0
+     away 2
+     back
+part "__array_to_value_return"
+     away 3
+     back
+# def uint_bits(number):
+#     integer = uint_cast(number)
+#     array = value_to_array(integer, 2)
+#     size = array[0]
+#     bits = malloc(32)
+#     clear(bits, bits + 31)
+#     if size != 0:
+#         from_start = array + 1
+#         from_end = array + size
+#         to_start = bits
+#         to_end = bits + size - 1
+#         copy(from_start, from_end, to_start, to_end)
+#     free(array)
+#     return bits
+part "uint_bits"
+     call "uint_cast"
+     push 2
+     call "value_to_array"
+     copy
+     get
+     push 32
+     call "malloc"
+     copy
+     copy
+     push 31
+     add
+     call "clear"
+     copy 1
+     zero "__uint_bits_skip_copy"
+     copy 2
+     push 1
+     add
+     copy 3
+     copy 3
+     add
+     copy 2
+     copy
+     copy 5
+     add
+     push 1
+     sub
+     call "copy"
+part "__uint_bits_skip_copy"
+     away 1
+     swap
+     call "free"
+     back
+# def uint_xor(a, b):
+#     b = uint_bits(b)
+#     a = uint_bits(a)
+#     xor = malloc(33)
+#     xor[0] = 32
+#     offset = 0
+#     while offset < 32:
+#         b_bit = b[offset]
+#         a_bit = a[offset]
+#         offset += 1
+#         if b_bit != a_bit:
+#             xor[offset] = True
+#         else:
+#             xor[offset] = False
+#     free(a)
+#     free(b)
+#     value = array_to_value(xor, 2)
+#     free(xor)
+#     return value
+part "uint_xor"
+     call "uint_bits"
+     swap
+     call "uint_bits"
+     push 33
+     call "malloc"
+     copy
+     push 32
+     set
+     push 0
+part "__uint_xor_loop_test"
+     copy
+     push 32
+     sub
+     less "__uint_xor_loop_body"
+     away
+     call "rotate_3_up"
+     call "free"
+     call "free"
+     copy
+     push 2
+     call "array_to_value"
+     swap
+     call "free"
+     back
+part "__uint_xor_loop_body"
+     copy 3
+     copy 1
+     add
+     get
+     copy 3
+     copy 2
+     add
+     get
+     sub
+     swap
+     push 1
+     add
+     swap
+     zero "__uint_xor_bit_is_false"
+     copy 1
+     copy 1
+     add
+     push 1
+     set
+     goto "__uint_xor_loop_test"
+part "__uint_xor_bit_is_false"
+     copy 1
+     copy 1
+     add
+     push 0
+     set
+     goto "__uint_xor_loop_test"
+# def memory_manager_hash():
+#     length = HEAP[-2]
+#     if length == 0:
+#         return 0
+#     length *= 2
+#     hash = uint_cast(left_shift(HEAP[-3], 7))
+#     offset = 0
+#     while offset < length:
+#         hash = uint_cast(hash * 1000003)
+#         hash = uint_xor(hash, HEAP[-3 - offset])
+#         offset += 1
+#     return uint_xor(hash, HEAP[-2])
+part "memory_manager_hash"
+     push -2
+     get
+     copy
+     zero "__memory_manager_hash_return"
+     push 2
+     mul
+     push -3
+     get
+     push 7
+     call "left_shift"
+     call "uint_cast"
+     push 0
+part "__memory_manager_hash_loop_test"
+     copy
+     copy 3
+     sub
+     less "__memory_manager_hash_loop_body"
+     away
+     away 1
+     push -2
+     get
+     call "uint_xor"
+part "__memory_manager_hash_return"
+     back
+part "__memory_manager_hash_loop_body"
+     swap
+     push 1000003
+     mul
+     call "uint_cast"
+     push -3
+     copy 2
+     sub
+     get
+     call "uint_xor"
+     swap
+     push 1
+     add
+     goto "__memory_manager_hash_loop_test"
+
+################################################################################
+
+# def test_abs_diff():
+#     if abs_diff(2, 1) != 1:
+#         raise Exception(2)
+#     if abs_diff(1, 2) != 1:
+#         raise Exception(3)
+part "test_abs_diff"
+     push 1
+     push 2
+     push 1
+     call "abs_diff"
+     sub
+     zero "__test_abs_diff_okay"
+     push 2
+     call "raise"
+part "__test_abs_diff_okay"
+     push 1
+     push 1
+     push 2
+     call "abs_diff"
+     sub
+     zero "__test_abs_diff_return"
+     push 3
+     call "raise"
+part "__test_abs_diff_return"
+     back
+# get test_get_addr():
+#     if get_addr(1, 1, 4) != 2:
+#         raise Exception(4)
+#     if get_addr(2, 1, 4) != 3:
+#         raise Exception(4)
+#     if get_addr(1, 4, 1) != 3:
+#         raise Exception(4)
+#     if get_addr(2, 4, 1) != 2:
+#         raise Exception(4)
+part "test_get_addr"
+     push 2
+     push 1
+     push 1
+     push 4
+     call "get_addr"
+     sub
+     zero "__test_get_addr_2"
+     push 4
+     call "raise"
+part "__test_get_addr_2"
+     push 3
+     push 2
+     push 1
+     push 4
+     call "get_addr"
+     sub
+     zero "__test_get_addr_3"
+     push 5
+     call "raise"
+part "__test_get_addr_3"
+     push 3
+     push 1
+     push 4
+     push 1
+     call "get_addr"
+     sub
+     zero "__test_get_addr_4"
+     push 6
+     call "raise"
+part "__test_get_addr_4"
+     push 2
+     push 2
+     push 4
+     push 1
+     call "get_addr"
+     sub
+     zero "__test_get_addr_return"
+     push 7
+     call "raise"
+part "__test_get_addr_return"
+     back
+# def test_clear():
+#     heap[1] = 1
+#     heap[2] = 2
+#     clear(1, 2)
+#     if heap[1]:
+#         raise Exception(8)
+#     if heap[2]:
+#         raise Exception(9)
+#     heap[1] = 1
+#     heap[2] = 2
+#     clear(2, 1)
+#     if heap[1]:
+#         raise Exception(10)
+#     if heap[2]:
+#         raise Exception(11)
+part "test_clear"
+     push 1
+     push 1
+     set
+     push 2
+     push 2
+     set
+     push 1
+     push 2
+     call "clear"
+     push 1
+     get
+     zero "__test_clear_2"
+     push 8
+     call "raise"
+part "__test_clear_2"
+     push 2
+     get
+     zero "__test_clear_3"
+     push 9
+     call "raise"
+part "__test_clear_3"
+     push 1
+     push 1
+     set
+     push 2
+     push 2
+     set
+     push 2
+     push 1
+     call "clear"
+     push 1
+     get
+     zero "__test_clear_4"
+     push 10
+     call "raise"
+part "__test_clear_4"
+     push 2
+     get
+     zero "__test_clear_return"
+     push 11
+     call "raise"
+part "__test_clear_return"
+     back
+# def test_copy():
+#     heap[1] = 1
+#     heap[2] = 2
+#     copy(1, 2, 3, 4)
+#     if heap[3] != 1:
+#         raise Exception(12)
+#     if heap[4] != 2:
+#         raise Exception(13)
+#     copy(1, 2, 4, 3)
+#     if heap[3] != 2:
+#         raise Exception(14)
+#     if heap[4] != 1:
+#         raise Exception(15)
+#     copy(2, 1, 4, 3)
+#     if heap[3] != 1:
+#         raise Exception(16)
+#     if heap[4] != 2:
+#         raise Exception(17)
+#     copy(2, 1, 3, 4)
+#     if heap[3] != 2:
+#         raise Exception(18)
+#     if heap[4] != 1:
+#         raise Exception(19)
+#     clear(1, 4)
+part "test_copy"
+     push 1
+     push 1
+     set
+     push 2
+     push 2
+     set
+     push 1
+     push 2
+     push 3
+     push 4
+     call "copy"
+     push 1
+     push 3
+     get
+     sub
+     zero "__test_copy_2"
+     push 12
+     call "raise"
+part "__test_copy_2"
+     push 2
+     push 4
+     get
+     sub
+     zero "__test_copy_3"
+     push 13
+     call "raise"
+part "__test_copy_3"
+     push 1
+     push 2
+     push 4
+     push 3
+     call "copy"
+     push 2
+     push 3
+     get
+     sub
+     zero "__test_copy_4"
+     push 14
+     call "raise"
+part "__test_copy_4"
+     push 1
+     push 4
+     get
+     sub
+     zero "__test_copy_5"
+     push 15
+     call "raise"
+part "__test_copy_5"
+     push 2
+     push 1
+     push 4
+     push 3
+     call "copy"
+     push 1
+     push 3
+     get
+     sub
+     zero "__test_copy_6"
+     push 16
+     call "raise"
+part "__test_copy_6"
+     push 2
+     push 4
+     get
+     sub
+     zero "__test_copy_7"
+     push 17
+     call "raise"
+part "__test_copy_7"
+     push 2
+     push 1
+     push 3
+     push 4
+     call "copy"
+     push 2
+     push 3
+     get
+     sub
+     zero "__test_copy_8"
+     push 18
+     call "raise"
+part "__test_copy_8"
+     push 1
+     push 4
+     get
+     sub
+     zero "__test_copy_return"
+     push 19
+     call "raise"
+part "__test_copy_return"
+     push 1
+     push 4
+     call "clear"
+     back
+# def test_memory_manager_append_cell():
+#     if heap[-2]:
+#         raise Exception(20)
+#     memory_manager_append_cell(100, 200)
+#     if heap[-2] != 1:
+#         raise Exception(21)
+#     if heap[-3] != 100:
+#         raise Exception(22)
+#     if heap[-4] != 200:
+#         raise Exception(23)
+#     memory_manager_append_cell(300, 400)
+#     if heap[-2] != 2:
+#         raise Exception(24)
+#     if heap[-5] != 300:
+#         raise Exception(25)
+#     if heap[-6] != 400:
+#         raise Exception(26)
+#     clear(-2, -6)
+part "test_memory_manager_append_cell"
+     push -2
+     get
+     zero "__test_memory_manager_append_cell_2"
+     push 20
+     call "raise"
+part "__test_memory_manager_append_cell_2"
+     push 100
+     push 200
+     call "memory_manager_append_cell"
+     push 1
+     push -2
+     get
+     sub
+     zero "__test_memory_manager_append_cell_3"
+     push 21
+     call "raise"
+part "__test_memory_manager_append_cell_3"
+     push 100
+     push -3
+     get
+     sub
+     zero "__test_memory_manager_append_cell_4"
+     push 22
+     call "raise"
+part "__test_memory_manager_append_cell_4"
+     push 200
+     push -4
+     get
+     sub
+     zero "__test_memory_manager_append_cell_5"
+     push 23
+     call "raise"
+part "__test_memory_manager_append_cell_5"
+     push 300
+     push 400
+     call "memory_manager_append_cell"
+     push 2
+     push -2
+     get
+     sub
+     zero "__test_memory_manager_append_cell_6"
+     push 24
+     call "raise"
+part "__test_memory_manager_append_cell_6"
+     push 300
+     push -5
+     get
+     sub
+     zero "__test_memory_manager_append_cell_7"
+     push 25
+     call "raise"
+part "__test_memory_manager_append_cell_7"
+     push 400
+     push -6
+     get
+     sub
+     zero "__test_memory_manager_append_cell_return"
+     push 26
+     call "raise"
+part "__test_memory_manager_append_cell_return"
+     push -2
+     push -6
+     call "clear"
+     back
+# def test_memory_manager_get_cell():
+#     memory_manager_append_cell(80, 90)
+#     memory_manager_append_cell(100, 110)
+#     d, c = memory_manager_get_cell(1)
+#     b, a = memory_manager_get_cell(0)
+#     if a != 80:
+#         raise Exception(28)
+#     if b != 90:
+#         raise Exception(29)
+#     if c != 100:
+#         raise Exception(30)
+#     if d != 110:
+#         raise Exception(31)
+#     clear(-2, -6)
+part "test_memory_manager_get_cell"
+     push 100
+     push 110
+     push 80
+     push 90
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     push 1
+     call "memory_manager_get_cell"
+     swap
+     push 0
+     call "memory_manager_get_cell"
+     swap
+     push 80
+     sub
+     zero "__test_memory_manager_get_cell_2"
+     push 28
+     call "raise"
+part "__test_memory_manager_get_cell_2"
+     push 90
+     sub
+     zero "__test_memory_manager_get_cell_3"
+     push 29
+     call "raise"
+part "__test_memory_manager_get_cell_3"
+     push 100
+     sub
+     zero "__test_memory_manager_get_cell_4"
+     push 30
+     call "raise"
+part "__test_memory_manager_get_cell_4"
+     push 110
+     sub
+     zero "__test_memory_manager_get_cell_return"
+     push 31
+     call "raise"
+part "__test_memory_manager_get_cell_return"
+     push -2
+     push -6
+     call "clear"
+     back
+# def test_memory_manager_insert_cell():
+#     memory_manager_insert_cell(11, 20, 0)
+#     memory_manager_insert_cell(31, 40, 1)
+#     memory_manager_insert_cell(21, 30, 1)
+#     memory_manager_insert_cell(1, 10, 0)
+#     h, g = memory_manger_get_cell(0)
+#     f, e = memory_manger_get_cell(1)
+#     c, d = memory_manger_get_cell(2)
+#     b, a = memory_manger_get_cell(3)
+#     if a != 40:
+#         raise Exception(33)
+#     if a != 31:
+#         raise Exception(34)
+#     if a != 30:
+#         raise Exception(35)
+#     if a != 21:
+#         raise Exception(36)
+#     if a != 20:
+#         raise Exception(37)
+#     if a != 11:
+#         raise Exception(38)
+#     if a != 10:
+#         raise Exception(39)
+#     if a != 1:
+#         raise Exception(40)
+#     clear(-2, -10)
+part "test_memory_manager_insert_cell"
+     push 11
+     push 20
+     push 0
+     call "memory_manager_insert_cell"
+     push 31
+     push 40
+     push 1
+     call "memory_manager_insert_cell"
+     push 21
+     push 30
+     push 1
+     call "memory_manager_insert_cell"
+     push 1
+     push 10
+     push 0
+     call "memory_manager_insert_cell"
+     push 0
+     call "memory_manager_get_cell"
+     push 1
+     call "memory_manager_get_cell"
+     push 2
+     call "memory_manager_get_cell"
+     push 3
+     call "memory_manager_get_cell"
+     push 40
+     sub
+     zero "__test_memory_manager_insert_cell_2"
+     push 33
+     call "raise"
+part "__test_memory_manager_insert_cell_2"
+     push 31
+     sub
+     zero "__test_memory_manager_insert_cell_3"
+     push 34
+     call "raise"
+part "__test_memory_manager_insert_cell_3"
+     push 30
+     sub
+     zero "__test_memory_manager_insert_cell_4"
+     push 35
+     call "raise"
+part "__test_memory_manager_insert_cell_4"
+     push 21
+     sub
+     zero "__test_memory_manager_insert_cell_5"
+     push 36
+     call "raise"
+part "__test_memory_manager_insert_cell_5"
+     push 20
+     sub
+     zero "__test_memory_manager_insert_cell_6"
+     push 37
+     call "raise"
+part "__test_memory_manager_insert_cell_6"
+     push 11
+     sub
+     zero "__test_memory_manager_insert_cell_7"
+     push 38
+     call "raise"
+part "__test_memory_manager_insert_cell_7"
+     push 10
+     sub
+     zero "__test_memory_manager_insert_cell_8"
+     push 39
+     call "raise"
+part "__test_memory_manager_insert_cell_8"
+     push 1
+     sub
+     zero "__test_memory_manager_insert_cell_return"
+     push 40
+     call "raise"
+part "__test_memory_manager_insert_cell_return"
+     push -2
+     push -10
+     call "clear"
+     back
+# def test_malloc_check_beginning():
+#     HEAP[-1] = 1
+#     memory_manager_append_cell(11, 20)
+#     if malloc_check_beginning(11):
+#         raise Exception(42)
+#     if malloc_check_beginning(10) != 1:
+#         raise Exception(43)
+#     d, c = memory_manager_get_cell(0)
+#     b, a = memory_manager_get_cell(1)
+#     if a != 20:
+#         raise Exception(44)
+#     if a != 11:
+#         raise Exception(45)
+#     if a != 10:
+#         raise Exception(46)
+#     if a != 1:
+#         raise Exception(47)
+#     clear(-1, -6)
+part "test_malloc_check_beginning"
+     push -1
+     push 1
+     set
+     push 11
+     push 20
+     call "memory_manager_append_cell"
+     push 11
+     call "malloc_check_beginning"
+     zero "__test_malloc_check_beginning_2"
+     push 42
+     call "raise"
+part "__test_malloc_check_beginning_2"
+     push 10
+     call "malloc_check_beginning"
+     push 1
+     sub
+     zero "__test_malloc_check_beginning_3"
+     push 43
+     call "raise"
+part "__test_malloc_check_beginning_3"
+     push 0
+     call "memory_manager_get_cell"
+     push 1
+     call "memory_manager_get_cell"
+     push 20
+     sub
+     zero "__test_malloc_check_beginning_4"
+     push 44
+     call "raise"
+part "__test_malloc_check_beginning_4"
+     push 11
+     sub
+     zero "__test_malloc_check_beginning_5"
+     push 45
+     call "raise"
+part "__test_malloc_check_beginning_5"
+     push 10
+     sub
+     zero "__test_malloc_check_beginning_6"
+     push 46
+     call "raise"
+part "__test_malloc_check_beginning_6"
+     push 1
+     sub
+     zero "__test_malloc_check_beginning_return"
+     push 47
+     call "raise"
+part "__test_malloc_check_beginning_return"
+     push -1
+     push -6
+     call "clear"
+     back
+# def test_malloc_check_ranges():
+#     if malloc_check_ranges(10) != -1:
+#         raise Exception(48)
+#     memory_manager_append_cell(11, 20)
+#     if malloc_check_ranges(10) != -1:
+#         raise Exception(49)
+#     memory_manager_append_cell(31, 40)
+#     if malloc_check_ranges(20) != -1:
+#         raise Exception(50)
+#     if malloc_check_ranges(5) != 1:
+#         raise Exception(51)
+#     if malloc_check_ranges(5) != 2:
+#         raise Exception(52)
+#     d, c = memory_manager_get_cell(1)
+#     b, a = memory_manager_get_cell(2)
+#     if a != 30:
+#         raise Exception(53)
+#     if b != 26:
+#         raise Exception(54)
+#     if c != 25:
+#         raise Exception(55)
+#     if d != 21:
+#         raise Exception(56)
+#     clear(-2, -10)
+part "test_malloc_check_ranges"
+     push 10
+     call "malloc_check_ranges"
+     push 1
+     add
+     zero "__test_malloc_check_ranges_2"
+     push 48
+     call "raise"
+part "__test_malloc_check_ranges_2"
+     push 11
+     push 20
+     call "memory_manager_append_cell"
+     push 10
+     call "malloc_check_ranges"
+     push 1
+     add
+     zero "__test_malloc_check_ranges_3"
+     push 49
+     call "raise"
+part "__test_malloc_check_ranges_3"
+     push 31
+     push 40
+     call "memory_manager_append_cell"
+     push 20
+     call "malloc_check_ranges"
+     push 1
+     add
+     zero "__test_malloc_check_ranges_4"
+     push 50
+     call "raise"
+part "__test_malloc_check_ranges_4"
+     push 5
+     call "malloc_check_ranges"
+     push 1
+     sub
+     zero "__test_malloc_check_ranges_5"
+     push 51
+     call "raise"
+part "__test_malloc_check_ranges_5"
+     push 5
+     call "malloc_check_ranges"
+     push 2
+     sub
+     zero "__test_malloc_check_ranges_6"
+     push 52
+     call "raise"
+part "__test_malloc_check_ranges_6"
+     push 1
+     call "memory_manager_get_cell"
+     push 2
+     call "memory_manager_get_cell"
+     push 30
+     sub
+     zero "__test_malloc_check_ranges_7"
+     push 53
+     call "raise"
+part "__test_malloc_check_ranges_7"
+     push 26
+     sub
+     zero "__test_malloc_check_ranges_8"
+     push 54
+     call "raise"
+part "__test_malloc_check_ranges_8"
+     push 25
+     sub
+     zero "__test_malloc_check_ranges_9"
+     push 55
+     call "raise"
+part "__test_malloc_check_ranges_9"
+     push 21
+     sub
+     zero "__test_malloc_check_ranges_return"
+     push 56
+     call "raise"
+part "__test_malloc_check_ranges_return"
+     push -2
+     push -10
+     call "clear"
+     back
+# def test_malloc_ranges():
+#     HEAP[-1] = 1
+#     memory_manager_append_cell(11, 20)
+#     memory_manager_append_cell(31, 40)
+#     if malloc_ranges(10) != 1:
+#         raise Exception(57)
+#     if malloc_ranges(10) != 21:
+#         raise Exception(58)
+#     if malloc_ranges(10) != 41:
+#         raise Exception(59)
+#     f, e = memory_manager_get_cell(0)
+#     d, c = memory_manager_get_cell(2)
+#     b, a = memory_manager_get_cell(4)
+#     if a != 50:
+#         raise Exception(60)
+#     if b != 41:
+#         raise Exception(61)
+#     if c != 30:
+#         raise Exception(62)
+#     if d != 21:
+#         raise Exception(63)
+#     if e != 10:
+#         raise Exception(64)
+#     if f != 1:
+#         raise Exception(65)
+#     clear(-1, -12)
+part "test_malloc_ranges"
+     push 31
+     push 40
+     push 11
+     push 20
+     push -1
+     push 1
+     set
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     push 10
+     call "malloc_ranges"
+     push 1
+     sub
+     zero "__test_malloc_ranges_2"
+     push 57
+     call "raise"
+part "__test_malloc_ranges_2"
+     push 10
+     call "malloc_ranges"
+     push 21
+     sub
+     zero "__test_malloc_ranges_3"
+     push 58
+     call "raise"
+part "__test_malloc_ranges_3"
+     push 10
+     call "malloc_ranges"
+     push 41
+     sub
+     zero "__test_malloc_ranges_4"
+     push 59
+     call "raise"
+part "__test_malloc_ranges_4"
+     push 0
+     call "memory_manager_get_cell"
+     push 2
+     call "memory_manager_get_cell"
+     push 4
+     call "memory_manager_get_cell"
+     push 50
+     sub
+     zero "__test_malloc_ranges_5"
+     push 60
+     call "raise"
+part "__test_malloc_ranges_5"
+     push 41
+     sub
+     zero "__test_malloc_ranges_6"
+     push 61
+     call "raise"
+part "__test_malloc_ranges_6"
+     push 30
+     sub
+     zero "__test_malloc_ranges_7"
+     push 62
+     call "raise"
+part "__test_malloc_ranges_7"
+     push 21
+     sub
+     zero "__test_malloc_ranges_8"
+     push 63
+     call "raise"
+part "__test_malloc_ranges_8"
+     push 10
+     sub
+     zero "__test_malloc_ranges_9"
+     push 64
+     call "raise"
+part "__test_malloc_ranges_9"
+     push 1
+     sub
+     zero "__test_malloc_ranges_return"
+     push 65
+     call "raise"
+part "__test_malloc_ranges_return"
+     push -1
+     push -12
+     call "clear"
+     back
+# def test_malloc():
+#     HEAP[-1] = 1
+#     if malloc(1) != 1:
+#         raise Exception(66)
+#     if malloc(2) != 2:
+#         raise Exception(67)
+#     if malloc(3) != 4:
+#         raise Exception(68)
+#     if malloc(4) != 7:
+#         raise Exception(69)
+#     if HEAP[-2] != 4:
+#         raise Exception(70)
+#     if HEAP[-10] != 10:
+#         raise Exception(71)
+#     clear(-1, -10)
+part "test_malloc"
+     push -1
+     push 1
+     set
+     push 1
+     call "malloc"
+     push 1
+     sub
+     zero "__test_malloc_2"
+     push 66
+     call "raise"
+part "__test_malloc_2"
+     push 2
+     call "malloc"
+     push 2
+     sub
+     zero "__test_malloc_3"
+     push 67
+     call "raise"
+part "__test_malloc_3"
+     push 3
+     call "malloc"
+     push 4
+     sub
+     zero "__test_malloc_4"
+     push 68
+     call "raise"
+part "__test_malloc_4"
+     push 4
+     call "malloc"
+     push 7
+     sub
+     zero "__test_malloc_5"
+     push 69
+     call "raise"
+part "__test_malloc_5"
+     push -2
+     get
+     push 4
+     sub
+     zero "__test_malloc_6"
+     push 70
+     call "raise"
+part "__test_malloc_6"
+     push -10
+     copy
+     get
+     add
+     zero "__test_malloc_return"
+     push 71
+     call "raise"
+part "__test_malloc_return"
+     push -1
+     push -10
+     call "clear"
+     back
+# def test_calloc():
+#     HEAP[-1] = 1
+#     if calloc(10, 10) != 1:
+#         raise Exception(72)
+#     if HEAP[-4] != 100:
+#         raise Exception(73)
+#     clear(-1, -4)
+part "test_calloc"
+     push -1
+     push 1
+     set
+     push 10
+     copy
+     call "calloc"
+     push 1
+     sub
+     zero "__test_calloc_2"
+     push 72
+     call "raise"
+part "__test_calloc_2"
+     push 100
+     push -4
+     get
+     sub
+     zero "__test_calloc_return"
+     push 73
+     call "raise"
+part "__test_calloc_return"
+     push -1
+     push -4
+     call "clear"
+     back
+# def test_memory_manager_search():
+#     if memory_manager_search(1) != -1:
+#         raise Exception(74)
+#     memory_manager_append_cell(1, 10)
+#     memory_manager_append_cell(11, 20)
+#     memory_manager_append_cell(21, 30)
+#     memory_manager_append_cell(31, 40)
+#     memory_manager_append_cell(41, 50)
+#     memory_manager_append_cell(51, 60)
+#     memory_manager_append_cell(61, 70)
+#     if memory_manager_search(1) != 0:
+#         raise Exception(75)
+#     if memory_manager_search(31) != 3:
+#         raise Exception(76)
+#     if memory_manager_search(61) != 6:
+#         raise Exception(77)
+#     if memory_manager_search(0) != -1:
+#         raise Exception(78)
+#     if memory_manager_search(62) != -1:
+#         raise Exception(79)
+#     clear(-2, -16)
+part "test_memory_manager_search"
+     push 1
+     copy
+     call "memory_manager_search"
+     add
+     zero "__test_memory_manager_search_2"
+     push 74
+     call "raise"
+part "__test_memory_manager_search_2"
+     push 61
+     push 70
+     push 51
+     push 60
+     push 41
+     push 50
+     push 31
+     push 40
+     push 21
+     push 30
+     push 11
+     push 20
+     push 1
+     push 10
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     push 1
+     call "memory_manager_search"
+     zero "__test_memory_manager_search_3"
+     push 75
+     call "raise"
+part "__test_memory_manager_search_3"
+     push 31
+     call "memory_manager_search"
+     push 3
+     sub
+     zero "__test_memory_manager_search_4"
+     push 76
+     call "raise"
+part "__test_memory_manager_search_4"
+     push 61
+     call "memory_manager_search"
+     push 6
+     sub
+     zero "__test_memory_manager_search_5"
+     push 77
+     call "raise"
+part "__test_memory_manager_search_5"
+     push 0
+     call "memory_manager_search"
+     push 1
+     add
+     zero "__test_memory_manager_search_6"
+     push 78
+     call "raise"
+part "__test_memory_manager_search_6"
+     push 62
+     call "memory_manager_search"
+     push 1
+     add
+     zero "__test_memory_manager_search_return"
+     push 79
+     call "raise"
+part "__test_memory_manager_search_return"
+     push -2
+     push -16
+     call "clear"
+     back
+# def test_memory_manager_pop_cell():
+#     memory_manager_append_cell(11, 20)
+#     memory_manager_append_cell(21, 30)
+#     memory_manager_append_cell(31, 40)
+#     memory_manager_append_cell(41, 50)
+#     h, g = memory_manager_pop_cell(-1)
+#     f, e = memory_manager_pop_cell(0)
+#     d, c = memory_manager_pop_cell(1)
+#     b, a = memory_manager_pop_cell(0)
+#     if a != 30:
+#         raise Exception(84)
+#     if b != 21:
+#         raise Exception(85)
+#     if c != 40:
+#         raise Exception(86)
+#     if d != 31:
+#         raise Exception(87)
+#     if e != 20:
+#         raise Exception(88)
+#     if f != 11:
+#         raise Exception(89)
+#     if g != 50:
+#         raise Exception(90)
+#     if h != 41:
+#         raise Exception(91)
+part "test_memory_manager_pop_cell"
+     push 41
+     push 50
+     push 31
+     push 40
+     push 21
+     push 30
+     push 11
+     push 20
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     push -1
+     call "memory_manager_pop_cell"
+     push 0
+     call "memory_manager_pop_cell"
+     push 1
+     call "memory_manager_pop_cell"
+     push 0
+     call "memory_manager_pop_cell"
+     push 30
+     sub
+     zero "__test_memory_manager_pop_cell_2"
+     push 84
+     call "raise"
+part "__test_memory_manager_pop_cell_2"
+     push 21
+     sub
+     zero "__test_memory_manager_pop_cell_3"
+     push 85
+     call "raise"
+part "__test_memory_manager_pop_cell_3"
+     push 40
+     sub
+     zero "__test_memory_manager_pop_cell_4"
+     push 86
+     call "raise"
+part "__test_memory_manager_pop_cell_4"
+     push 31
+     sub
+     zero "__test_memory_manager_pop_cell_5"
+     push 87
+     call "raise"
+part "__test_memory_manager_pop_cell_5"
+     push 20
+     sub
+     zero "__test_memory_manager_pop_cell_6"
+     push 88
+     call "raise"
+part "__test_memory_manager_pop_cell_6"
+     push 11
+     sub
+     zero "__test_memory_manager_pop_cell_7"
+     push 89
+     call "raise"
+part "__test_memory_manager_pop_cell_7"
+     push 50
+     sub
+     zero "__test_memory_manager_pop_cell_8"
+     push 90
+     call "raise"
+part "__test_memory_manager_pop_cell_8"
+     push 41
+     sub
+     zero "__test_memory_manager_pop_cell_return"
+     push 91
+     call "raise"
+part "__test_memory_manager_pop_cell_return"
+     back
+# def test_free():
+#     HEAP[-1] = 1
+#     a = malloc(100)
+#     b = malloc(100)
+#     free(a)
+#     c = malloc(50)
+#     d = malloc(50)
+#     e = malloc(50)
+#     free(d)
+#     f = malloc(25)
+#     g = malloc(25)
+#     h = malloc(25)
+#     free(b)
+#     i = malloc(25)
+#     j = malloc(100)
+#     if memory_manager_get_cell(0)[0] != 1:
+#         raise Exception(92)
+#     if memory_manager_get_cell(1)[0] != 51:
+#         raise Exception(93)
+#     if memory_manager_get_cell(2)[0] != 76:
+#         raise Exception(94)
+#     if memory_manager_get_cell(3)[0] != 101:
+#         raise Exception(95)
+#     if memory_manager_get_cell(4)[0] != 201:
+#         raise Exception(96)
+#     if memory_manager_get_cell(5)[0] != 251:
+#         raise Exception(97)
+#     if memory_manager_get_cell(6)[0] != 276:
+#         raise Exception(98)
+#     if memory_manager_get_cell(6)[1] != 375:
+#         raise Exception(99)
+#     free(j)
+#     free(i)
+#     free(h)
+#     free(g)
+#     free(f)
+#     free(e)
+#     free(c)
+#     if HEAP[-2] != 0:
+#         raise Exception(100)
+#     clear(-1, 0)
+part "test_free"
+     push -1
+     push 1
+     set
+     push 100
+     call "malloc"
+     push 100
+     call "malloc"
+     swap
+     call "free"
+     push 50
+     call "malloc"
+     push 50
+     call "malloc"
+     push 50
+     call "malloc"
+     swap
+     call "free"
+     push 25
+     call "malloc"
+     push 25
+     call "malloc"
+     push 25
+     call "malloc"
+     copy 5
+     call "free"
+     push 25
+     call "malloc"
+     push 100
+     call "malloc"
+     push 0
+     call "memory_manager_get_cell"
+     away
+     push 1
+     sub
+     zero "__test_free_2"
+     push 92
+     call "raise"
+part "__test_free_2"
+     push 1
+     call "memory_manager_get_cell"
+     away
+     push 51
+     sub
+     zero "__test_free_3"
+     push 93
+     call "raise"
+part "__test_free_3"
+     push 2
+     call "memory_manager_get_cell"
+     away
+     push 76
+     sub
+     zero "__test_free_4"
+     push 94
+     call "raise"
+part "__test_free_4"
+     push 3
+     call "memory_manager_get_cell"
+     away
+     push 101
+     sub
+     zero "__test_free_5"
+     push 95
+     call "raise"
+part "__test_free_5"
+     push 4
+     call "memory_manager_get_cell"
+     away
+     push 201
+     sub
+     zero "__test_free_6"
+     push 96
+     call "raise"
+part "__test_free_6"
+     push 5
+     call "memory_manager_get_cell"
+     away
+     push 251
+     sub
+     zero "__test_free_7"
+     push 97
+     call "raise"
+part "__test_free_7"
+     push 6
+     call "memory_manager_get_cell"
+     away
+     push 276
+     sub
+     zero "__test_free_8"
+     push 98
+     call "raise"
+part "__test_free_8"
+     push 6
+     call "memory_manager_get_cell"
+     away 1
+     push 375
+     sub
+     zero "__test_free_9"
+     push 99
+     call "raise"
+part "__test_free_9"
+     call "free"
+     call "free"
+     call "free"
+     call "free"
+     call "free"
+     call "free"
+     call "free"
+     away
+     push -2
+     get
+     zero "__test_free_return"
+     push 100
+     call "raise"
+part "__test_free_return"
+     push -1
+     push 0
+     call "clear"
+     back
+# def test_memory_manager_get_block_size():
+#     HEAP[-1] = 1
+#     a = malloc(123)
+#     if memory_manager_get_block_size(0) != 123:
+#         raise Exception(102)
+#     free(a)
+#     clear(-1, 0)
+part "test_memory_manager_get_block_size"
+     push -1
+     push 1
+     set
+     push 123
+     call "malloc"
+     push 0
+     call "memory_manager_get_block_size"
+     push 123
+     sub
+     zero "__test_memory_manager_get_block_size_return"
+     push 102
+     call "raise"
+part "__test_memory_manager_get_block_size_return"
+     call "free"
+     push -1
+     push 0
+     call "clear"
+     back
+# def test_memory_manager_set_cell():
+#     memory_manager_append_cell(1, 10)
+#     memory_manager_set_cell(11, 20, 0)
+#     b, a = memory_manager_get_cell(0)
+#     if a != 20:
+#         raise Exception(106)
+#     if b != 11:
+#         raise Exception(107)
+#     clear(-2, -4)
+part "test_memory_manager_set_cell"
+     push 0
+     push 11
+     push 20
+     push 0
+     push 1
+     push 10
+     call "memory_manager_append_cell"
+     call "memory_manager_set_cell"
+     call "memory_manager_get_cell"
+     push 20
+     sub
+     zero "__test_memory_manager_set_cell_2"
+     push 106
+     call "raise"
+part "__test_memory_manager_set_cell_2"
+     push 11
+     sub
+     zero "__test_memory_manager_set_cell_return"
+     push 107
+     call "raise"
+part "__test_memory_manager_set_cell_return"
+     push -2
+     push -4
+     call "clear"
+     back
+# def test_memory_manager_deflate_block():
+#     memory_manager_append_cell(1, 100)
+#     memory_manager_deflate_block(50, 0)
+#     if memory_manager_get_block_size(0) != 50:
+#         raise Exception(108)
+#     clear(-2, -4)
+part "test_memory_manager_deflate_block"
+     push 1
+     push 100
+     call "memory_manager_append_cell"
+     push 50
+     push 0
+     call "memory_manager_deflate_block"
+     push 0
+     call "memory_manager_get_block_size"
+     push 50
+     sub
+     zero "__test_memory_manager_deflate_block_return"
+     push 108
+     call "raise"
+part "__test_memory_manager_deflate_block_return"
+     push -2
+     push -4
+     call "clear"
+     back
+# def test_memory_manager_inflate_cell():
+#     memory_manager_append_cell(1, 50)
+#     memory_manager_inflate_cell(100, 0)
+#     if memory_manager_get_block_size(0) != 100:
+#         raise Exception(110)
+#     clear(-2, -4)
+part "test_memory_manager_inflate_cell"
+     push 1
+     push 50
+     call "memory_manager_append_cell"
+     push 100
+     push 0
+     call "memory_manager_inflate_cell"
+     push 0
+     call "memory_manager_get_block_size"
+     push 100
+     sub
+     zero "__test_memory_manager_inflate_cell_return"
+     push 110
+     call "raise"
+part "__test_memory_manager_inflate_cell_return"
+     push -2
+     push -4
+     call "clear"
+     back
+# def test_memory_manager_potential_after():
+#     memory_manager_append_cell(101, 200)
+#     memory_manager_append_cell(251, 300)
+#     if memory_manager_potential_after(0) != 150:
+#         raise Exception(111)
+#     clear(-2, -6)
+part "test_memory_manager_potential_after"
+     push -2
+     push -6
+     push 150
+     push 0
+     push 251
+     push 300
+     push 101
+     push 200
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_potential_after"
+     sub
+     zero "__test_memory_manager_potential_after_return"
+     push 111
+     call "raise"
+part "__test_memory_manager_potential_after_return"
+     call "clear"
+     back
+# def test_memory_manager_potential_before():
+#     HEAP[-1] = 51
+#     memory_manager_append_cell(101, 250)
+#     memory_manager_append_cell(301, 325)
+#     memory_manager_append_cell(351, 400)
+#     if memory_manager_potential_before(0) != 250:
+#         raise Exception(112)
+#     if memory_manager_potentail_before(1) != 100:
+#         raise Exception(113)
+#     clear(-1, -8)
+part "test_memory_manager_potential_before"
+     push -1
+     push -8
+     push 100
+     push 1
+     push 250
+     push 0
+     push 351
+     push 400
+     push 301
+     push 325
+     push 101
+     push 250
+     push -1
+     push 51
+     set
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_potential_before"
+     sub
+     zero "__test_memory_manager_potential_before_2"
+     push 112
+     call "raise"
+part "__test_memory_manager_potential_before_2"
+     call "memory_manager_potential_before"
+     sub
+     zero "__test_memory_manager_potential_before_return"
+     push 113
+     call "raise"
+part "__test_memory_manager_potential_before_return"
+     call "clear"
+     back
+# def test_memory_manager_compress():
+#     HEAP[-1] = 101
+#     memory_manager_append_cell(201, 300)
+#     memory_manager_append_cell(401, 500)
+#     if memory_manager_compress(0) != 101:
+#         raise Exception(114)
+#     if memory_manager_compress(1) != 301:
+#         raise Exception(115)
+#     clear(-1, -6)
+part "test_memory_manager_compress"
+     push -1
+     push -6
+     push 301
+     push 1
+     push 101
+     push 0
+     push 401
+     push 500
+     push 201
+     push 300
+     push -1
+     push 101
+     set
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_compress"
+     sub
+     zero "__test_memory_manager_compress_2"
+     push 114
+     call "raise"
+part "__test_memory_manager_compress_2"
+     call "memory_manager_compress"
+     sub
+     zero "__test_memory_manager_compress_return"
+     push 115
+     call "raise"
+part "__test_memory_manager_compress_return"
+     call "clear"
+     back
+# def test_compare_cells():
+#     HEAP[1] = 1
+#     HEAP[2] = 1
+#     if compare_cells(1, 2) != 0:
+#         raise Exception(121)
+#     HEAP[1] = 2
+#     if compare_cells(1, 2) != 1:
+#         raise Exception(122)
+#     if compare_cells(2, 1) != -1:
+#         raise Exception(123)
+#     clear(1, 2)
+part "test_compare_cells"
+     push 1
+     push 2
+     push -1
+     push 2
+     push 1
+     push 1
+     push 1
+     push 2
+     push 1
+     push 2
+     push 1
+     push 2
+     push 2
+     push 1
+     push 1
+     push 1
+     set
+     set
+     call "compare_cells"
+     zero "__test_compare_cells_2"
+     push 121
+     call "raise"
+part "__test_compare_cells_2"
+     set
+     call "compare_cells"
+     sub
+     zero "__test_compare_cells_3"
+     push 122
+     call "raise"
+part "__test_compare_cells_3"
+     call "compare_cells"
+     sub
+     zero "__test_compare_cells_return"
+     push 123
+     call "raise"
+part "__test_compare_cells_return"
+     call "clear"
+     back
+# def test_compare_memory():
+#     if compare_memory(0, 1, 0) != 0:
+#         raise Exception(124)
+#     if compare_memory(1, 1, 1) != 0:
+#         raise Exception(125)
+#     HEAP[1] = 100
+#     HEAP[2] = 200
+#     HEAP[3] = 100
+#     HEAP[4] = 200
+#     if compare_memory(1, 3, 2) != 0:
+#         raise Exception(126)
+#     HEAP[2] = 300
+#     if compare_memory(1, 3, 2) != 1:
+#         raise Exception(127)
+#     HEAP[4] = 400
+#     if compare_memory(1, 3, 2) != -1:
+#         raise Exception(128)
+#     clear(1, 4)
+part "test_compare_memory"
+     push 1
+     push 4
+     push -1
+     push 1
+     push 3
+     push 2
+     push 4
+     push 400
+     push 1
+     push 1
+     push 3
+     push 2
+     push 2
+     push 300
+     push 1
+     push 3
+     push 2
+     push 4
+     push 200
+     push 3
+     push 100
+     push 2
+     push 200
+     push 1
+     push 100
+     push 1
+     push 1
+     push 1
+     push 0
+     push 1
+     push 0
+     call "compare_memory"
+     zero "__test_compare_memory_2"
+     push 124
+     call "raise"
+part "__test_compare_memory_2"
+     call "compare_memory"
+     zero "__test_compare_memory_3"
+     push 125
+     call "raise"
+part "__test_compare_memory_3"
+     set
+     set
+     set
+     set
+     call "compare_memory"
+     zero "__test_compare_memory_4"
+     push 126
+     call "raise"
+part "__test_compare_memory_4"
+     set
+     call "compare_memory"
+     sub
+     zero "__test_compare_memory_5"
+     push 127
+     call "raise"
+part "__test_compare_memory_5"
+     set
+     call "compare_memory"
+     sub
+     zero "__test_compare_memory_return"
+     push 128
+     call "raise"
+part "__test_compare_memory_return"
+     call "clear"
+     back
+# test_direction():
+#     if direction(-100) != -1:
+#         raise Exception(130)
+#     if direction(0) != 0:
+#         raise Exception(131)
+#     if direction(100) != 1:
+#         raise Exception(132)
+part "test_direction"
+     push 1
+     push 100
+     push 0
+     push -1
+     push -100
+     call "direction"
+     sub
+     zero "__test_direction_2"
+     push 130
+     call "raise"
+part "__test_direction_2"
+     call "direction"
+     zero "__test_direction_3"
+     push 131
+     call "raise"
+part "__test_direction_3"
+     call "direction"
+     sub
+     zero "__test_direction_return"
+     push 132
+     call "raise"
+part "__test_direction_return"
+     back
+# def test_range():
+#     range(1, 1, 4, 1)
+#     HEAP[4] = 1
+#     HEAP[5] = 2
+#     HEAP[6] = 3
+#     if compare_memory(1, 4, 3) != 0:
+#         raise Exception(133)
+#     range(1, 0, -3, -1)
+#     HEAP[4] = 0
+#     HEAP[5] = -1
+#     HEAP[6] = -2
+#     if compare_memory(1, 4, 3) != 0:
+#         raise Exception(134)
+#     range(1, 0, 6, 2)
+#     HEAP[5] = 2
+#     HEAP[6] = 4
+#     if compare_memory(1, 4, 3) != 0:
+#         raise Exception(135)
+#     range(1, 8, 3, -2)
+#     HEAP[4] = 8
+#     HEAP[5] = 6
+#     if compare_memory(1, 4, 3) != 0:
+#         raise Exception(136)
+#     clear(1, 6)
+part "test_range"
+     push 1
+     push 6
+     push 1
+     push 4
+     push 3
+     push 5
+     push 6
+     push 4
+     push 8
+     push 1
+     push 8
+     push 3
+     push -2
+     push 1
+     push 4
+     push 3
+     push 6
+     push 4
+     push 5
+     push 2
+     push 1
+     push 0
+     push 6
+     push 2
+     push 1
+     push 4
+     push 3
+     push 6
+     push -2
+     push 5
+     push -1
+     push 4
+     push 0
+     push 1
+     push 0
+     push -3
+     push -1
+     push 1
+     push 4
+     push 3
+     push 6
+     push 3
+     push 5
+     push 2
+     push 4
+     push 1
+     push 1
+     push 1
+     push 4
+     push 1
+     call "range"
+     set
+     set
+     set
+     call "compare_memory"
+     zero "__test_range_2"
+     push 133
+     call "raise"
+part "__test_range_2"
+     call "range"
+     set
+     set
+     set
+     call "compare_memory"
+     zero "__test_range_3"
+     push 134
+     call "raise"
+part "__test_range_3"
+     call "range"
+     set
+     set
+     call "compare_memory"
+     zero "__test_range_4"
+     push 135
+     call "raise"
+part "__test_range_4"
+     call "range"
+     set
+     set
+     call "compare_memory"
+     zero "__test_range_return"
+     push 136
+     call "raise"
+part "__test_range_return"
+     call "clear"
+     back
+# def test_memory_manager_size():
+#     HEAP[-1] = 1
+#     a = malloc(123)
+#     b = malloc(456)
+#     c = malloc(789)
+#     if memory_manager_size(a) != 123:
+#         raise Exception(138)
+#     if memory_manager_size(b) != 456:
+#         raise Exception(139)
+#     if memory_manager_size(c) != 789:
+#         raise Exception(140)
+#     free(c)
+#     free(b)
+#     free(a)
+#     clear(-1, 0)
+part "test_memory_manager_size"
+     push -1
+     push 1
+     set
+     push 123
+     call "malloc"
+     push 456
+     call "malloc"
+     push 789
+     call "malloc"
+     copy 2
+     call "memory_manager_size"
+     push 123
+     sub
+     zero "__test_memory_manager_size_2"
+     push 138
+     call "raise"
+part "__test_memory_manager_size_2"
+     copy 1
+     call "memory_manager_size"
+     push 456
+     sub
+     zero "__test_memory_manager_size_3"
+     push 139
+     call "raise"
+part "__test_memory_manager_size_3"
+     copy
+     call "memory_manager_size"
+     push 789
+     sub
+     zero "__test_memory_manager_size_return"
+     push 140
+     call "raise"
+part "__test_memory_manager_size_return"
+     call "free"
+     call "free"
+     call "free"
+     push -1
+     push 0
+     call "clear"
+     back
+# def test_mark():
+#     HEAP[-1] = 1
+#     a = malloc(1500)
+#     mark(a)
+#     range(3001, 1, 1501, 1)
+#     if compare_memory(a, 3001, 3000) != 0:
+#         raise Exception(141)
+#     free(a)
+#     clear(-1, 4500)
+part "test_mark"
+     push -1
+     push 1
+     set
+     push 1500
+     call "malloc"
+     copy
+     call "mark"
+     push 3001
+     push 1
+     push 1501
+     push 1
+     call "range"
+     copy
+     push 3001
+     push 3000
+     call "compare_memory"
+     zero "__test_mark_return"
+     push 141
+     call "raise"
+part "__test_mark_return"
+     call "free"
+     push -1
+     push 4500
+     call "clear"
+     back
+# def test_memory_manager_inflate_before():
+#     HEAP[-1] = 101
+#     a = malloc(10)
+#     b = malloc(10)
+#     c = malloc(10)
+#     d = malloc(10)
+#     if HEAP[-2] != 4:
+#         raise Exception(116)
+#     mark(d)
+#     mark(c)
+#     mark(b)
+#     free(a)
+#     b = memory_manager_inflate_before(b, 15, 0)
+#     c = memory_manager_inflate_before(c, 15, 1)
+#     if HEAP[-2] != 3:
+#         raise Exception(117)
+#     e = malloc(40)
+#     range(e, 1, 11, 1)
+#     range(e + 10, 1, 6, 1)
+#     range(e + 15, 1, 6, 1)
+#     range(e + 20, 6, 11, 1)
+#     range(e + 25, 6, 11, 1)
+#     range(e + 30, 1, 11, 1)
+#     if compare_memory(b, e, 40) != 0:
+#         raise Exception(118)
+#     free(e)
+#     free(c)
+#     free(b)
+#     free(d)
+#     if HEAP[-2] != 0:
+#         raise Exception(119)
+#     HEAP[-1] = 0
+#     HEAP[0] = 0
+#     clear(101, 180)
+part "test_memory_manager_inflate_before"
+     push -1
+     push 101
+     set
+     push 10
+     call "malloc"
+     push 10
+     call "malloc"
+     push 10
+     call "malloc"
+     push 10
+     call "malloc"
+     push 4
+     push -2
+     get
+     sub
+     zero "__test_memory_manager_inflate_before_2"
+     push 116
+     call "raise"
+part "__test_memory_manager_inflate_before_2"
+     copy 3
+     copy 3
+     copy 3
+     copy 3
+     call "mark"
+     call "mark"
+     call "mark"
+     call "free"
+     copy 2
+     push 15
+     push 0
+     call "memory_manager_inflate_before"
+     copy 2
+     push 15
+     push 1
+     call "memory_manager_inflate_before"
+     push 3
+     push -2
+     get
+     sub
+     zero "__test_memory_manager_inflate_before_3"
+     push 117
+     call "raise"
+part "__test_memory_manager_inflate_before_3"
+     push 40
+     call "malloc"
+     copy
+     push 1
+     push 11
+     push 1
+     call "range"
+     copy
+     push 10
+     add
+     push 1
+     push 6
+     push 1
+     call "range"
+     copy
+     push 15
+     add
+     push 1
+     push 6
+     push 1
+     call "range"
+     copy
+     push 20
+     add
+     push 6
+     push 11
+     push 1
+     call "range"
+     copy
+     push 25
+     add
+     push 6
+     push 11
+     push 1
+     call "range"
+     copy
+     push 30
+     add
+     push 1
+     push 11
+     push 1
+     call "range"
+     copy 2
+     copy 1
+     push 40
+     call "compare_memory"
+     zero "__test_memory_manager_inflate_before_4"
+     push 118
+     call "raise"
+part "__test_memory_manager_inflate_before_4"
+     call "free"
+     call "free"
+     call "free"
+     call "free"
+     push -2
+     away 3
+     get
+     zero "__test_memory_manager_inflate_before_return"
+     push 119
+     call "raise"
+part "__test_memory_manager_inflate_before_return"
+     push 101
+     push 180
+     push 0
+     push 0
+     push -1
+     push 0
+     set
+     set
+     call "clear"
+     back
+# def test_rotate_3_down():
+#     stack.extend((1, 2, 3))
+#     rotate_3_down()
+#     if stack.pop() != 1:
+#         raise Exception(147)
+#     if stack.pop() != 3:
+#         raise Exception(148)
+#     if stack.pop() != 2:
+#         raise Exception(149)
+#     HEAP[0] = 0
+part "test_rotate_3_down"
+     push 1
+     push 2
+     push 3
+     call "rotate_3_down"
+     push 1
+     sub
+     zero "__test_rotate_3_down_2"
+     push 147
+     call "raise"
+part "__test_rotate_3_down_2"
+     push 3
+     sub
+     zero "__test_rotate_3_down_3"
+     push 148
+     call "raise"
+part "__test_rotate_3_down_3"
+     push 2
+     sub
+     zero "__test_rotate_3_down_return"
+     push 149
+     call "raise"
+part "__test_rotate_3_down_return"
+     push 0
+     push 0
+     set
+     back
+# def test_rotate_3_up():
+#     stack.extend((1, 2, 3))
+#     rotate_3_down()
+#     if stack.pop() != 2:
+#         raise Exception(150)
+#     if stack.pop() != 1:
+#         raise Exception(151)
+#     if stack.pop() != 3:
+#         raise Exception(152)
+#     HEAP[0] = 0
+part "test_rotate_3_up"
+     push 1
+     push 2
+     push 3
+     call "rotate_3_up"
+     push 2
+     sub
+     zero "__test_rotate_3_up_2"
+     push 150
+     call "raise"
+part "__test_rotate_3_up_2"
+     push 1
+     sub
+     zero "__test_rotate_3_up_3"
+     push 151
+     call "raise"
+part "__test_rotate_3_up_3"
+     push 3
+     sub
+     zero "__test_rotate_3_up_return"
+     push 152
+     call "raise"
+part "__test_rotate_3_up_return"
+     push 0
+     push 0
+     set
+     back
+# def test_memory_manager_inflate_move():
+#     HEAP[-1] = 1
+#     a = malloc(10)
+#     b = malloc(25)
+#     c = malloc(10)
+#     d = malloc(5)
+#     e = malloc(10)
+#     f = malloc(5)
+#     g = malloc(10)
+#     free(b)
+#     free(d)
+#     free(f)
+#     mark(e)
+#     h = memory_manager_inflate_move(e, 25, 2)
+#     if compare_memory(1, e - 10, 50) != 0:
+#         raise Exception(142)
+#     i = malloc(5)
+#     free(g)
+#     j = malloc(25)
+#     if memory_manager_size(h) != 25:
+#         raise Exception(143)
+#     if memory_manager_size(j) != 25:
+#         raise Exception(144)
+#     if compare_memory(h, j, 25) != 0:
+#         raise Exception(145)
+#     if j != e:
+#         raise Exception(146)
+#     free(j)
+#     free(i)
+#     free(h)
+#     free(c)
+#     free(a)
+#     clear(-1, 0)
+#     clear(11, 20)
+#     clear(51, 60)
+part "test_memory_manager_inflate_move"
+     push -1
+     push 1
+     set
+     push 10
+     call "malloc"
+     push 25
+     call "malloc"
+     push 10
+     call "malloc"
+     push 5
+     call "malloc"
+     push 10
+     call "malloc"
+     push 5
+     call "malloc"
+     push 10
+     call "malloc"
+     copy 2
+     copy 2
+     copy 5
+     copy 8
+     call "free"
+     call "free"
+     call "free"
+     call "mark"
+     copy 2
+     push 25
+     push 2
+     call "memory_manager_inflate_move"
+     push 1
+     copy 4
+     push 10
+     sub
+     push 50
+     call "compare_memory"
+     zero "__test_memory_manager_inflate_move_2"
+     push 142
+     call "raise"
+part "__test_memory_manager_inflate_move_2"
+     push 5
+     call "malloc"
+     copy 2
+     call "free"
+     push 25
+     call "malloc"
+     copy 2
+     call "memory_manager_size"
+     push 25
+     sub
+     zero "__test_memory_manager_inflate_move_3"
+     push 143
+     call "raise"
+part "__test_memory_manager_inflate_move_3"
+     copy
+     call "memory_manager_size"
+     push 25
+     sub
+     zero "__test_memory_manager_inflate_move_4"
+     push 144
+     call "raise"
+part "__test_memory_manager_inflate_move_4"
+     copy 2
+     copy 1
+     push 25
+     call "compare_memory"
+     zero "__test_memory_manager_inflate_move_5"
+     push 145
+     call "raise"
+part "__test_memory_manager_inflate_move_5"
+     copy
+     copy 6
+     sub
+     zero "__test_memory_manager_inflate_move_return"
+     push 146
+     call "raise"
+part "__test_memory_manager_inflate_move_return"
+     call "free"
+     call "free"
+     away 4
+     call "free"
+     call "free"
+     away
+     call "free"
+     push -1
+     push 0
+     call "clear"
+     push 11
+     push 20
+     call "clear"
+     push 51
+     push 60
+     call "clear"
+     back
+# def test_memory_manager_inflate_block():
+#     HEAP[-1] = 1
+#     a = malloc(10)
+#     b = memory_manager_inflate_block(a, 20, 0)
+#     if a != b:
+#         raise Exception(153)
+#     if memory_manager_size(a) != 20:
+#         raise Exception(154)
+#     c = malloc(10)
+#     d = malloc(10)
+#     free(c)
+#     e = memory_manager_inflate_block(a, 30, 0)
+#     if a != e:
+#         raise Exception(155)
+#     if memory_manager_size(a) != 30:
+#         raise Exception(156)
+#     f = malloc(10)
+#     free(a)
+#     mark(d)
+#     g = memory_manager_inflate_block(d, 40, 0)
+#     if a != g:
+#         raise Exception(157)
+#     if memory_manager_size(a) != 40:
+#         raise Exception(158)
+#     if compare_memory(1, 31, 10) != 0:
+#         raise Exception(159)
+#     h = memory_manager_inflate_block(a, 50, 0)
+#     if h != f + memory_manager_size(f):
+#         raise Exception(160)
+#     if compare_memory(1, 51, 50) != 0:
+#         raise Exception(161)
+#     free(h)
+#     free(f)
+#     clear(-1, 90)
+part "test_memory_manager_inflate_block"
+     push -1
+     push 1
+     set
+     push 10
+     call "malloc"
+     copy
+     push 20
+     push 0
+     call "memory_manager_inflate_block"
+     copy 1
+     sub
+     zero "__test_memory_manager_inflate_block_2"
+     push 153
+     call "raise"
+     back
+part "__test_memory_manager_inflate_block_2"
+     copy
+     call "memory_manager_size"
+     push 20
+     sub
+     zero "__test_memory_manager_inflate_block_3"
+     push 154
+     call "raise"
+part "__test_memory_manager_inflate_block_3"
+     push 10
+     call "malloc"
+     push 10
+     call "malloc"
+     swap
+     call "free"
+     copy 1
+     push 30
+     push 0
+     call "memory_manager_inflate_block"
+     copy 2
+     sub
+     zero "__test_memory_manager_inflate_block_4"
+     push 155
+     call "raise"
+part "__test_memory_manager_inflate_block_4"
+     copy 1
+     call "memory_manager_size"
+     push 30
+     sub
+     zero "__test_memory_manager_inflate_block_5"
+     push 156
+     call "raise"
+part "__test_memory_manager_inflate_block_5"
+     push 10
+     call "malloc"
+     copy 2
+     call "free"
+     copy 1
+     copy
+     call "mark"
+     push 40
+     push 0
+     call "memory_manager_inflate_block"
+     copy 3
+     sub
+     zero "__test_memory_manager_inflate_block_6"
+     push 157
+     call "raise"
+part "__test_memory_manager_inflate_block_6"
+     copy 2
+     call "memory_manager_size"
+     push 40
+     sub
+     zero "__test_memory_manager_inflate_block_7"
+     push 158
+     call "raise"
+part "__test_memory_manager_inflate_block_7"
+     push 1
+     push 31
+     push 10
+     call "compare_memory"
+     zero "__test_memory_manager_inflate_block_8"
+     push 159
+     call "raise"
+part "__test_memory_manager_inflate_block_8"
+     copy 2
+     push 50
+     push 0
+     call "memory_manager_inflate_block"
+     copy
+     copy 2
+     copy
+     call "memory_manager_size"
+     add
+     sub
+     zero "__test_memory_manager_inflate_block_9"
+     push 160
+     call "raise"
+part "__test_memory_manager_inflate_block_9"
+     push 1
+     push 51
+     push 50
+     call "compare_memory"
+     zero "__test_memory_manager_inflate_block_return"
+     push 161
+     call "raise"
+part "__test_memory_manager_inflate_block_return"
+     call "free"
+     away 2
+     call "free"
+     push -1
+     push 90
+     call "clear"
+     back
+# def test_realloc():
+#     HEAP[-1] = 1
+#     a = malloc(3)
+#     if realloc(a, 0) != 0:
+#         raise Exception(162)
+#     a = malloc(3)
+#     if realloc(a, -1) != 0:
+#         raise Exception(163)
+#     a = malloc(3)
+#     if realloc(a, 3) != a:
+#         raise Exception(164)
+#     if memory_manager_size(a) != 3:
+#         raise Exception(165)
+#     if realloc(a, 2) != a:
+#         raise Exception(166)
+#     if memory_manager_size(a) != 2:
+#         raise Exception(167)
+#     b = malloc(3)
+#     if realloc(a, 3) != 6:
+#         raise Exception(168)
+#     if memory_manager_size(6) != 3:
+#         raise Exception(169)
+#     free(b)
+#     free(6)
+#     clear(-1, 0)
+part "test_realloc"
+     push -1
+     push 1
+     set
+     push 3
+     call "malloc"
+     push 0
+     call "realloc"
+     zero "__test_realloc_2"
+     push 162
+     call "raise"
+part "__test_realloc_2"
+     push 3
+     call "malloc"
+     push -1
+     call "realloc"
+     zero "__test_realloc_3"
+     push 163
+     call "raise"
+part "__test_realloc_3"
+     push 3
+     call "malloc"
+     copy
+     copy
+     copy
+     push 3
+     call "realloc"
+     sub
+     zero "__test_realloc_4"
+     push 164
+     call "raise"
+part "__test_realloc_4"
+     call "memory_manager_size"
+     push 3
+     sub
+     zero "__test_realloc_5"
+     push 165
+     call "raise"
+part "__test_realloc_5"
+     copy
+     copy
+     copy
+     push 2
+     call "realloc"
+     sub
+     zero "__test_realloc_6"
+     push 166
+     call "raise"
+part "__test_realloc_6"
+     call "memory_manager_size"
+     push 2
+     sub
+     zero "__test_realloc_7"
+     push 167
+     call "raise"
+part "__test_realloc_7"
+     push 3
+     call "malloc"
+     swap
+     push 3
+     call "realloc"
+     push 6
+     sub
+     zero "__test_realloc_8"
+     push 168
+     call "raise"
+part "__test_realloc_8"
+     push 3
+     push 6
+     call "memory_manager_size"
+     sub
+     zero "__test_realloc_return"
+     push 169
+     call "raise"
+part "__test_realloc_return"
+     call "free"
+     push 6
+     call "free"
+     push -1
+     push 0
+     call "clear"
+     back
+# def test_memory_manager_blocks():
+#     HEAP[-1] = 1
+#     a = malloc(10)
+#     b = malloc(10)
+#     c = malloc(10)
+#     if memory_manager_blocks() != 3:
+#         raise Exception(170)
+#     free(c)
+#     free(b)
+#     free(a)
+#     if memory_manager_blocks() != 0:
+#         raise Exception(171)
+#     clear(-1, 0)
+part "test_memory_manager_blocks"
+     push -1
+     push 1
+     set
+     push 10
+     call "malloc"
+     push 10
+     call "malloc"
+     push 10
+     call "malloc"
+     call "memory_manager_blocks"
+     push 3
+     sub
+     zero "__test_memory_manager_blocks_2"
+     push 170
+     call "raise"
+part "__test_memory_manager_blocks_2"
+     call "free"
+     call "free"
+     call "free"
+     call "memory_manager_blocks"
+     zero "__test_memory_manager_blocks_return"
+     push 171
+     call "raise"
+part "__test_memory_manager_blocks_return"
+     push -1
+     push 0
+     call "clear"
+     back
+# def test_memory_manager_cells():
+#     memory_manager_append_cell(11, 20)
+#     memory_manager_append_cell(31, 40)
+#     if memory_manager_cells() != 20:
+#         raise Exception(172)
+#     memory_manager_pop_cell(-1)
+#     if memory_manager_cells() != 10:
+#         raise Exception(173)
+#     memory_manager_pop_cell(-1)
+#     if memory_manager_cells() != 0:
+#         raise Exception(174)
+#     HEAP[0] = 0
+part "test_memory_manager_cells"
+     push 0
+     push 0
+     push -1
+     push 10
+     push -1
+     push 20
+     push 31
+     push 40
+     push 11
+     push 20
+     call "memory_manager_append_cell"
+     call "memory_manager_append_cell"
+     call "memory_manager_cells"
+     sub
+     zero "__test_memory_manager_cells_2"
+     push 172
+     call "raise"
+part "__test_memory_manager_cells_2"
+     call "memory_manager_pop_cell"
+     away
+     away
+     call "memory_manager_cells"
+     sub
+     zero "__test_memory_manager_cells_3"
+     push 173
+     call "raise"
+part "__test_memory_manager_cells_3"
+     call "memory_manager_pop_cell"
+     away
+     away
+     call "memory_manager_cells"
+     zero "__test_memory_manager_cells_return"
+     push 174
+     call "raise"
+part "__test_memory_manager_cells_return"
+     set
+     back
+# def test_memory_manager_pointers():
+#     HEAP[-1] = 1025
+#     array = memory_manager_pointers(False)
+#     if array[0] != 0:
+#         raise Exception(176)
+#     free(array)
+#     array = memory_manager_pointers(True)
+#     if array[0] != 1:
+#         raise Exception(177)
+#     if array[1] != array:
+#         raise Exception(178)
+#     test = memory_manager_pointers(False)
+#     if compare_memory(array, test, 2) != 0:
+#         raise Exception(179)
+#     free(test)
+#     test = memory_manager_pointers(True)
+#     if test[0] != 2:
+#         raise Exception(180)
+#     if test[1] != array:
+#         raise Exception(181)
+#     if test[2] != test:
+#         raise Exception(182)
+#     free(test)
+#     free(array)
+#     clear(-1, 0)
+#     clear(1025, 1029)
+part "test_memory_manager_pointers"
+     push -1
+     push 1025
+     set
+     push 0
+     call "memory_manager_pointers"
+     copy
+     get
+     zero "__test_memory_manager_pointers_2"
+     push 176
+     call "raise"
+part "__test_memory_manager_pointers_2"
+     call "free"
+     push 1
+     call "memory_manager_pointers"
+     copy
+     get
+     push 1
+     sub
+     zero "__test_memory_manager_pointers_3"
+     push 177
+     call "raise"
+part "__test_memory_manager_pointers_3"
+     copy
+     copy
+     push 1
+     add
+     get
+     sub
+     zero "__test_memory_manager_pointers_4"
+     push 178
+     call "raise"
+part "__test_memory_manager_pointers_4"
+     push 0
+     call "memory_manager_pointers"
+     copy 1
+     copy 1
+     push 2
+     call "compare_memory"
+     zero "__test_memory_manager_pointers_5"
+     push 179
+     call "raise"
+part "__test_memory_manager_pointers_5"
+     call "free"
+     push 1
+     call "memory_manager_pointers"
+     copy
+     get
+     push 2
+     sub
+     zero "__test_memory_manager_pointers_6"
+     push 180
+     call "raise"
+part "__test_memory_manager_pointers_6"
+     copy 1
+     copy 1
+     push 1
+     add
+     get
+     sub
+     zero "__test_memory_manager_pointers_7"
+     push 181
+     call "raise"
+part "__test_memory_manager_pointers_7"
+     copy
+     copy
+     push 2
+     add
+     get
+     sub
+     zero "__test_memory_manager_pointers_return"
+     push 182
+     call "raise"
+part "__test_memory_manager_pointers_return"
+     call "free"
+     call "free"
+     push 1025
+     push 1029
+     push -1
+     push 0
+     call "clear"
+     call "clear"
+     back
+# def test_memory_manager_find():
+#     if memory_manager_find(1) != 0:
+#         raise Exception(183)
+#     memory_manager_append_cell(1, 10)
+#     memory_manager_append_cell(21, 30)
+#     memory_manager_append_cell(41, 50)
+#     if memory_manager_find(0) != 0:
+#         raise Exception(184)
+#     if memory_manager_find(1) != 1:
+#         raise Exception(185)
+#     if memory_manager_find(5) != 1:
+#         raise Exception(186)
+#     if memory_manager_find(10) != 1:
+#         raise Exception(187)
+#     if memory_manager_find(11) != 0:
+#         raise Exception(188)
+#     if memory_manager_find(15) != 0:
+#         raise Exception(189)
+#     if memory_manager_find(20) != 0:
+#         raise Exception(190)
+#     if memory_manager_find(21) != 21:
+#         raise Exception(191)
+#     if memory_manager_find(25) != 21:
+#         raise Exception(192)
+#     if memory_manager_find(30) != 21:
+#         raise Exception(193)
+#     if memory_manager_find(31) != 0:
+#         raise Exception(194)
+#     if memory_manager_find(35) != 0:
+#         raise Exception(195)
+#     if memory_manager_find(40) != 0:
+#         raise Exception(196)
+#     if memory_manager_find(41) != 41:
+#         raise Exception(197)
+#     if memory_manager_find(45) != 41:
+#         raise Exception(198)
+#     if memory_manager_find(50) != 41:
+#         raise Exception(199)
+#     if memory_manager_find(51) != 0:
+#         raise Exception(200)
+#     clear(-8, 0)
+part "test_memory_manager_find"
+     push 1
+     call "memory_manager_find"
+     zero "__test_memory_manager_find_2"
+     push 183
+     call "raise"
+part "__test_memory_manager_find_2"
+     push 1
+     push 10
+     call "memory_manager_append_cell"
+     push 21
+     push 30
+     call "memory_manager_append_cell"
+     push 41
+     push 50
+     call "memory_manager_append_cell"
+     push 0
+     call "memory_manager_find"
+     zero "__test_memory_manager_find_3"
+     push 184
+     call "raise"
+part "__test_memory_manager_find_3"
+     push 1
+     call "memory_manager_find"
+     push 1
+     sub
+     zero "__test_memory_manager_find_4"
+     push 185
+     call "raise"
+part "__test_memory_manager_find_4"
+     push 5
+     call "memory_manager_find"
+     push 1
+     sub
+     zero "__test_memory_manager_find_5"
+     push 186
+     call "raise"
+part "__test_memory_manager_find_5"
+     push 10
+     call "memory_manager_find"
+     push 1
+     sub
+     zero "__test_memory_manager_find_6"
+     push 187
+     call "raise"
+part "__test_memory_manager_find_6"
+     push 11
+     call "memory_manager_find"
+     zero "__test_memory_manager_find_7"
+     push 188
+     call "raise"
+part "__test_memory_manager_find_7"
+     push 15
+     call "memory_manager_find"
+     zero "__test_memory_manager_find_8"
+     push 189
+     call "raise"
+part "__test_memory_manager_find_8"
+     push 20
+     call "memory_manager_find"
+     zero "__test_memory_manager_find_9"
+     push 190
+     call "raise"
+part "__test_memory_manager_find_9"
+     push 21
+     call "memory_manager_find"
+     push 21
+     sub
+     zero "__test_memory_manager_find_10"
+     push 191
+     call "raise"
+part "__test_memory_manager_find_10"
+     push 25
+     call "memory_manager_find"
+     push 21
+     sub
+     zero "__test_memory_manager_find_11"
+     push 192
+     call "raise"
+part "__test_memory_manager_find_11"
+     push 30
+     call "memory_manager_find"
+     push 21
+     sub
+     zero "__test_memory_manager_find_12"
+     push 193
+     call "raise"
+part "__test_memory_manager_find_12"
+     push 31
+     call "memory_manager_find"
+     zero "__test_memory_manager_find_13"
+     push 194
+     call "raise"
+part "__test_memory_manager_find_13"
+     push 35
+     call "memory_manager_find"
+     zero "__test_memory_manager_find_14"
+     push 195
+     call "raise"
+part "__test_memory_manager_find_14"
+     push 40
+     call "memory_manager_find"
+     zero "__test_memory_manager_find_15"
+     push 196
+     call "raise"
+part "__test_memory_manager_find_15"
+     push 41
+     call "memory_manager_find"
+     push 41
+     sub
+     zero "__test_memory_manager_find_16"
+     push 197
+     call "raise"
+part "__test_memory_manager_find_16"
+     push 45
+     call "memory_manager_find"
+     push 41
+     sub
+     zero "__test_memory_manager_find_17"
+     push 198
+     call "raise"
+part "__test_memory_manager_find_17"
+     push 50
+     call "memory_manager_find"
+     push 41
+     sub
+     zero "__test_memory_manager_find_18"
+     push 199
+     call "raise"
+part "__test_memory_manager_find_18"
+     push 51
+     call "memory_manager_find"
+     zero "__test_memory_manager_find_return"
+     push 200
+     call "raise"
+part "__test_memory_manager_find_return"
+     push -8
+     push 0
+     call "clear"
+     back
+# def test_uint_cast():
+#     if uint_cast(0) != 0:
+#         raise Exception(201)
+#     if uint_cast(4294967296) != 0:
+#         raise Exception(202)
+#     if uint_cast(-4294967296) != 0:
+#         raise Exception(203)
+#     if uint_cast(1) != 1
+#         raise Exception(204)
+#     if uint_cast(4294967297) != 1:
+#         raise Exception(205)
+#     if uint_cast(-4294967295) != 1:
+#         raise Exception(206)
+#     if uint_cast(-1) != 4294967295:
+#         raise Exception(207)
+#     if uint_cast(4294967295) != 4294967295:
+#         raise Exception(208)
+#     if uint_cast(-4294967297) != 4294967295:
+#         raise Exception(209)
+part "test_uint_cast"
+     push 4294967295
+     push -4294967297
+     push 4294967295
+     push 4294967295
+     push 4294967295
+     push -1
+     push 1
+     push -4294967295
+     push 1
+     push 4294967297
+     push 1
+     push 1
+     push -4294967296
+     push 4294967296
+     push 0
+     call "uint_cast"
+     zero "__test_uint_cast_2"
+     push 201
+     call "raise"
+part "__test_uint_cast_2"
+     call "uint_cast"
+     zero "__test_uint_cast_3"
+     push 202
+     call "raise"
+part "__test_uint_cast_3"
+     call "uint_cast"
+     zero "__test_uint_cast_4"
+     push 203
+     call "raise"
+part "__test_uint_cast_4"
+     call "uint_cast"
+     sub
+     zero "__test_unint_cast_5"
+     push 204
+     call "raise"
+part "__test_unint_cast_5"
+     call "uint_cast"
+     sub
+     zero "__test_unint_cast_6"
+     push 205
+     call "raise"
+part "__test_unint_cast_6"
+     call "uint_cast"
+     sub
+     zero "__test_unint_cast_7"
+     push 206
+     call "raise"
+part "__test_unint_cast_7"
+     call "uint_cast"
+     sub
+     zero "__test_unint_cast_8"
+     push 207
+     call "raise"
+part "__test_unint_cast_8"
+     call "uint_cast"
+     sub
+     zero "__test_unint_cast_9"
+     push 208
+     call "raise"
+part "__test_unint_cast_9"
+     call "uint_cast"
+     sub
+     zero "__test_unint_cast_return"
+     push 209
+     call "raise"
+part "__test_unint_cast_return"
+     back
+# def test_shift():
+#     if left_shift(100, 0) != 100:
+#         raise Exception(210)
+#     if right_shift(100, 0) != 100:
+#         raise Exception(211)
+#     if left_shift(100, 2) != 400:
+#         raise Exception(212)
+#     if right_shift(100, 2) != 25:
+#         raise Exception(213)
+#     if left_shift(100, -2) != 25:
+#         raise Exception(214)
+#     if right_shift(100, -2) != 400:
+#         raise Exception(215)
+part "test_shift"
+     push 400
+     push 100
+     push -2
+     push 25
+     push 100
+     push -2
+     push 25
+     push 100
+     push 2
+     push 400
+     push 100
+     push 2
+     push 100
+     push 100
+     push 0
+     push 100
+     push 100
+     push 0
+     call "left_shift"
+     sub
+     zero "__test_shift_2"
+     push 210
+     call "raise"
+part "__test_shift_2"
+     call "right_shift"
+     sub
+     zero "__test_shift_3"
+     push 211
+     call "raise"
+part "__test_shift_3"
+     call "left_shift"
+     sub
+     zero "__test_shift_4"
+     push 212
+     call "raise"
+part "__test_shift_4"
+     call "right_shift"
+     sub
+     zero "__test_shift_5"
+     push 213
+     call "raise"
+part "__test_shift_5"
+     call "left_shift"
+     sub
+     zero "__test_shift_6"
+     push 214
+     call "raise"
+part "__test_shift_6"
+     call "right_shift"
+     sub
+     zero "__test_shift_return"
+     push 215
+     call "raise"
+part "__test_shift_return"
+     back
+# def test_save_stack():
+#     HEAP[-1] = 1
+#     stack.push(0)
+#     stack.push(2)
+#     stack.push(3)
+#     stack.push(5)
+#     stack.push(7)
+#     stack.push(11)
+#     stack.push(13)
+#     stack.push(17)
+#     stack.push(19)
+#     array = save_stack(4)
+#     if array[0] != 4:
+#         raise Exception(223)
+#     if array[4] != 11:
+#         raise Exception(224)
+#     free(array)
+#     array = save_stack(4)
+#     if array[0] != 4:
+#         raise Exception(225)
+#     if array[1] != 7:
+#         raise Exception(226)
+#     free(array)
+#     if stack.pop() != 0:
+#         raise Exception(227)
+#     clear(-1, 8)
+part "test_save_stack"
+     push -1
+     push 1
+     set
+     push 0
+     push 2
+     push 3
+     push 5
+     push 7
+     push 11
+     push 13
+     push 17
+     push 19
+     push 4
+     call "save_stack"
+     copy
+     get
+     push 4
+     sub
+     zero "__test_save_stack_2"
+     push 223
+     call "raise"
+part "__test_save_stack_2"
+     copy
+     push 4
+     add
+     get
+     push 11
+     sub
+     zero "__test_save_stack_3"
+     push 224
+     call "raise"
+part "__test_save_stack_3"
+     call "free"
+     push 4
+     call "save_stack"
+     copy
+     get
+     push 4
+     sub
+     zero "__test_save_stack_4"
+     push 225
+     call "raise"
+part "__test_save_stack_4"
+     copy
+     push 1
+     add
+     get
+     push 7
+     sub
+     zero "__test_save_stack_5"
+     push 226
+     call "raise"
+part "__test_save_stack_5"
+     call "free"
+     zero "__test_save_stack_return"
+     push 227
+     call "raise"
+part "__test_save_stack_return"
+     push -1
+     push 8
+     call "clear"
+     back
+# def test_load_stack():
+#     HEAP[-1] = 1
+#     stack.push(0)
+#     stack.push(2)
+#     stack.push(3)
+#     stack.push(5)
+#     stack.push(7)
+#     stack.push(11)
+#     stack.push(13)
+#     stack.push(17)
+#     stack.push(19)
+#     array = save_stack(3)
+#     if stack[-1] != 11:
+#         raise Exception(228)
+#     load_stack(array, 3)
+#     if stack.pop() != 19:
+#         raise Exception(229)
+#     del stack[-1]
+#     if stack.pop() != 13:
+#         raise Exception(230)
+#     array = save_stack(3)
+#     load_stack(array, 1)
+#     if stack.pop() != 5:
+#         raise Exception(231)
+#     load_stack(array, 2)
+#     if stack.pop() != 11:
+#         raise Exception(232)
+#     del stack[-1]
+#     array = save_stack(2)
+#     load_stack(array, 1)
+#     del stack[-1]
+#     if array[0] != 1:
+#         raise Exception(233)
+#     load_stack(array, 1)
+#     if stack[-2] + stack[-1] != 3:
+#         raise Exception(234)
+#     clear(-1, 7)
+part "test_load_stack"
+     push -1
+     push 1
+     set
+     push 0
+     push 2
+     push 3
+     push 5
+     push 7
+     push 11
+     push 13
+     push 17
+     push 19
+     push 3
+     call "save_stack"
+     copy 1
+     push 11
+     sub
+     zero "__test_load_stack_2"
+     push 228
+     call "raise"
+part "__test_load_stack_2"
+     push 3
+     call "load_stack"
+     push 19
+     sub
+     zero "__test_load_stack_3"
+     push 229
+     call "raise"
+part "__test_load_stack_3"
+     away
+     push 13
+     sub
+     zero "__test_load_stack_4"
+     push 230
+     call "raise"
+part "__test_load_stack_4"
+     push 3
+     call "save_stack"
+     copy
+     push 1
+     call "load_stack"
+     push 5
+     sub
+     zero "__test_load_stack_5"
+     push 231
+     call "raise"
+part "__test_load_stack_5"
+     push 2
+     call "load_stack"
+     push 11
+     sub
+     zero "__test_load_stack_6"
+     push 232
+     call "raise"
+part "__test_load_stack_6"
+     away
+     push 2
+     call "save_stack"
+     copy
+     push 1
+     call "load_stack"
+     away
+     copy
+     get
+     push 1
+     sub
+     zero "__test_load_stack_7"
+     push 233
+     call "raise"
+part "__test_load_stack_7"
+     push 1
+     call "load_stack"
+     add
+     push 3
+     sub
+     zero "__test_load_stack_return"
+     push 234
+     call "raise"
+part "__test_load_stack_return"
+     push -1
+     push 7
+     call "clear"
+     back
+# def test_divmod():
+#     a, b = divmod(99, 2)
+#     if b != 1:
+#         raise Exception(235)
+#     if a != 49:
+#         raise Exception(236)
+#     a, b = divmod(5, 10)
+#     if b != 5:
+#         raise Exception(237)
+#     if a != 0:
+#         raise Exception(238)
+#     a, b = divmod(27, 3)
+#     if b != 0:
+#         raise Exception(239)
+#     if a != 9:
+#         raise Exception(240)
+#     HEAP[0] = 0
+part "test_divmod"
+     push 99
+     push 2
+     call "divmod"
+     push 1
+     sub
+     zero "__test_divmod_2"
+     push 235
+     call "raise"
+part "__test_divmod_2"
+     push 49
+     sub
+     zero "__test_divmod_3"
+     push 236
+     call "raise"
+part "__test_divmod_3"
+     push 5
+     push 10
+     call "divmod"
+     push 5
+     sub
+     zero "__test_divmod_4"
+     push 237
+     call "raise"
+part "__test_divmod_4"
+     zero "__test_divmod_5"
+     push 238
+     call "raise"
+part "__test_divmod_5"
+     push 27
+     push 3
+     call "divmod"
+     zero "__test_divmod_6"
+     push 239
+     call "raise"
+part "__test_divmod_6"
+     push 9
+     sub
+     zero "__test_divmod_return"
+     push 240
+     call "raise"
+part "__test_divmod_return"
+     push 0
+     push 0
+     set
+     back
+# def test_sum_length_array():
+#     HEAP[-1] = 1
+#     array = malloc(3)
+#     array[0] = 2
+#     array[1] = 3
+#     array[2] = 4
+#     if sum_length_array(array) != 7:
+#         raise Exception(237)
+#     array[1] = 5
+#     array[2] = 2
+#     if sum_length_array(array) != 7:
+#         raise Exception(238)
+#     array = realloc(array, 4)
+#     array[3] = 3
+#     if sum_length_array(array) != 7:
+#         raise Exception(239)
+#     array[0] = 3
+#     if sum_length_array(array) != 10:
+#         raise Exception(240)
+#     range(array + 1, 1, 4, 1)
+#     if sum_length_array(array) != 6:
+#         raise Exception(241)
+#     range(array + 1, 100, 373, 91)
+#     if sum_length_array(array) != 573:
+#         raise Exception(242)
+#     free(array)
+#     clear(-1, 4)
+part "test_sum_length_array"
+     push -1
+     push 1
+     set
+     push 3
+     call "malloc"
+     copy
+     push 2
+     set
+     copy
+     push 1
+     add
+     push 3
+     set
+     copy
+     push 2
+     add
+     push 4
+     set
+     copy
+     call "sum_length_array"
+     push 7
+     sub
+     zero "__test_sum_length_array_2"
+     push 237
+     call "raise"
+part "__test_sum_length_array_2"
+     copy
+     push 1
+     add
+     push 5
+     set
+     copy
+     push 2
+     add
+     push 2
+     set
+     copy
+     call "sum_length_array"
+     push 7
+     sub
+     zero "__test_sum_length_array_3"
+     push 238
+     call "raise"
+part "__test_sum_length_array_3"
+     push 4
+     call "realloc"
+     copy
+     push 3
+     add
+     push 3
+     set
+     copy
+     call "sum_length_array"
+     push 7
+     sub
+     zero "__test_sum_length_array_4"
+     push 239
+     call "raise"
+part "__test_sum_length_array_4"
+     copy
+     push 3
+     set
+     copy
+     call "sum_length_array"
+     push 10
+     sub
+     zero "__test_sum_length_array_5"
+     push 240
+     call "raise"
+part "__test_sum_length_array_5"
+     copy
+     push 1
+     add
+     push 1
+     push 4
+     push 1
+     call "range"
+     copy
+     call "sum_length_array"
+     push 6
+     sub
+     zero "__test_sum_length_array_6"
+     push 241
+     call "raise"
+part "__test_sum_length_array_6"
+     copy
+     push 1
+     add
+     push 100
+     push 373
+     push 91
+     call "range"
+     copy
+     call "sum_length_array"
+     push 573
+     sub
+     zero "__test_sum_length_array_return"
+     push 242
+     call "raise"
+part "__test_sum_length_array_return"
+     call "free"
+     push -1
+     push 4
+     call "clear"
+     back
+# def test_value_to_array():
+#     HEAP[-1] = 1
+#     array = value_to_array(7, 2)
+#     if array[0] != 3:
+#         raise Exception(243)
+#     if array[1] != 1:
+#         raise Exception(244)
+#     if array[2] != 1:
+#         raise Exception(245)
+#     if array[3] != 1:
+#         raise Exception(246)
+#     free(array)
+#     array = value_to_array(100, 3)
+#     if sum_length_array(array) != 4:
+#         raise Exception(247)
+#     free(array)
+#     array = value_to_array(123456789, 7)
+#     if sum_length_array(array) != 27:
+#         raise Exception(248)
+#     free(array)
+#     array = value_to_array(123456789, 13)
+#     if sum_length_array(array) != 45:
+#         raise Exception(249)
+#     free(array)
+#     array = value_to_array(100000, 5)
+#     if sum_length_array(array) != 4:
+#         raise Exception(250)
+#     free(array)
+#     clear(-1, 24)
+part "test_value_to_array"
+     push -1
+     push 1
+     set
+     push 7
+     push 2
+     call "value_to_array"
+     copy
+     get
+     push 3
+     sub
+     zero "__test_value_to_array_2"
+     push 243
+     call "raise"
+part "__test_value_to_array_2"
+     copy
+     push 1
+     add
+     get
+     push 1
+     sub
+     zero "__test_value_to_array_3"
+     push 244
+     call "raise"
+part "__test_value_to_array_3"
+     copy
+     push 2
+     add
+     get
+     push 1
+     sub
+     zero "__test_value_to_array_4"
+     push 245
+     call "raise"
+part "__test_value_to_array_4"
+     copy
+     push 3
+     add
+     get
+     push 1
+     sub
+     zero "__test_value_to_array_5"
+     push 246
+     call "raise"
+part "__test_value_to_array_5"
+     call "free"
+     push 100
+     push 3
+     call "value_to_array"
+     copy
+     call "sum_length_array"
+     push 4
+     sub
+     zero "__test_value_to_array_6"
+     push 247
+     call "raise"
+part "__test_value_to_array_6"
+     call "free"
+     push 123456789
+     push 7
+     call "value_to_array"
+     copy
+     call "sum_length_array"
+     push 27
+     sub
+     zero "__test_value_to_array_7"
+     push 248
+     call "raise"
+part "__test_value_to_array_7"
+     call "free"
+     push 123456789
+     push 13
+     call "value_to_array"
+     copy
+     call "sum_length_array"
+     push 45
+     sub
+     zero "__test_value_to_array_8"
+     push 249
+     call "raise"
+part "__test_value_to_array_8"
+     call "free"
+     push 100000
+     push 5
+     call "value_to_array"
+     copy
+     call "sum_length_array"
+     push 4
+     sub
+     zero "__test_value_to_array_return"
+     push 250
+     call "raise"
+part "__test_value_to_array_return"
+     call "free"
+     push -1
+     push 24
+     call "clear"
+     back
+# def test_array_to_value():
+#     HEAP[-1] = 1
+#     array = value_to_array(0, 10)
+#     if array_to_value(array, 10) != 0:
+#         raise Exception(251)
+#     free(array)
+#     array = value_to_array(1234567890, 13)
+#     if array_to_value(array, 13) != 1234567890:
+#         raise Exception(252)
+#     free(array)
+#     array = value_to_array(19850126, 12)
+#     if array_to_value(array, 13) != 31824236:
+#         raise Exception(253)
+#     free(array)
+#     array = value_to_array(100, 8)
+#     if array_to_value(array, 16) != 324:
+#         raise Exception(254)
+#     free(array)
+#     array = value_to_array(341, 2)
+#     if array_to_value(array, 3) != 7381:
+#         raise Exception(255)
+#     free(array)
+#     clear(-1, 23)
+part "test_array_to_value"
+     push -1
+     push 1
+     set
+     push 0
+     push 10
+     call "value_to_array"
+     copy
+     push 10
+     call "array_to_value"
+     zero "__test_array_to_value_2"
+     push 251
+     call "raise"
+part "__test_array_to_value_2"
+     call "free"
+     push 1234567890
+     push 13
+     call "value_to_array"
+     copy
+     push 13
+     call "array_to_value"
+     push 1234567890
+     sub
+     zero "__test_array_to_value_3"
+     push 252
+     call "raise"
+part "__test_array_to_value_3"
+     call "free"
+     push 19850126
+     push 12
+     call "value_to_array"
+     copy
+     push 13
+     call "array_to_value"
+     push 31824236
+     sub
+     zero "__test_array_to_value_4"
+     push 253
+     call "raise"
+part "__test_array_to_value_4"
+     call "free"
+     push 100
+     push 8
+     call "value_to_array"
+     copy
+     push 16
+     call "array_to_value"
+     push 324
+     sub
+     zero "__test_array_to_value_5"
+     push 254
+     call "raise"
+part "__test_array_to_value_5"
+     call "free"
+     push 341
+     push 2
+     call "value_to_array"
+     copy
+     push 3
+     call "array_to_value"
+     push 7381
+     sub
+     zero "__test_array_to_value_return"
+     push 255
+     call "raise"
+part "__test_array_to_value_return"
+     call "free"
+     push -1
+     push 23
+     call "clear"
+     back
+# def test_uint_bits():
+#     HEAP[-1] = 1
+#     number = left_shift(1, 32)
+#     bits = uint_bits(number - 1)
+#     if bits[0] != 1:
+#         raise Exception(256)
+#     if bits[31] != 1:
+#         raise Exception(257)
+#     free(bits)
+#     bits = uint_bits(number)
+#     if bits[0] != 0:
+#         raise Exception(258)
+#     if bits[31] != 0:
+#         raise Exception(259)
+#     free(bits)
+#     clear(-1, 78)
+part "test_uint_bits"
+     push -1
+     push 1
+     set
+     push 1
+     push 32
+     call "left_shift"
+     copy
+     push 1
+     sub
+     call "uint_bits"
+     copy
+     get
+     push 1
+     sub
+     zero "__test_uint_bits_2"
+     push 256
+     call "raise"
+part "__test_uint_bits_2"
+     copy
+     push 31
+     add
+     get
+     push 1
+     sub
+     zero "__test_uint_bits_3"
+     push 257
+     call "raise"
+part "__test_uint_bits_3"
+     call "free"
+     call "uint_bits"
+     copy
+     get
+     zero "__test_uint_bits_4"
+     push 258
+     call "raise"
+part "__test_uint_bits_4"
+     copy
+     push 31
+     add
+     get
+     zero "__test_uint_bits_return"
+     push 259
+     call "raise"
+part "__test_uint_bits_return"
+     call "free"
+     push -1
+     push 78
+     call "clear"
+     back
+# def test_uint_xor():
+#     HEAP[-1] = 1
+#     if uint_xor(123, 124) != 7:
+#         raise Exception(260)
+#     if uint_xor(127, 128) != 255:
+#         raise Exception(261)
+#     if uint_xor(19891229, 19850126) != 92051:
+#         raise Exception(262)
+#     if uint_xor(3558890251, 3920765046) != 1033010045:
+#         raise Exception(263)
+#     if uint_xor(2010047493, 4018657910) != 2554936947:
+#         raise Exception(264)
+#     if uint_xor(83517729861, 159352312248) != 1747467773:
+#         raise Exception(265)
+#     clear(-1, 109)
+part "test_uint_xor"
+     push -1
+     push 1
+     set
+     push 123
+     push 124
+     call "uint_xor"
+     push 7
+     sub
+     zero "__test_uint_xor_2"
+     push 260
+     call "raise"
+part "__test_uint_xor_2"
+     push 127
+     push 128
+     call "uint_xor"
+     push 255
+     sub
+     zero "__test_uint_xor_3"
+     push 261
+     call "raise"
+part "__test_uint_xor_3"
+     push 19891229
+     push 19850126
+     call "uint_xor"
+     push 92051
+     sub
+     zero "__test_uint_xor_4"
+     push 262
+     call "raise"
+part "__test_uint_xor_4"
+     push 3558890251
+     push 3920765046
+     call "uint_xor"
+     push 1033010045
+     sub
+     zero "__test_uint_xor_5"
+     push 263
+     call "raise"
+part "__test_uint_xor_5"
+     push 2010047493
+     push 4018657910
+     call "uint_xor"
+     push 2554936947
+     sub
+     zero "__test_uint_xor_6"
+     push 264
+     call "raise"
+part "__test_uint_xor_6"
+     push 83517729861
+     push 159352312248
+     call "uint_xor"
+     push 1747467773
+     sub
+     zero "__test_uint_xor_return"
+     push 265
+     call "raise"
+part "__test_uint_xor_return"
+     push -1
+     push 109
+     call "clear"
+     back
+# def test_memory_manager_hash():
+#     HEAP[-1] = 1
+#     if memory_manager_hash() != 0:
+#         raise Exception(266)
+#     memory_manager_append_cell(1, 2)
+#     if memory_manager_hash() != 2153645760:
+#         raise Exception(267)
+#     memory_manager_append_cell(3, 5)
+#     if memory_manager_hash() != 4048040839:
+#         raise Exception(268)
+#     memory_manager_append_cell(7, 11)
+#     if memory_manager_hash() != 265376592:
+#         raise Exception(269)
+#     memory_manager_append_cell(1000033, 1000037)
+#     if memory_manager_hash() != 880511209:
+#         raise Exception(270)
+#     clear(-10, 141)
+part "test_memory_manager_hash"
+     push -1
+     push 1
+     set
+     call "memory_manager_hash"
+     zero "__test_memory_manager_hash_2"
+     push 266
+     call "raise"
+part "__test_memory_manager_hash_2"
+     push 1
+     push 2
+     call "memory_manager_append_cell"
+     call "memory_manager_hash"
+     push 2153645760
+     sub
+     zero "__test_memory_manager_hash_3"
+     push 267
+     call "raise"
+part "__test_memory_manager_hash_3"
+     push 3
+     push 5
+     call "memory_manager_append_cell"
+     call "memory_manager_hash"
+     push 4048040839
+     sub
+     zero "__test_memory_manager_hash_4"
+     push 268
+     call "raise"
+part "__test_memory_manager_hash_4"
+     push 7
+     push 11
+     call "memory_manager_append_cell"
+     call "memory_manager_hash"
+     push 265376592
+     sub
+     zero "__test_memory_manager_hash_5"
+     push 269
+     call "raise"
+part "__test_memory_manager_hash_5"
+     push 1000033
+     push 1000037
+     call "memory_manager_append_cell"
+     call "memory_manager_hash"
+     push 880511209
+     sub
+     zero "__test_memory_manager_hash_return"
+     push 270
+     call "raise"
+part "__test_memory_manager_hash_return"
+     push -10
+     push 141
+     call "clear"
+     back

History