diff options
author | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2017-02-20 04:22:32 +0300 |
---|---|---|
committer | Paul Sokolovsky <pfalcon@users.sourceforge.net> | 2017-02-20 04:22:32 +0300 |
commit | 6fc6f10b1ec61ecaa1c72ed767a41fbf5bacaac9 (patch) | |
tree | e64f37481a1e25fae0b025ef3c1e3efaf2082109 /tests/micropython/heapalloc_exc_raise.py | |
parent | 3d739eb398e44c3151bb999fcb3427b5184b4f58 (diff) |
tests/heapalloc_exc_raise.py: Heap alloc test for raising/catching exc.
Diffstat (limited to 'tests/micropython/heapalloc_exc_raise.py')
-rw-r--r-- | tests/micropython/heapalloc_exc_raise.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/micropython/heapalloc_exc_raise.py b/tests/micropython/heapalloc_exc_raise.py new file mode 100644 index 000000000..d60e14ce5 --- /dev/null +++ b/tests/micropython/heapalloc_exc_raise.py @@ -0,0 +1,23 @@ +# Test that we can raise and catch (preallocated) exception +# without memory allocation. +import micropython + +e = ValueError("error") + +def func(): + try: + # This works as is because traceback is not allocated + # if not possible (heap is locked, no memory). If heap + # is not locked, this would allocate a traceback entry. + # To avoid that, traceback should be warmed up (by raising + # it once after creation) and then cleared before each + # raise with: + # e.__traceback__ = None + raise e + except Exception as e2: + print(e2) + +micropython.heap_lock() +func() +print("ok") +micropython.heap_unlock() |