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 | |
| parent | 3d739eb398e44c3151bb999fcb3427b5184b4f58 (diff) | |
tests/heapalloc_exc_raise.py: Heap alloc test for raising/catching exc.
| -rw-r--r-- | tests/micropython/heapalloc_exc_raise.py | 23 | ||||
| -rw-r--r-- | tests/micropython/heapalloc_exc_raise.py.exp | 2 |
2 files changed, 25 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() diff --git a/tests/micropython/heapalloc_exc_raise.py.exp b/tests/micropython/heapalloc_exc_raise.py.exp new file mode 100644 index 000000000..1e9edc75d --- /dev/null +++ b/tests/micropython/heapalloc_exc_raise.py.exp @@ -0,0 +1,2 @@ +error +ok |
