Skip to content

tests/micropython: Make tests behave in low memory condition. #17955

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 26 additions & 23 deletions tests/micropython/viper_ptr16_store_boundary.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -32,29 +29,35 @@ def next_value() -> uint:
return output & MASK


@micropython.viper
def set_index(dest: ptr16, i: int, val: uint):
saved = dest
dest[i] = val
assert int(saved) == int(dest)


def get_index(src, i):
return src[i * SIZE] + (src[(i * SIZE) + 1] << 8)


buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 1024)
try:

@micropython.viper
def set_index(dest: ptr16, i: int, val: uint):
saved = dest
dest[i] = val
assert int(saved) == int(dest)

buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 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):
locals()["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)))
26 changes: 17 additions & 9 deletions tests/micropython/viper_ptr16_store_boundary.py.exp
Original file line number Diff line number Diff line change
@@ -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
48 changes: 26 additions & 22 deletions tests/micropython/viper_ptr32_store_boundary.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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]
Expand All @@ -47,18 +38,31 @@ def get_index(src, i):
)


buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 1024)
try:

@micropython.viper
def set_index(dest: ptr32, i: int, val: uint):
saved = dest
dest[i] = val
assert int(dest) == int(saved)

buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 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):
locals()["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)))
26 changes: 17 additions & 9 deletions tests/micropython/viper_ptr32_store_boundary.py.exp
Original file line number Diff line number Diff line change
@@ -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
44 changes: 26 additions & 18 deletions tests/micropython/viper_ptr8_store_boundary.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -31,25 +29,35 @@ def next_value() -> uint:
return output & MASK


@micropython.viper
def set_index(dest: ptr8, i: int, val: uint):
saved = dest
dest[i] = val
assert int(dest) == int(saved)


def get_index(src: ptr8, i: int):
return src[i]


buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 1024)
try:

@micropython.viper
def set_index(dest: ptr8, i: int, val: uint):
saved = dest
dest[i] = val
assert int(dest) == int(saved)

buffer = bytearray(((1 << max(BIT_THRESHOLDS) + 1) // 1024) * 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)), ((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):
locals()["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)))
26 changes: 17 additions & 9 deletions tests/micropython/viper_ptr8_store_boundary.py.exp
Original file line number Diff line number Diff line change
@@ -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
Loading