summaryrefslogtreecommitdiff
path: root/tests/micropython/viper_ptr32_load_boundary.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/micropython/viper_ptr32_load_boundary.py')
-rw-r--r--tests/micropython/viper_ptr32_load_boundary.py32
1 files changed, 23 insertions, 9 deletions
diff --git a/tests/micropython/viper_ptr32_load_boundary.py b/tests/micropython/viper_ptr32_load_boundary.py
index 6954bd46b..971d1113c 100644
--- a/tests/micropython/viper_ptr32_load_boundary.py
+++ b/tests/micropython/viper_ptr32_load_boundary.py
@@ -2,24 +2,38 @@
GET_TEMPLATE = """
@micropython.viper
-def get{off}(src: ptr32) -> int:
- return src[{off}]
-print(b[{off} * 4:({off} + 1) * 4])
+def get{off}(src: ptr32) -> uint:
+ return uint(src[{off}])
+print(hex(get{off}(buffer)))
"""
+BIT_THRESHOLDS = (5, 8, 11, 12)
+SIZE = 4
+
+
@micropython.viper
def get_index(src: ptr32, i: int) -> int:
return src[i]
-b = bytearray(5000)
-b[24:43] = b"0123456789ABCDEFGHIJ"
-b[248:268] = b"KLMNOPQRSTUVWXYZabcd"
-b[4088:4108] = b"efghijklmnopqrstuvwx"
+def data(start, len):
+ output = bytearray(len)
+ for idx in range(len):
+ output[idx] = (start + idx) & 0xFF
+ return output
+
+
+buffer = bytearray((((1 << max(BIT_THRESHOLDS)) + 1) // 1024) * 1024)
+val = 0
+for bit in BIT_THRESHOLDS:
+ print("---", bit)
+ pre, idx, post = (((1 << bit) - (2 * SIZE)), ((1 << bit) - (1 * SIZE)), (1 << bit))
+ buffer[pre:post] = data(val, 3 * SIZE)
+ val = val + (3 * SIZE)
-for pre, idx, post in (7, 8, 9), (63, 64, 65), (1023, 1024, 1025):
- print(get_index(b, pre), get_index(b, idx), get_index(b, post))
+ pre, idx, post = pre // SIZE, idx // SIZE, post // SIZE
+ print(hex(get_index(buffer, pre)), hex(get_index(buffer, idx)), hex(get_index(buffer, post)))
exec(GET_TEMPLATE.format(off=pre))
exec(GET_TEMPLATE.format(off=idx))
exec(GET_TEMPLATE.format(off=post))