summaryrefslogtreecommitdiff
path: root/tests/extmod/marshal_stress.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/extmod/marshal_stress.py')
-rw-r--r--tests/extmod/marshal_stress.py122
1 files changed, 122 insertions, 0 deletions
diff --git a/tests/extmod/marshal_stress.py b/tests/extmod/marshal_stress.py
new file mode 100644
index 000000000..b52475c03
--- /dev/null
+++ b/tests/extmod/marshal_stress.py
@@ -0,0 +1,122 @@
+# Test the marshal module, stressing edge cases.
+
+try:
+ import marshal
+
+ (lambda: 0).__code__
+except (AttributeError, ImportError):
+ print("SKIP")
+ raise SystemExit
+
+ftype = type(lambda: 0)
+
+# Test a large function.
+
+
+def large_function(arg0, arg1, arg2, arg3):
+ # Arguments.
+ print(arg0, arg1, arg2, arg3)
+
+ # Positive medium-sized integer (still a small-int though).
+ print(1234)
+
+ # Negative small-ish integer.
+ print(-20)
+
+ # More than 64 constant objects.
+ x = (0,)
+ x = (1,)
+ x = (2,)
+ x = (3,)
+ x = (4,)
+ x = (5,)
+ x = (6,)
+ x = (7,)
+ x = (8,)
+ x = (9,)
+ x = (10,)
+ x = (11,)
+ x = (12,)
+ x = (13,)
+ x = (14,)
+ x = (15,)
+ x = (16,)
+ x = (17,)
+ x = (18,)
+ x = (19,)
+ x = (20,)
+ x = (21,)
+ x = (22,)
+ x = (23,)
+ x = (24,)
+ x = (25,)
+ x = (26,)
+ x = (27,)
+ x = (28,)
+ x = (29,)
+ x = (30,)
+ x = (31,)
+ x = (32,)
+ x = (33,)
+ x = (34,)
+ x = (35,)
+ x = (36,)
+ x = (37,)
+ x = (38,)
+ x = (39,)
+ x = (40,)
+ x = (41,)
+ x = (42,)
+ x = (43,)
+ x = (44,)
+ x = (45,)
+ x = (46,)
+ x = (47,)
+ x = (48,)
+ x = (49,)
+ x = (50,)
+ x = (51,)
+ x = (52,)
+ x = (53,)
+ x = (54,)
+ x = (55,)
+ x = (56,)
+ x = (57,)
+ x = (58,)
+ x = (59,)
+ x = (60,)
+ x = (61,)
+ x = (62,)
+ x = (63,)
+ x = (64,)
+
+ # Small jump.
+ x = 0
+ while x < 2:
+ print("loop", x)
+ x += 1
+
+ # Large jump.
+ x = 0
+ while x < 2:
+ try:
+ try:
+ try:
+ print
+ except Exception as e:
+ print
+ finally:
+ print
+ except Exception as e:
+ print
+ finally:
+ print
+ except Exception as e:
+ print
+ finally:
+ print("loop", x)
+ x += 1
+
+
+code = marshal.dumps(large_function.__code__)
+ftype(marshal.loads(code), {"print": print})(0, 1, 2, 3)