tests/micropython: Remove big ints dependence for viper boundary tests.
This commit provides an implementation for viper boundary tests that can work even without big int support. Since it uses a fixed-size buffer to hold values to work with, this should work on any platform as long as its integers are at least 32 bits wide, regardless its configuration on how big integers can get. Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
This commit is contained in:
parent
f10707febb
commit
b1d5c656de
6 changed files with 67 additions and 60 deletions
|
|
@ -15,6 +15,23 @@ SIZE = 2
|
|||
MASK = (1 << (8 * SIZE)) - 1
|
||||
|
||||
|
||||
next_int = 1
|
||||
test_buffer = bytearray(SIZE)
|
||||
|
||||
|
||||
def next_value() -> uint:
|
||||
global next_int
|
||||
global test_buffer
|
||||
for index in range(1, SIZE):
|
||||
test_buffer[index - 1] = test_buffer[index]
|
||||
test_buffer[SIZE - 1] = next_int
|
||||
next_int += 1
|
||||
output = 0
|
||||
for byte in test_buffer:
|
||||
output = (output << 8) | byte
|
||||
return output & MASK
|
||||
|
||||
|
||||
@micropython.viper
|
||||
def set_index(dest: ptr16, i: int, val: uint):
|
||||
saved = dest
|
||||
|
|
@ -27,8 +44,6 @@ def get_index(src, i):
|
|||
|
||||
|
||||
buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 1024)
|
||||
next = 1
|
||||
val = 0
|
||||
for bit in BIT_THRESHOLDS:
|
||||
print("---", bit)
|
||||
pre, idx, post = (
|
||||
|
|
@ -36,22 +51,10 @@ for bit in BIT_THRESHOLDS:
|
|||
(((1 << bit) - (1 * SIZE)) // SIZE),
|
||||
((1 << bit) // SIZE),
|
||||
)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, pre, val & MASK)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, idx, val & MASK)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, post, val & MASK)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, pre, next_value())
|
||||
set_index(buffer, idx, next_value())
|
||||
set_index(buffer, post, next_value())
|
||||
print(hex(get_index(buffer, pre)), hex(get_index(buffer, idx)), hex(get_index(buffer, post)))
|
||||
exec(SET_TEMPLATE.format(off=pre, val=val & MASK))
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
exec(SET_TEMPLATE.format(off=idx, val=val & MASK))
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
exec(SET_TEMPLATE.format(off=post, val=val & MASK))
|
||||
exec(SET_TEMPLATE.format(off=pre, val=next_value()))
|
||||
exec(SET_TEMPLATE.format(off=idx, val=next_value()))
|
||||
exec(SET_TEMPLATE.format(off=post, val=next_value()))
|
||||
|
|
@ -14,6 +14,22 @@ BIT_THRESHOLDS = (5, 8, 11, 12)
|
|||
SIZE = 4
|
||||
MASK = (1 << (8 * SIZE)) - 1
|
||||
|
||||
next_int = 1
|
||||
test_buffer = bytearray(SIZE)
|
||||
|
||||
|
||||
def next_value() -> uint:
|
||||
global next_int
|
||||
global test_buffer
|
||||
for index in range(1, SIZE):
|
||||
test_buffer[index - 1] = test_buffer[index]
|
||||
test_buffer[SIZE - 1] = next_int
|
||||
next_int += 1
|
||||
output = 0
|
||||
for byte in test_buffer:
|
||||
output = (output << 8) | byte
|
||||
return output & MASK
|
||||
|
||||
|
||||
@micropython.viper
|
||||
def set_index(dest: ptr32, i: int, val: uint):
|
||||
|
|
@ -32,8 +48,6 @@ def get_index(src, i):
|
|||
|
||||
|
||||
buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 1024)
|
||||
next = 1
|
||||
val = 0
|
||||
for bit in BIT_THRESHOLDS:
|
||||
print("---", bit)
|
||||
pre, idx, post = (
|
||||
|
|
@ -41,22 +55,10 @@ for bit in BIT_THRESHOLDS:
|
|||
(((1 << bit) - (1 * SIZE)) // SIZE),
|
||||
((1 << bit) // SIZE),
|
||||
)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, pre, val & MASK)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, idx, val & MASK)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, post, val & MASK)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, pre, next_value())
|
||||
set_index(buffer, idx, next_value())
|
||||
set_index(buffer, post, next_value())
|
||||
print(hex(get_index(buffer, pre)), hex(get_index(buffer, idx)), hex(get_index(buffer, post)))
|
||||
exec(SET_TEMPLATE.format(off=pre, val=val & MASK))
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
exec(SET_TEMPLATE.format(off=idx, val=val & MASK))
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
exec(SET_TEMPLATE.format(off=post, val=val & MASK))
|
||||
exec(SET_TEMPLATE.format(off=pre, val=next_value()))
|
||||
exec(SET_TEMPLATE.format(off=idx, val=next_value()))
|
||||
exec(SET_TEMPLATE.format(off=post, val=next_value()))
|
||||
|
|
@ -14,6 +14,22 @@ BIT_THRESHOLDS = (5, 8, 11, 12)
|
|||
SIZE = 1
|
||||
MASK = (1 << (8 * SIZE)) - 1
|
||||
|
||||
next_int = 1
|
||||
test_buffer = bytearray(SIZE)
|
||||
|
||||
|
||||
def next_value() -> uint:
|
||||
global next_int
|
||||
global test_buffer
|
||||
for index in range(1, SIZE):
|
||||
test_buffer[index - 1] = test_buffer[index]
|
||||
test_buffer[SIZE - 1] = next_int
|
||||
next_int += 1
|
||||
output = 0
|
||||
for byte in test_buffer:
|
||||
output = (output << 8) | byte
|
||||
return output & MASK
|
||||
|
||||
|
||||
@micropython.viper
|
||||
def set_index(dest: ptr8, i: int, val: uint):
|
||||
|
|
@ -27,27 +43,13 @@ def get_index(src: ptr8, i: int):
|
|||
|
||||
|
||||
buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 1024)
|
||||
next = 1
|
||||
val = 0
|
||||
for bit in BIT_THRESHOLDS:
|
||||
print("---", bit)
|
||||
pre, idx, post = (((1 << bit) - (2 * SIZE)), ((1 << bit) - (1 * SIZE)), (1 << bit))
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, pre, val & MASK)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, idx, val & MASK)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, post, val & MASK)
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
set_index(buffer, pre, next_value())
|
||||
set_index(buffer, idx, next_value())
|
||||
set_index(buffer, post, next_value())
|
||||
print(hex(get_index(buffer, pre)), hex(get_index(buffer, idx)), hex(get_index(buffer, post)))
|
||||
exec(SET_TEMPLATE.format(off=pre, val=val & MASK))
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
exec(SET_TEMPLATE.format(off=idx, val=val & MASK))
|
||||
val = (val << 8) + next
|
||||
next += 1
|
||||
exec(SET_TEMPLATE.format(off=post, val=val & MASK))
|
||||
exec(SET_TEMPLATE.format(off=pre, val=next_value()))
|
||||
exec(SET_TEMPLATE.format(off=idx, val=next_value()))
|
||||
exec(SET_TEMPLATE.format(off=post, val=next_value()))
|
||||
Loading…
Reference in a new issue