diff --git a/tests/micropython/viper_ptr16_store_boundary.py b/tests/micropython/viper_ptr16_store_boundary.py index 3501a05685..7c774d4d1c 100644 --- a/tests/micropython/viper_ptr16_store_boundary.py +++ b/tests/micropython/viper_ptr16_store_boundary.py @@ -6,15 +6,12 @@ def set{off}(dest: ptr16): saved = dest dest[{off}] = {val} assert int(saved) == int(dest) -set{off}(buffer) -print(hex(get_index(buffer, {off}))) """ BIT_THRESHOLDS = (5, 8, 11, 12) SIZE = 2 MASK = (1 << (8 * SIZE)) - 1 - next_int = 1 test_buffer = bytearray(SIZE) @@ -32,6 +29,10 @@ def next_value() -> uint: return output & MASK +def get_index(src, i): + return src[i * SIZE] + (src[(i * SIZE) + 1] << 8) + + @micropython.viper def set_index(dest: ptr16, i: int, val: uint): saved = dest @@ -39,22 +40,24 @@ def set_index(dest: ptr16, i: int, val: uint): assert int(saved) == int(dest) -def get_index(src, i): - return src[i * SIZE] + (src[(i * SIZE) + 1] << 8) +try: + buffer = bytearray((((1 << max(BIT_THRESHOLDS)) // 1024) + 1) * 1024) + + for bit in BIT_THRESHOLDS: + offset = (1 << bit) - (2 * SIZE) + for index in range(0, 3 * SIZE, SIZE): + exec(SET_TEMPLATE.format(off=(offset + index) // SIZE, val=next_value())) +except MemoryError: + print("SKIP-TOO-LARGE") + raise SystemExit -buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 1024) for bit in BIT_THRESHOLDS: print("---", bit) - pre, idx, post = ( - (((1 << bit) - (2 * SIZE)) // SIZE), - (((1 << bit) - (1 * SIZE)) // SIZE), - ((1 << bit) // SIZE), - ) - 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=next_value())) - exec(SET_TEMPLATE.format(off=idx, val=next_value())) - exec(SET_TEMPLATE.format(off=post, val=next_value())) + offset = (1 << bit) - (2 * SIZE) + for index in range(0, 3 * SIZE, SIZE): + globals()["set{}".format((offset + index) // SIZE)](buffer) + print(hex(get_index(buffer, (offset + index) // SIZE))) + for index in range(0, 3 * SIZE, SIZE): + set_index(buffer, (offset + index) // SIZE, next_value()) + print(hex(get_index(buffer, (offset + index) // SIZE))) diff --git a/tests/micropython/viper_ptr16_store_boundary.py.exp b/tests/micropython/viper_ptr16_store_boundary.py.exp index 1c084da2d9..007a50b3ed 100644 --- a/tests/micropython/viper_ptr16_store_boundary.py.exp +++ b/tests/micropython/viper_ptr16_store_boundary.py.exp @@ -1,20 +1,28 @@ --- 5 -0x1 0x102 0x203 +0x1 +0x102 +0x203 +0xc0d +0xd0e +0xe0f +--- 8 0x304 0x405 0x506 ---- 8 -0x607 0x708 0x809 -0x90a -0xa0b -0xb0c ---- 11 -0xc0d 0xd0e 0xe0f 0xf10 0x1011 0x1112 +--- 11 +0x607 +0x708 +0x809 +0x1213 +0x1314 +0x1415 --- 12 -0x1213 0x1314 0x1415 +0x90a +0xa0b +0xb0c 0x1516 0x1617 0x1718 diff --git a/tests/micropython/viper_ptr32_store_boundary.py b/tests/micropython/viper_ptr32_store_boundary.py index 8c207278ec..96ca74ad3c 100644 --- a/tests/micropython/viper_ptr32_store_boundary.py +++ b/tests/micropython/viper_ptr32_store_boundary.py @@ -6,8 +6,6 @@ def set{off}(dest: ptr32): saved = dest dest[{off}] = {val} assert int(saved) == int(dest) -set{off}(buffer) -print(hex(get_index(buffer, {off}))) """ BIT_THRESHOLDS = (5, 8, 11, 12) @@ -31,13 +29,6 @@ def next_value() -> uint: return output & MASK -@micropython.viper -def set_index(dest: ptr32, i: int, val: uint): - saved = dest - dest[i] = val - assert int(saved) == int(dest) - - def get_index(src, i): return ( src[i * SIZE] @@ -47,18 +38,31 @@ def get_index(src, i): ) -buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 1024) +@micropython.viper +def set_index(dest: ptr32, i: int, val: uint): + saved = dest + dest[i] = val + assert int(dest) == int(saved) + + +try: + buffer = bytearray((((1 << max(BIT_THRESHOLDS)) // 1024) + 1) * 1024) + + for bit in BIT_THRESHOLDS: + offset = (1 << bit) - (2 * SIZE) + for index in range(0, 3 * SIZE, SIZE): + exec(SET_TEMPLATE.format(off=(offset + index) // SIZE, val=next_value())) +except MemoryError: + print("SKIP-TOO-LARGE") + raise SystemExit + + for bit in BIT_THRESHOLDS: print("---", bit) - pre, idx, post = ( - (((1 << bit) - (2 * SIZE)) // SIZE), - (((1 << bit) - (1 * SIZE)) // SIZE), - ((1 << bit) // SIZE), - ) - 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=next_value())) - exec(SET_TEMPLATE.format(off=idx, val=next_value())) - exec(SET_TEMPLATE.format(off=post, val=next_value())) + offset = (1 << bit) - (2 * SIZE) + for index in range(0, 3 * SIZE, SIZE): + globals()["set{}".format((offset + index) // SIZE)](buffer) + print(hex(get_index(buffer, (offset + index) // SIZE))) + for index in range(0, 3 * SIZE, SIZE): + set_index(buffer, (offset + index) // SIZE, next_value()) + print(hex(get_index(buffer, (offset + index) // SIZE))) diff --git a/tests/micropython/viper_ptr32_store_boundary.py.exp b/tests/micropython/viper_ptr32_store_boundary.py.exp index 67b114d335..7a9a516247 100644 --- a/tests/micropython/viper_ptr32_store_boundary.py.exp +++ b/tests/micropython/viper_ptr32_store_boundary.py.exp @@ -1,20 +1,28 @@ --- 5 -0x1 0x102 0x10203 +0x1 +0x102 +0x10203 +0xa0b0c0d +0xb0c0d0e +0xc0d0e0f +--- 8 0x1020304 0x2030405 0x3040506 ---- 8 -0x4050607 0x5060708 0x6070809 -0x708090a -0x8090a0b -0x90a0b0c ---- 11 -0xa0b0c0d 0xb0c0d0e 0xc0d0e0f 0xd0e0f10 0xe0f1011 0xf101112 +--- 11 +0x4050607 +0x5060708 +0x6070809 +0x10111213 +0x11121314 +0x12131415 --- 12 -0x10111213 0x11121314 0x12131415 +0x708090a +0x8090a0b +0x90a0b0c 0x13141516 0x14151617 0x15161718 diff --git a/tests/micropython/viper_ptr8_store_boundary.py b/tests/micropython/viper_ptr8_store_boundary.py index d3cba17e16..68b76fd598 100644 --- a/tests/micropython/viper_ptr8_store_boundary.py +++ b/tests/micropython/viper_ptr8_store_boundary.py @@ -6,8 +6,6 @@ def set{off}(dest: ptr8): saved = dest dest[{off}] = {val} assert int(saved) == int(dest) -set{off}(buffer) -print(hex(get_index(buffer, {off}))) """ BIT_THRESHOLDS = (5, 8, 11, 12) @@ -31,6 +29,10 @@ def next_value() -> uint: return output & MASK +def get_index(src: ptr8, i: int): + return src[i] + + @micropython.viper def set_index(dest: ptr8, i: int, val: uint): saved = dest @@ -38,18 +40,24 @@ def set_index(dest: ptr8, i: int, val: uint): assert int(dest) == int(saved) -def get_index(src: ptr8, i: int): - return src[i] +try: + buffer = bytearray((((1 << max(BIT_THRESHOLDS)) // 1024) + 1) * 1024) + + for bit in BIT_THRESHOLDS: + offset = (1 << bit) - (2 * SIZE) + for index in range(0, 3 * SIZE, SIZE): + exec(SET_TEMPLATE.format(off=(offset + index) // SIZE, val=next_value())) +except MemoryError: + print("SKIP-TOO-LARGE") + raise SystemExit -buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 1024) for bit in BIT_THRESHOLDS: print("---", bit) - pre, idx, post = (((1 << bit) - (2 * SIZE)), ((1 << bit) - (1 * SIZE)), (1 << bit)) - 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=next_value())) - exec(SET_TEMPLATE.format(off=idx, val=next_value())) - exec(SET_TEMPLATE.format(off=post, val=next_value())) + offset = (1 << bit) - (2 * SIZE) + for index in range(0, 3 * SIZE, SIZE): + globals()["set{}".format((offset + index) // SIZE)](buffer) + print(hex(get_index(buffer, (offset + index) // SIZE))) + for index in range(0, 3 * SIZE, SIZE): + set_index(buffer, (offset + index) // SIZE, next_value()) + print(hex(get_index(buffer, (offset + index) // SIZE))) diff --git a/tests/micropython/viper_ptr8_store_boundary.py.exp b/tests/micropython/viper_ptr8_store_boundary.py.exp index 6b0f7ce13e..621295d81a 100644 --- a/tests/micropython/viper_ptr8_store_boundary.py.exp +++ b/tests/micropython/viper_ptr8_store_boundary.py.exp @@ -1,20 +1,28 @@ --- 5 -0x1 0x2 0x3 +0x1 +0x2 +0x3 +0xd +0xe +0xf +--- 8 0x4 0x5 0x6 ---- 8 -0x7 0x8 0x9 -0xa -0xb -0xc ---- 11 -0xd 0xe 0xf 0x10 0x11 0x12 +--- 11 +0x7 +0x8 +0x9 +0x13 +0x14 +0x15 --- 12 -0x13 0x14 0x15 +0xa +0xb +0xc 0x16 0x17 0x18