summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDaniel Tralamazza <daniel@tralamazza.com>2017-08-08 00:45:58 +0200
committerDaniel Tralamazza <daniel@tralamazza.com>2017-08-08 00:45:58 +0200
commitb53b6913147bdee5aef1b54f7728d44580dd0935 (patch)
treecfbfad1ddf3ef386131ec5a39961be70d4b60398 /tests
parent3e0d3d283d5619e52e04dc8484d7bf413e66d130 (diff)
parent6c55cdafa32e4db9e2aaf08b1ec597b4723721ea (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'tests')
-rw-r--r--tests/README2
-rw-r--r--tests/basics/array1.py3
-rw-r--r--tests/basics/array_add.py3
-rw-r--r--tests/basics/array_construct.py3
-rw-r--r--tests/basics/array_construct2.py3
-rw-r--r--tests/basics/array_construct_endian.py3
-rw-r--r--tests/basics/array_intbig.py3
-rw-r--r--tests/basics/array_micropython.py3
-rw-r--r--tests/basics/attrtuple1.py3
-rw-r--r--tests/basics/builtin_delattr.py3
-rw-r--r--tests/basics/builtin_exec.py32
-rw-r--r--tests/basics/builtin_hash_gen.py7
-rw-r--r--tests/basics/builtin_help.py3
-rw-r--r--tests/basics/builtin_minmax.py3
-rw-r--r--tests/basics/builtin_override.py3
-rw-r--r--tests/basics/builtin_pow3.py3
-rw-r--r--tests/basics/builtin_pow3_intbig.py3
-rw-r--r--tests/basics/builtin_property.py3
-rw-r--r--tests/basics/builtin_range_attrs.py3
-rw-r--r--tests/basics/builtin_reversed.py3
-rw-r--r--tests/basics/builtin_sorted.py3
-rw-r--r--tests/basics/bytearray_construct_array.py3
-rw-r--r--tests/basics/bytearray_construct_endian.py3
-rw-r--r--tests/basics/bytearray_slice_assign.py5
-rw-r--r--tests/basics/bytes_add_array.py3
-rw-r--r--tests/basics/bytes_add_endian.py3
-rw-r--r--tests/basics/bytes_compare_array.py3
-rw-r--r--tests/basics/bytes_construct_array.py3
-rw-r--r--tests/basics/bytes_construct_endian.py3
-rw-r--r--tests/basics/bytes_partition.py3
-rw-r--r--tests/basics/class_delattr_setattr.py3
-rw-r--r--tests/basics/class_descriptor.py3
-rw-r--r--tests/basics/class_new.py3
-rw-r--r--tests/basics/class_store_class.py3
-rw-r--r--tests/basics/class_super_object.py3
-rw-r--r--tests/basics/dict_fromkeys2.py3
-rw-r--r--tests/basics/enumerate.py3
-rw-r--r--tests/basics/errno1.py3
-rw-r--r--tests/basics/exec1.py6
-rw-r--r--tests/basics/filter.py3
-rw-r--r--tests/basics/for_else.py43
-rw-r--r--tests/basics/frozenset1.py3
-rw-r--r--tests/basics/frozenset_add.py3
-rw-r--r--tests/basics/frozenset_binop.py3
-rw-r--r--tests/basics/frozenset_copy.py3
-rw-r--r--tests/basics/frozenset_difference.py3
-rw-r--r--tests/basics/frozenset_set.py3
-rw-r--r--tests/basics/fun_error2.py3
-rw-r--r--tests/basics/gc1.py3
-rw-r--r--tests/basics/int_bytes.py12
-rw-r--r--tests/basics/int_bytes_intbig.py2
-rw-r--r--tests/basics/int_bytes_notimpl.py4
-rw-r--r--tests/basics/int_bytes_notimpl.py.exp1
-rw-r--r--tests/basics/list_slice_assign.py2
-rw-r--r--tests/basics/memoryview1.py3
-rw-r--r--tests/basics/memoryview2.py3
-rw-r--r--tests/basics/memoryview_gc.py3
-rw-r--r--tests/basics/memoryview_intbig.py3
-rw-r--r--tests/basics/namedtuple1.py6
-rw-r--r--tests/basics/object_dict.py3
-rw-r--r--tests/basics/object_new.py3
-rw-r--r--tests/basics/op_error_memoryview.py3
-rw-r--r--tests/basics/op_precedence.py43
-rw-r--r--tests/basics/ordereddict1.py3
-rw-r--r--tests/basics/ordereddict_eq.py3
-rw-r--r--tests/basics/parser.py3
-rw-r--r--tests/basics/python34.py2
-rw-r--r--tests/basics/python34.py.exp2
-rw-r--r--tests/basics/set_type.py3
-rw-r--r--tests/basics/slice_attrs.py3
-rw-r--r--tests/basics/special_methods2.py3
-rw-r--r--tests/basics/string_center.py3
-rw-r--r--tests/basics/string_partition.py3
-rw-r--r--tests/basics/string_rpartition.py3
-rw-r--r--tests/basics/string_splitlines.py3
-rw-r--r--tests/basics/struct1.py3
-rw-r--r--tests/basics/struct1_intbig.py3
-rw-r--r--tests/basics/struct2.py3
-rw-r--r--tests/basics/struct_micropython.py3
-rw-r--r--tests/basics/subclass_classmethod.py3
-rw-r--r--tests/basics/sys1.py2
-rw-r--r--tests/basics/zip.py3
-rw-r--r--tests/cpydiff/core_class_mro.py15
-rw-r--r--tests/cpydiff/core_class_supermultiple.py4
-rw-r--r--tests/cpydiff/core_function_argcount.py (renamed from tests/cpydiff/core_arguments.py)2
-rw-r--r--tests/cpydiff/core_mro.py15
-rw-r--r--tests/cpydiff/modules_deque.py2
-rw-r--r--tests/cpydiff/modules_sys_stdassign.py4
-rw-r--r--tests/cpydiff/types_bytes_keywords.py4
-rw-r--r--tests/cpydiff/types_bytes_subscrstep.py6
-rw-r--r--tests/cpydiff/types_exception_instancevar.py6
-rw-r--r--tests/cpydiff/types_exception_loops.py4
-rw-r--r--tests/cpydiff/types_float_rounding.py2
-rw-r--r--tests/cpydiff/types_int_subclassconv.py2
-rw-r--r--tests/cpydiff/types_list_delete_subscrstep.py2
-rw-r--r--tests/cpydiff/types_list_store_subscrstep.py2
-rw-r--r--tests/cpydiff/types_str_ljust_rjust.py7
-rw-r--r--tests/extmod/btree1.py3
-rw-r--r--tests/extmod/framebuf1.py3
-rw-r--r--tests/extmod/framebuf16.py3
-rw-r--r--tests/extmod/framebuf4.py3
-rw-r--r--tests/extmod/machine1.py3
-rw-r--r--tests/extmod/machine_pinbase.py3
-rw-r--r--tests/extmod/machine_pulse.py3
-rw-r--r--tests/extmod/machine_signal.py3
-rw-r--r--tests/extmod/time_ms_us.py3
-rw-r--r--tests/extmod/ubinascii_a2b_base64.py3
-rw-r--r--tests/extmod/ubinascii_b2a_base64.py3
-rw-r--r--tests/extmod/ubinascii_crc32.py6
-rw-r--r--tests/extmod/ubinascii_hexlify.py3
-rw-r--r--tests/extmod/ubinascii_micropython.py6
-rw-r--r--tests/extmod/ubinascii_micropython.py.exp1
-rw-r--r--tests/extmod/ubinascii_unhexlify.py3
-rw-r--r--tests/extmod/uctypes_32bit_intbig.py3
-rw-r--r--tests/extmod/uctypes_array_assign_le.py3
-rw-r--r--tests/extmod/uctypes_array_assign_native_le.py4
-rw-r--r--tests/extmod/uctypes_array_assign_native_le_intbig.py4
-rw-r--r--tests/extmod/uctypes_bytearray.py3
-rw-r--r--tests/extmod/uctypes_le.py3
-rw-r--r--tests/extmod/uctypes_le_float.py3
-rw-r--r--tests/extmod/uctypes_native_float.py3
-rw-r--r--tests/extmod/uctypes_native_le.py4
-rw-r--r--tests/extmod/uctypes_print.py3
-rw-r--r--tests/extmod/uctypes_ptr_le.py4
-rw-r--r--tests/extmod/uctypes_ptr_native_le.py4
-rw-r--r--tests/extmod/uctypes_sizeof.py3
-rw-r--r--tests/extmod/uctypes_sizeof_native.py3
-rw-r--r--tests/extmod/uhashlib_sha1.py5
-rw-r--r--tests/extmod/uhashlib_sha256.py3
-rw-r--r--tests/extmod/uheapq1.py3
-rw-r--r--tests/extmod/ujson_dumps.py3
-rw-r--r--tests/extmod/ujson_dumps_extra.py3
-rw-r--r--tests/extmod/ujson_dumps_float.py3
-rw-r--r--tests/extmod/ujson_load.py3
-rw-r--r--tests/extmod/ujson_loads.py3
-rw-r--r--tests/extmod/ujson_loads_float.py3
-rw-r--r--tests/extmod/urandom_basic.py3
-rw-r--r--tests/extmod/urandom_extra.py6
-rw-r--r--tests/extmod/ure1.py6
-rw-r--r--tests/extmod/ure_debug.py3
-rw-r--r--tests/extmod/ure_error.py3
-rw-r--r--tests/extmod/ure_group.py3
-rw-r--r--tests/extmod/ure_namedclass.py3
-rw-r--r--tests/extmod/ure_split.py8
-rw-r--r--tests/extmod/ure_split_empty.py3
-rw-r--r--tests/extmod/ure_split_notimpl.py3
-rw-r--r--tests/extmod/ussl_basic.py11
-rw-r--r--tests/extmod/ussl_basic.py.exp3
-rw-r--r--tests/extmod/utimeq1.py3
-rw-r--r--tests/extmod/utimeq_stable.py3
-rw-r--r--tests/extmod/uzlib_decompio.py3
-rw-r--r--tests/extmod/uzlib_decompio_gz.py3
-rw-r--r--tests/extmod/uzlib_decompress.py3
-rw-r--r--tests/extmod/vfs_basic.py7
-rw-r--r--tests/extmod/vfs_basic.py.exp2
-rw-r--r--tests/extmod/vfs_fat_fileio1.py7
-rw-r--r--tests/extmod/vfs_fat_fileio2.py7
-rw-r--r--tests/extmod/vfs_fat_more.py7
-rw-r--r--tests/extmod/vfs_fat_oldproto.py7
-rw-r--r--tests/extmod/vfs_fat_ramdisk.py7
-rw-r--r--tests/extmod/websocket_basic.py3
-rw-r--r--tests/feature_check/float.py13
-rw-r--r--tests/feature_check/float.py.exp1
-rw-r--r--tests/float/array_construct.py3
-rw-r--r--tests/float/builtin_float_minmax.py39
-rw-r--r--tests/float/bytearray_construct.py3
-rw-r--r--tests/float/bytes_construct.py3
-rw-r--r--tests/float/cmath_fun.py3
-rw-r--r--tests/float/cmath_fun_special.py3
-rw-r--r--tests/float/float_array.py3
-rw-r--r--tests/float/float_struct.py3
-rw-r--r--tests/float/int_big_float.py4
-rw-r--r--tests/float/math_fun.py9
-rw-r--r--tests/float/math_fun_bool.py3
-rw-r--r--tests/float/math_fun_int.py3
-rw-r--r--tests/float/math_fun_intbig.py3
-rw-r--r--tests/float/math_fun_special.py3
-rw-r--r--tests/float/string_format_modulo.py3
-rw-r--r--tests/float/string_format_modulo3.py3
-rw-r--r--tests/float/string_format_modulo3.py.exp3
-rw-r--r--tests/import/builtin_import.py16
-rw-r--r--tests/import/pkg7/subpkg1/subpkg2/mod3.py3
-rw-r--r--tests/io/buffered_writer.py3
-rw-r--r--tests/io/bytesio_cow.py20
-rw-r--r--tests/io/open_append.py3
-rw-r--r--tests/io/open_plus.py3
-rw-r--r--tests/io/resource_stream.py2
-rw-r--r--tests/io/stringio1.py2
-rw-r--r--tests/io/write_ext.py3
-rw-r--r--tests/jni/list.py3
-rw-r--r--tests/jni/object.py3
-rw-r--r--tests/jni/system_out.py3
-rw-r--r--tests/micropython/heapalloc_bytesio.py3
-rw-r--r--tests/micropython/heapalloc_bytesio2.py20
-rw-r--r--tests/micropython/heapalloc_bytesio2.py.exp1
-rw-r--r--tests/micropython/heapalloc_iter.py3
-rw-r--r--tests/micropython/heapalloc_traceback.py3
-rw-r--r--tests/micropython/heapalloc_traceback.py.exp2
-rw-r--r--tests/micropython/kbd_intr.py3
-rw-r--r--tests/micropython/schedule.py3
-rw-r--r--tests/misc/non_compliant.py3
-rw-r--r--tests/misc/print_exception.py2
-rw-r--r--tests/misc/recursive_data.py3
-rw-r--r--tests/misc/recursive_iternext.py3
-rw-r--r--tests/misc/sys_exc_info.py2
-rw-r--r--tests/net_hosted/README11
-rw-r--r--tests/net_hosted/accept_nonblock.py16
-rw-r--r--tests/net_hosted/accept_nonblock.py.exp1
-rw-r--r--tests/net_hosted/accept_timeout.py22
-rw-r--r--tests/net_hosted/accept_timeout.py.exp1
-rw-r--r--tests/net_hosted/connect_nonblock.py20
-rw-r--r--tests/net_hosted/connect_nonblock.py.exp1
-rw-r--r--tests/net_inet/README5
-rw-r--r--tests/net_inet/test_tls_sites.py56
-rw-r--r--tests/net_inet/test_tls_sites.py.exp4
-rw-r--r--tests/pyb/can.py3
-rw-r--r--tests/pyb/dac.py3
-rw-r--r--tests/pyb/pyb_f405.py3
-rw-r--r--tests/pyb/pyb_f411.py3
-rwxr-xr-xtests/run-bench-tests2
-rwxr-xr-xtests/run-tests26
-rw-r--r--tests/thread/thread_lock1.py6
-rw-r--r--tests/unix/extra_coverage.py3
-rw-r--r--tests/unix/extra_coverage.py.exp1
-rw-r--r--tests/unix/ffi_callback.py3
-rw-r--r--tests/unix/ffi_float.py3
-rw-r--r--tests/unix/ffi_float2.py5
227 files changed, 669 insertions, 443 deletions
diff --git a/tests/README b/tests/README
index b028cd062..3458f36a8 100644
--- a/tests/README
+++ b/tests/README
@@ -13,6 +13,6 @@ condition a test. The run-tests script uses small scripts in the
feature_check directory to check whether each such feature is present,
and skips the relevant tests if not.
-When creating new tests, anything that relies on float support should go in the
+When creating new tests, anything that relies on float support should go in the
float/ subdirectory. Anything that relies on import x, where x is not a built-in
module, should go in the import/ subdirectory.
diff --git a/tests/basics/array1.py b/tests/basics/array1.py
index 43f775b79..bad879035 100644
--- a/tests/basics/array1.py
+++ b/tests/basics/array1.py
@@ -1,9 +1,8 @@
try:
import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
a = array.array('B', [1, 2, 3])
print(a, len(a))
diff --git a/tests/basics/array_add.py b/tests/basics/array_add.py
index 41cd77b42..76ce59f76 100644
--- a/tests/basics/array_add.py
+++ b/tests/basics/array_add.py
@@ -2,9 +2,8 @@
try:
import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
a1 = array.array('I', [1])
a2 = array.array('I', [2])
diff --git a/tests/basics/array_construct.py b/tests/basics/array_construct.py
index cafa57784..2221de990 100644
--- a/tests/basics/array_construct.py
+++ b/tests/basics/array_construct.py
@@ -3,9 +3,8 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# tuple, list
print(array('b', (1, 2)))
diff --git a/tests/basics/array_construct2.py b/tests/basics/array_construct2.py
index d1c1a6c70..c305b7f01 100644
--- a/tests/basics/array_construct2.py
+++ b/tests/basics/array_construct2.py
@@ -1,9 +1,8 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# construct from something with unknown length (requires generators)
print(array('i', (i for i in range(10))))
diff --git a/tests/basics/array_construct_endian.py b/tests/basics/array_construct_endian.py
index bf34b05d1..990d7b1ea 100644
--- a/tests/basics/array_construct_endian.py
+++ b/tests/basics/array_construct_endian.py
@@ -3,9 +3,8 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# raw copy from bytes, bytearray
print(array('h', b'12'))
diff --git a/tests/basics/array_intbig.py b/tests/basics/array_intbig.py
index 4a3b2a0d4..5702a8ae6 100644
--- a/tests/basics/array_intbig.py
+++ b/tests/basics/array_intbig.py
@@ -3,9 +3,8 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(array('L', [0, 2**32-1]))
print(array('l', [-2**31, 0, 2**31-1]))
diff --git a/tests/basics/array_micropython.py b/tests/basics/array_micropython.py
index 0c1df0923..e26ad7ae9 100644
--- a/tests/basics/array_micropython.py
+++ b/tests/basics/array_micropython.py
@@ -2,9 +2,8 @@
try:
import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# arrays of objects
a = array.array('O')
diff --git a/tests/basics/attrtuple1.py b/tests/basics/attrtuple1.py
index 597bfc2a3..78a0fbed1 100644
--- a/tests/basics/attrtuple1.py
+++ b/tests/basics/attrtuple1.py
@@ -8,9 +8,8 @@ t = sys.implementation
try:
t.name
except AttributeError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# test printing of attrtuple
diff --git a/tests/basics/builtin_delattr.py b/tests/basics/builtin_delattr.py
index 9b38837e4..65bd0f210 100644
--- a/tests/basics/builtin_delattr.py
+++ b/tests/basics/builtin_delattr.py
@@ -2,9 +2,8 @@
try:
delattr
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
class A: pass
a = A()
diff --git a/tests/basics/builtin_exec.py b/tests/basics/builtin_exec.py
new file mode 100644
index 000000000..fd4e65c53
--- /dev/null
+++ b/tests/basics/builtin_exec.py
@@ -0,0 +1,32 @@
+print(exec("def foo(): return 42"))
+print(foo())
+
+d = {}
+exec("def bar(): return 84", d)
+print(d["bar"]())
+
+# passing None/dict as args to globals/locals
+foo = 11
+exec('print(foo)')
+exec('print(foo)', None)
+exec('print(foo)', {'foo':3}, None)
+exec('print(foo)', None, {'foo':3})
+exec('print(foo)', None, {'bar':3})
+exec('print(foo)', {'bar':3}, locals())
+
+try:
+ exec('print(foo)', {'bar':3}, None)
+except NameError:
+ print('NameError')
+
+# invalid arg passed to globals
+try:
+ exec('print(1)', 'foo')
+except TypeError:
+ print('TypeError')
+
+# invalid arg passed to locals
+try:
+ exec('print(1)', None, 123)
+except TypeError:
+ print('TypeError')
diff --git a/tests/basics/builtin_hash_gen.py b/tests/basics/builtin_hash_gen.py
new file mode 100644
index 000000000..d42e5ebfb
--- /dev/null
+++ b/tests/basics/builtin_hash_gen.py
@@ -0,0 +1,7 @@
+# test builtin hash function, on generators
+
+def gen():
+ yield
+
+print(type(hash(gen)))
+print(type(hash(gen())))
diff --git a/tests/basics/builtin_help.py b/tests/basics/builtin_help.py
index d554f308d..6ec39653f 100644
--- a/tests/basics/builtin_help.py
+++ b/tests/basics/builtin_help.py
@@ -4,8 +4,7 @@ try:
help
except NameError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
help() # no args
help(help) # help for a function
diff --git a/tests/basics/builtin_minmax.py b/tests/basics/builtin_minmax.py
index a925b3fe9..184398e64 100644
--- a/tests/basics/builtin_minmax.py
+++ b/tests/basics/builtin_minmax.py
@@ -3,9 +3,8 @@ try:
min
max
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(min(0,1))
print(min(1,0))
diff --git a/tests/basics/builtin_override.py b/tests/basics/builtin_override.py
index f3632e59a..9f91341ed 100644
--- a/tests/basics/builtin_override.py
+++ b/tests/basics/builtin_override.py
@@ -6,9 +6,8 @@ import builtins
try:
builtins.abs = lambda x: x + 1
except AttributeError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(abs(1))
diff --git a/tests/basics/builtin_pow3.py b/tests/basics/builtin_pow3.py
index dec7253bb..69b57e548 100644
--- a/tests/basics/builtin_pow3.py
+++ b/tests/basics/builtin_pow3.py
@@ -4,9 +4,8 @@
try:
print(pow(3, 4, 7))
except NotImplementedError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# 3 arg pow is defined to only work on integers
try:
diff --git a/tests/basics/builtin_pow3_intbig.py b/tests/basics/builtin_pow3_intbig.py
index 9f482cbde..bedc8b36b 100644
--- a/tests/basics/builtin_pow3_intbig.py
+++ b/tests/basics/builtin_pow3_intbig.py
@@ -4,9 +4,8 @@
try:
print(pow(3, 4, 7))
except NotImplementedError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(pow(555557, 1000002, 1000003))
diff --git a/tests/basics/builtin_property.py b/tests/basics/builtin_property.py
index ff4ff073c..89c3d4936 100644
--- a/tests/basics/builtin_property.py
+++ b/tests/basics/builtin_property.py
@@ -2,9 +2,8 @@
try:
property
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# create a property object explicitly
property()
diff --git a/tests/basics/builtin_range_attrs.py b/tests/basics/builtin_range_attrs.py
index 9327c802a..05d666d13 100644
--- a/tests/basics/builtin_range_attrs.py
+++ b/tests/basics/builtin_range_attrs.py
@@ -3,9 +3,8 @@
try:
range(0).start
except AttributeError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# attrs
print(range(1, 2, 3).start)
diff --git a/tests/basics/builtin_reversed.py b/tests/basics/builtin_reversed.py
index 59e9c7821..f43505a8b 100644
--- a/tests/basics/builtin_reversed.py
+++ b/tests/basics/builtin_reversed.py
@@ -2,9 +2,8 @@
try:
reversed
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# list
print(list(reversed([])))
diff --git a/tests/basics/builtin_sorted.py b/tests/basics/builtin_sorted.py
index 68855b61b..6435f86d0 100644
--- a/tests/basics/builtin_sorted.py
+++ b/tests/basics/builtin_sorted.py
@@ -3,9 +3,8 @@ try:
sorted
set
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(sorted(set(range(100))))
print(sorted(set(range(100)), key=lambda x: x + 100*(x % 2)))
diff --git a/tests/basics/bytearray_construct_array.py b/tests/basics/bytearray_construct_array.py
index 6d45cafda..bde5fa08b 100644
--- a/tests/basics/bytearray_construct_array.py
+++ b/tests/basics/bytearray_construct_array.py
@@ -2,9 +2,8 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# arrays
print(bytearray(array('b', [1, 2])))
diff --git a/tests/basics/bytearray_construct_endian.py b/tests/basics/bytearray_construct_endian.py
index f68f9b89d..0002f19c5 100644
--- a/tests/basics/bytearray_construct_endian.py
+++ b/tests/basics/bytearray_construct_endian.py
@@ -2,9 +2,8 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# arrays
print(bytearray(array('h', [1, 2])))
diff --git a/tests/basics/bytearray_slice_assign.py b/tests/basics/bytearray_slice_assign.py
index c4b5c43e3..7f7d1d119 100644
--- a/tests/basics/bytearray_slice_assign.py
+++ b/tests/basics/bytearray_slice_assign.py
@@ -2,10 +2,9 @@ try:
bytearray()[:] = bytearray()
except TypeError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
-# test slices; only 2 argument version supported by Micro Python at the moment
+# test slices; only 2 argument version supported by MicroPython at the moment
x = bytearray(range(10))
# Assignment
diff --git a/tests/basics/bytes_add_array.py b/tests/basics/bytes_add_array.py
index 2b8cbccef..b17556d83 100644
--- a/tests/basics/bytes_add_array.py
+++ b/tests/basics/bytes_add_array.py
@@ -2,9 +2,8 @@
try:
import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# should be byteorder-neutral
print(b"123" + array.array('h', [0x1515]))
diff --git a/tests/basics/bytes_add_endian.py b/tests/basics/bytes_add_endian.py
index 1bbd0f2c3..8cfffa7b6 100644
--- a/tests/basics/bytes_add_endian.py
+++ b/tests/basics/bytes_add_endian.py
@@ -2,8 +2,7 @@
try:
import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(b"123" + array.array('i', [1]))
diff --git a/tests/basics/bytes_compare_array.py b/tests/basics/bytes_compare_array.py
index ad41d1d37..ad378de70 100644
--- a/tests/basics/bytes_compare_array.py
+++ b/tests/basics/bytes_compare_array.py
@@ -1,9 +1,8 @@
try:
import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(array.array('b', [1, 2]) in b'\x01\x02\x03')
# CPython gives False here
diff --git a/tests/basics/bytes_construct_array.py b/tests/basics/bytes_construct_array.py
index 72c2d0c58..453eb5901 100644
--- a/tests/basics/bytes_construct_array.py
+++ b/tests/basics/bytes_construct_array.py
@@ -2,9 +2,8 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# arrays
print(bytes(array('b', [1, 2])))
diff --git a/tests/basics/bytes_construct_endian.py b/tests/basics/bytes_construct_endian.py
index 77e0eaaa5..cf1a9f408 100644
--- a/tests/basics/bytes_construct_endian.py
+++ b/tests/basics/bytes_construct_endian.py
@@ -3,9 +3,8 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# arrays
print(bytes(array('h', [1, 2])))
diff --git a/tests/basics/bytes_partition.py b/tests/basics/bytes_partition.py
index 7d3ffaaaa..5b503f544 100644
--- a/tests/basics/bytes_partition.py
+++ b/tests/basics/bytes_partition.py
@@ -2,8 +2,7 @@ try:
str.partition
except AttributeError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
print(b"asdf".partition(b'g'))
print(b"asdf".partition(b'a'))
diff --git a/tests/basics/class_delattr_setattr.py b/tests/basics/class_delattr_setattr.py
index 0d061aee6..190b4875b 100644
--- a/tests/basics/class_delattr_setattr.py
+++ b/tests/basics/class_delattr_setattr.py
@@ -6,9 +6,8 @@ try:
def __delattr__(self, attr): pass
del Test().noexist
except AttributeError:
- import sys
print('SKIP')
- sys.exit()
+ raise SystemExit
# this class just prints the calls to see if they were executed
class A():
diff --git a/tests/basics/class_descriptor.py b/tests/basics/class_descriptor.py
index 7f295f071..eb88ba7b9 100644
--- a/tests/basics/class_descriptor.py
+++ b/tests/basics/class_descriptor.py
@@ -21,9 +21,8 @@ m = Main()
try:
m.__class__
except AttributeError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
r = m.Forward
if 'Descriptor' in repr(r.__class__):
diff --git a/tests/basics/class_new.py b/tests/basics/class_new.py
index 0198456b2..9a7072ad0 100644
--- a/tests/basics/class_new.py
+++ b/tests/basics/class_new.py
@@ -3,9 +3,8 @@ try:
# nothing to test.
object.__new__
except AttributeError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
class A:
def __new__(cls):
print("A.__new__")
diff --git a/tests/basics/class_store_class.py b/tests/basics/class_store_class.py
index 00a291586..797f88f85 100644
--- a/tests/basics/class_store_class.py
+++ b/tests/basics/class_store_class.py
@@ -8,9 +8,8 @@ except ImportError:
try:
from ucollections import namedtuple
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
_DefragResultBase = namedtuple('DefragResult', [ 'foo', 'bar' ])
diff --git a/tests/basics/class_super_object.py b/tests/basics/class_super_object.py
index a841d34ab..1fddbb38f 100644
--- a/tests/basics/class_super_object.py
+++ b/tests/basics/class_super_object.py
@@ -4,9 +4,8 @@ try:
# nothing to test.
object.__init__
except AttributeError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
class Test(object):
def __init__(self):
diff --git a/tests/basics/dict_fromkeys2.py b/tests/basics/dict_fromkeys2.py
index 7ea0cc5b3..dce1e8ef5 100644
--- a/tests/basics/dict_fromkeys2.py
+++ b/tests/basics/dict_fromkeys2.py
@@ -1,9 +1,8 @@
try:
reversed
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# argument to fromkeys has no __len__
d = dict.fromkeys(reversed(range(1)))
diff --git a/tests/basics/enumerate.py b/tests/basics/enumerate.py
index 3cc1350a0..4f8239bf7 100644
--- a/tests/basics/enumerate.py
+++ b/tests/basics/enumerate.py
@@ -1,9 +1,8 @@
try:
enumerate
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(list(enumerate([])))
print(list(enumerate([1, 2, 3])))
diff --git a/tests/basics/errno1.py b/tests/basics/errno1.py
index eae1bbe1b..63930b767 100644
--- a/tests/basics/errno1.py
+++ b/tests/basics/errno1.py
@@ -4,8 +4,7 @@ try:
import uerrno
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
# check that constants exist and are integers
print(type(uerrno.EIO))
diff --git a/tests/basics/exec1.py b/tests/basics/exec1.py
deleted file mode 100644
index 59de5d69a..000000000
--- a/tests/basics/exec1.py
+++ /dev/null
@@ -1,6 +0,0 @@
-print(exec("def foo(): return 42"))
-print(foo())
-
-d = {}
-exec("def bar(): return 84", d)
-print(d["bar"]())
diff --git a/tests/basics/filter.py b/tests/basics/filter.py
index d0b36733c..c6d97cf9b 100644
--- a/tests/basics/filter.py
+++ b/tests/basics/filter.py
@@ -1,9 +1,8 @@
try:
filter
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(list(filter(lambda x: x & 1, range(-3, 4))))
print(list(filter(None, range(-3, 4))))
diff --git a/tests/basics/for_else.py b/tests/basics/for_else.py
new file mode 100644
index 000000000..0bb941506
--- /dev/null
+++ b/tests/basics/for_else.py
@@ -0,0 +1,43 @@
+# test for-else statement
+
+# test optimised range with simple else
+for i in range(2):
+ print(i)
+else:
+ print('else')
+
+# test optimised range with break over else
+for i in range(2):
+ print(i)
+ break
+else:
+ print('else')
+
+# test nested optimised range with continue in the else
+for i in range(4):
+ print(i)
+ for j in range(4):
+ pass
+ else:
+ continue
+ break
+
+# test optimised range with non-constant end value
+N = 2
+for i in range(N):
+ print(i)
+else:
+ print('else')
+
+# test generic iterator with simple else
+for i in [0, 1]:
+ print(i)
+else:
+ print('else')
+
+# test generic iterator with break over else
+for i in [0, 1]:
+ print(i)
+ break
+else:
+ print('else')
diff --git a/tests/basics/frozenset1.py b/tests/basics/frozenset1.py
index 7a4a33540..7bec24c29 100644
--- a/tests/basics/frozenset1.py
+++ b/tests/basics/frozenset1.py
@@ -4,8 +4,7 @@ try:
frozenset
except NameError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
s = frozenset()
print(s)
diff --git a/tests/basics/frozenset_add.py b/tests/basics/frozenset_add.py
index 415a8c2e1..fe24fbaf1 100644
--- a/tests/basics/frozenset_add.py
+++ b/tests/basics/frozenset_add.py
@@ -2,8 +2,7 @@ try:
frozenset
except NameError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
s = frozenset({1, 2, 3, 4})
try:
diff --git a/tests/basics/frozenset_binop.py b/tests/basics/frozenset_binop.py
index 5cc07e9e1..61af07a23 100644
--- a/tests/basics/frozenset_binop.py
+++ b/tests/basics/frozenset_binop.py
@@ -2,8 +2,7 @@ try:
frozenset
except NameError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
sets = [
frozenset(), frozenset({1}), frozenset({1, 2}), frozenset({1, 2, 3}), frozenset({2, 3}),
diff --git a/tests/basics/frozenset_copy.py b/tests/basics/frozenset_copy.py
index 92e115d34..c90f541a1 100644
--- a/tests/basics/frozenset_copy.py
+++ b/tests/basics/frozenset_copy.py
@@ -2,8 +2,7 @@ try:
frozenset
except NameError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
s = frozenset({1, 2, 3, 4})
t = s.copy()
diff --git a/tests/basics/frozenset_difference.py b/tests/basics/frozenset_difference.py
index 3d142f959..bc8b9c21c 100644
--- a/tests/basics/frozenset_difference.py
+++ b/tests/basics/frozenset_difference.py
@@ -2,8 +2,7 @@ try:
frozenset
except NameError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
l = [1, 2, 3, 4]
s = frozenset(l)
diff --git a/tests/basics/frozenset_set.py b/tests/basics/frozenset_set.py
index b334694b5..3bf456acf 100644
--- a/tests/basics/frozenset_set.py
+++ b/tests/basics/frozenset_set.py
@@ -2,8 +2,7 @@ try:
frozenset
except NameError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
# Examples from https://docs.python.org/3/library/stdtypes.html#set
# "Instances of set are compared to instances of frozenset based on their
diff --git a/tests/basics/fun_error2.py b/tests/basics/fun_error2.py
index c4d2c0b64..2a00396e6 100644
--- a/tests/basics/fun_error2.py
+++ b/tests/basics/fun_error2.py
@@ -3,8 +3,7 @@ try:
enumerate
except:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
def test_exc(code, exc):
try:
diff --git a/tests/basics/gc1.py b/tests/basics/gc1.py
index be6c6faed..dcbe0bfcf 100644
--- a/tests/basics/gc1.py
+++ b/tests/basics/gc1.py
@@ -4,8 +4,7 @@ try:
import gc
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
print(gc.isenabled())
gc.disable()
diff --git a/tests/basics/int_bytes.py b/tests/basics/int_bytes.py
index 93c00bba1..d1837ea75 100644
--- a/tests/basics/int_bytes.py
+++ b/tests/basics/int_bytes.py
@@ -8,3 +8,15 @@ print(int.from_bytes(b"\x00\x01\0\0\0\0\0\0", "little"))
# check that extra zero bytes don't change the internal int value
print(int.from_bytes(bytes(20), "little") == 0)
print(int.from_bytes(b"\x01" + bytes(20), "little") == 1)
+
+# big-endian conversion
+print((10).to_bytes(1, "big"))
+print((100).to_bytes(10, "big"))
+print(int.from_bytes(b"\0\0\0\0\0\0\0\0\0\x01", "big"))
+print(int.from_bytes(b"\x01\0", "big"))
+
+# negative number of bytes should raise an error
+try:
+ (1).to_bytes(-1, "little")
+except ValueError:
+ print("ValueError")
diff --git a/tests/basics/int_bytes_intbig.py b/tests/basics/int_bytes_intbig.py
index 0e0ad1cbb..147362bef 100644
--- a/tests/basics/int_bytes_intbig.py
+++ b/tests/basics/int_bytes_intbig.py
@@ -1,4 +1,5 @@
print((2**64).to_bytes(9, "little"))
+print((2**64).to_bytes(9, "big"))
b = bytes(range(20))
@@ -7,6 +8,7 @@ ib = int.from_bytes(b, "big")
print(il)
print(ib)
print(il.to_bytes(20, "little"))
+print(ib.to_bytes(20, "big"))
# check that extra zero bytes don't change the internal int value
print(int.from_bytes(b + bytes(10), "little") == int.from_bytes(b, "little"))
diff --git a/tests/basics/int_bytes_notimpl.py b/tests/basics/int_bytes_notimpl.py
deleted file mode 100644
index b149f4496..000000000
--- a/tests/basics/int_bytes_notimpl.py
+++ /dev/null
@@ -1,4 +0,0 @@
-try:
- print((10).to_bytes(1, "big"))
-except Exception as e:
- print(type(e))
diff --git a/tests/basics/int_bytes_notimpl.py.exp b/tests/basics/int_bytes_notimpl.py.exp
deleted file mode 100644
index 606649a69..000000000
--- a/tests/basics/int_bytes_notimpl.py.exp
+++ /dev/null
@@ -1 +0,0 @@
-<class 'NotImplementedError'>
diff --git a/tests/basics/list_slice_assign.py b/tests/basics/list_slice_assign.py
index 1ad1ef27c..885615717 100644
--- a/tests/basics/list_slice_assign.py
+++ b/tests/basics/list_slice_assign.py
@@ -1,4 +1,4 @@
-# test slices; only 2 argument version supported by Micro Python at the moment
+# test slices; only 2 argument version supported by MicroPython at the moment
x = list(range(10))
# Assignment
diff --git a/tests/basics/memoryview1.py b/tests/basics/memoryview1.py
index a771acdda..c4cc6ffab 100644
--- a/tests/basics/memoryview1.py
+++ b/tests/basics/memoryview1.py
@@ -2,9 +2,8 @@
try:
memoryview
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# test reading from bytes
b = b'1234'
diff --git a/tests/basics/memoryview2.py b/tests/basics/memoryview2.py
index 4b5af852b..06a7be59f 100644
--- a/tests/basics/memoryview2.py
+++ b/tests/basics/memoryview2.py
@@ -3,9 +3,8 @@ try:
from array import array
memoryview
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(list(memoryview(b'\x7f\x80\x81\xff')))
print(list(memoryview(array('b', [0x7f, -0x80]))))
diff --git a/tests/basics/memoryview_gc.py b/tests/basics/memoryview_gc.py
index 9d4857e36..d366cbbb1 100644
--- a/tests/basics/memoryview_gc.py
+++ b/tests/basics/memoryview_gc.py
@@ -2,9 +2,8 @@
try:
memoryview
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
b = bytearray(10)
m = memoryview(b)[1:]
diff --git a/tests/basics/memoryview_intbig.py b/tests/basics/memoryview_intbig.py
index 180f15d18..a76d9cbec 100644
--- a/tests/basics/memoryview_intbig.py
+++ b/tests/basics/memoryview_intbig.py
@@ -3,9 +3,8 @@ try:
from array import array
memoryview
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(list(memoryview(array('i', [0x7f000000, -0x80000000]))))
print(list(memoryview(array('I', [0x7f000000, 0x80000000, 0x81000000, 0xffffffff]))))
diff --git a/tests/basics/namedtuple1.py b/tests/basics/namedtuple1.py
index 70372f7ca..15e3b785e 100644
--- a/tests/basics/namedtuple1.py
+++ b/tests/basics/namedtuple1.py
@@ -4,9 +4,8 @@ try:
except ImportError:
from ucollections import namedtuple
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
T = namedtuple("Tup", ["foo", "bar"])
# CPython prints fully qualified name, what we don't bother to do so far
@@ -25,6 +24,9 @@ for t in T(1, 2), T(bar=1, foo=2):
print(isinstance(t, tuple))
+# Create using positional and keyword args
+print(T(3, bar=4))
+
try:
t[0] = 200
except TypeError:
diff --git a/tests/basics/object_dict.py b/tests/basics/object_dict.py
index e6fb7b3d9..7bf7094e3 100644
--- a/tests/basics/object_dict.py
+++ b/tests/basics/object_dict.py
@@ -1,4 +1,3 @@
-import sys
class Foo:
@@ -9,6 +8,6 @@ class Foo:
o = Foo()
if not hasattr(o, "__dict__"):
print("SKIP")
- sys.exit()
+ raise SystemExit
print(o.__dict__ == {'a': 1, 'b': 'bar'})
diff --git a/tests/basics/object_new.py b/tests/basics/object_new.py
index 568feccda..a9c9482cb 100644
--- a/tests/basics/object_new.py
+++ b/tests/basics/object_new.py
@@ -7,9 +7,8 @@ try:
# nothing to test.
object.__new__
except AttributeError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
class Foo:
diff --git a/tests/basics/op_error_memoryview.py b/tests/basics/op_error_memoryview.py
index 658ededc8..8d4403f77 100644
--- a/tests/basics/op_error_memoryview.py
+++ b/tests/basics/op_error_memoryview.py
@@ -2,9 +2,8 @@
try:
memoryview
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
def test_exc(code, exc):
try:
diff --git a/tests/basics/op_precedence.py b/tests/basics/op_precedence.py
new file mode 100644
index 000000000..519a2a113
--- /dev/null
+++ b/tests/basics/op_precedence.py
@@ -0,0 +1,43 @@
+# see https://docs.python.org/3/reference/expressions.html#operator-precedence
+
+# '|' is the least binding numeric operator
+
+# '^'
+# OK: 1 | (2 ^ 3) = 1 | 1 = 1
+# BAD: (1 | 2) ^ 3 = 3 ^ 3 = 0
+print(1 | 2 ^ 3)
+
+# '&'
+# OK: 3 ^ (2 & 1) = 3 ^ 0 = 3
+# BAD: (3 ^ 2) & 1 = 1 & 1 = 1
+print(3 ^ 2 & 1)
+
+# '<<', '>>'
+# OK: 2 & (3 << 1) = 2 & 6 = 2
+# BAD: (2 & 3) << 1 = 2 << 1 = 4
+print(2 & 3 << 1)
+# OK: 6 & (4 >> 1) = 6 & 2 = 2
+# BAD: (6 & 4) >> 1 = 2 >> 1 = 1
+print(6 & 4 >> 1)
+
+# '+', '-'
+# OK: 1 << (1 + 1) = 1 << 2 = 4
+# BAD: (1 << 1) + 1 = 2 + 1 = 3
+print(1 << 1 + 1)
+
+# '*', '/', '//', '%'
+# OK: 2 + (2 * 2) = 2 + 4 = 6
+# BAD: (2 + 2) * 2 = 4 * 2 = 8
+print(2 + 2 * 2)
+
+# '+x', '-x', '~x'
+
+# '**'
+# OK: -(2**2) = -4
+# BAD: (-2)**2 = 4
+print(-2**2)
+# OK: 2**(-1) = 0.5
+print(2**-1)
+
+# (expr...)
+print((2 + 2) * 2)
diff --git a/tests/basics/ordereddict1.py b/tests/basics/ordereddict1.py
index 7147968c5..d1633f0bb 100644
--- a/tests/basics/ordereddict1.py
+++ b/tests/basics/ordereddict1.py
@@ -5,8 +5,7 @@ except ImportError:
from ucollections import OrderedDict
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
d = OrderedDict([(10, 20), ("b", 100), (1, 2)])
print(len(d))
diff --git a/tests/basics/ordereddict_eq.py b/tests/basics/ordereddict_eq.py
index 274660877..c69daf880 100644
--- a/tests/basics/ordereddict_eq.py
+++ b/tests/basics/ordereddict_eq.py
@@ -5,8 +5,7 @@ except ImportError:
from ucollections import OrderedDict
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
x = OrderedDict()
y = OrderedDict()
diff --git a/tests/basics/parser.py b/tests/basics/parser.py
index 8fb2a49bf..626b67ad7 100644
--- a/tests/basics/parser.py
+++ b/tests/basics/parser.py
@@ -4,8 +4,7 @@ try:
compile
except NameError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
# completely empty string
# uPy and CPy differ for this case
diff --git a/tests/basics/python34.py b/tests/basics/python34.py
index a23f347d6..d5cc59ad6 100644
--- a/tests/basics/python34.py
+++ b/tests/basics/python34.py
@@ -20,6 +20,8 @@ def test_syntax(code):
print("SyntaxError")
test_syntax("f(*a, *b)") # can't have multiple * (in 3.5 we can)
test_syntax("f(**a, **b)") # can't have multiple ** (in 3.5 we can)
+test_syntax("f(*a, b)") # can't have positional after *
+test_syntax("f(**a, b)") # can't have positional after **
test_syntax("() = []") # can't assign to empty tuple (in 3.6 we can)
test_syntax("del ()") # can't delete empty tuple (in 3.6 we can)
diff --git a/tests/basics/python34.py.exp b/tests/basics/python34.py.exp
index f497df3b8..590fc364f 100644
--- a/tests/basics/python34.py.exp
+++ b/tests/basics/python34.py.exp
@@ -7,5 +7,7 @@ SyntaxError
SyntaxError
SyntaxError
SyntaxError
+SyntaxError
+SyntaxError
3.4
3 4
diff --git a/tests/basics/set_type.py b/tests/basics/set_type.py
index d790fa062..787a99e81 100644
--- a/tests/basics/set_type.py
+++ b/tests/basics/set_type.py
@@ -5,9 +5,8 @@
try:
set
except NameError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(set)
diff --git a/tests/basics/slice_attrs.py b/tests/basics/slice_attrs.py
index 67456ff8e..e85ead4ba 100644
--- a/tests/basics/slice_attrs.py
+++ b/tests/basics/slice_attrs.py
@@ -8,9 +8,8 @@ class A:
try:
t = A()[1:2]
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
A()[1:2:3]
diff --git a/tests/basics/special_methods2.py b/tests/basics/special_methods2.py
index 3623b30dc..ba7cf27cd 100644
--- a/tests/basics/special_methods2.py
+++ b/tests/basics/special_methods2.py
@@ -100,9 +100,8 @@ cud2 = Cud()
try:
+cud1
except TypeError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# the following require MICROPY_PY_ALL_SPECIAL_METHODS
+cud1
diff --git a/tests/basics/string_center.py b/tests/basics/string_center.py
index a2739201a..40e8af4b8 100644
--- a/tests/basics/string_center.py
+++ b/tests/basics/string_center.py
@@ -1,9 +1,8 @@
try:
str.center
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print("foo".center(0))
print("foo".center(1))
diff --git a/tests/basics/string_partition.py b/tests/basics/string_partition.py
index b3b2f0907..bc36388fd 100644
--- a/tests/basics/string_partition.py
+++ b/tests/basics/string_partition.py
@@ -2,8 +2,7 @@ try:
str.partition
except AttributeError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
print("asdf".partition('g'))
print("asdf".partition('a'))
diff --git a/tests/basics/string_rpartition.py b/tests/basics/string_rpartition.py
index 84e0031fb..6d65dfaf2 100644
--- a/tests/basics/string_rpartition.py
+++ b/tests/basics/string_rpartition.py
@@ -2,8 +2,7 @@ try:
str.partition
except AttributeError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
print("asdf".rpartition('g'))
print("asdf".rpartition('a'))
diff --git a/tests/basics/string_splitlines.py b/tests/basics/string_splitlines.py
index 1d08f6e6d..c4c3fcb80 100644
--- a/tests/basics/string_splitlines.py
+++ b/tests/basics/string_splitlines.py
@@ -3,9 +3,8 @@
try:
str.splitlines
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# test \n as newline
print("foo\nbar".splitlines())
diff --git a/tests/basics/struct1.py b/tests/basics/struct1.py
index bb6877c78..a442beb1e 100644
--- a/tests/basics/struct1.py
+++ b/tests/basics/struct1.py
@@ -4,9 +4,8 @@ except:
try:
import struct
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(struct.calcsize("<bI"))
print(struct.unpack("<bI", b"\x80\0\0\x01\0"))
diff --git a/tests/basics/struct1_intbig.py b/tests/basics/struct1_intbig.py
index 7f4c3ce12..b1fec527e 100644
--- a/tests/basics/struct1_intbig.py
+++ b/tests/basics/struct1_intbig.py
@@ -4,9 +4,8 @@ except:
try:
import struct
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# check maximum pack on 32-bit machine
print(struct.pack("<I", 2**32 - 1))
diff --git a/tests/basics/struct2.py b/tests/basics/struct2.py
index e3f8bbebf..d8234d0d3 100644
--- a/tests/basics/struct2.py
+++ b/tests/basics/struct2.py
@@ -6,9 +6,8 @@ except:
try:
import struct
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(struct.calcsize('0s'))
print(struct.unpack('0s', b''))
diff --git a/tests/basics/struct_micropython.py b/tests/basics/struct_micropython.py
index 53306dad6..4b9dfe137 100644
--- a/tests/basics/struct_micropython.py
+++ b/tests/basics/struct_micropython.py
@@ -6,9 +6,8 @@ except:
try:
import struct
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
class A():
pass
diff --git a/tests/basics/subclass_classmethod.py b/tests/basics/subclass_classmethod.py
index 48f164b36..00a2ebd7c 100644
--- a/tests/basics/subclass_classmethod.py
+++ b/tests/basics/subclass_classmethod.py
@@ -8,9 +8,8 @@ class Base:
try:
Base.__name__
except AttributeError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
class Sub(Base):
pass
diff --git a/tests/basics/sys1.py b/tests/basics/sys1.py
index 29ef974d1..0d74a1292 100644
--- a/tests/basics/sys1.py
+++ b/tests/basics/sys1.py
@@ -20,7 +20,7 @@ except AttributeError:
print(True)
try:
- sys.exit()
+ raise SystemExit
except SystemExit as e:
print("SystemExit", e.args)
diff --git a/tests/basics/zip.py b/tests/basics/zip.py
index 958addb7a..66f2544e5 100644
--- a/tests/basics/zip.py
+++ b/tests/basics/zip.py
@@ -3,8 +3,7 @@ try:
set
except NameError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
print(list(zip()))
print(list(zip([1], set([2, 3]))))
diff --git a/tests/cpydiff/core_class_mro.py b/tests/cpydiff/core_class_mro.py
new file mode 100644
index 000000000..99713e790
--- /dev/null
+++ b/tests/cpydiff/core_class_mro.py
@@ -0,0 +1,15 @@
+"""
+categories: Core,Classes
+description: Method Resolution Order (MRO) is not compliant with CPython
+cause: Depth first non-exhaustive method resolution order
+workaround: Avoid complex class hierarchies with multiple inheritance and complex method overrides. Keep in mind that many languages don't support multiple inheritance at all.
+"""
+class Foo:
+ def __str__(self):
+ return "Foo"
+
+class C(tuple, Foo):
+ pass
+
+t = C((1, 2, 3))
+print(t)
diff --git a/tests/cpydiff/core_class_supermultiple.py b/tests/cpydiff/core_class_supermultiple.py
index adf4a17a8..f0823ee11 100644
--- a/tests/cpydiff/core_class_supermultiple.py
+++ b/tests/cpydiff/core_class_supermultiple.py
@@ -1,8 +1,8 @@
"""
categories: Core,Classes
description: When inheriting from multiple classes super() only calls one class
-cause: Depth first non-exhaustive method resolution order
-workaround: Unknown
+cause: See :ref:`cpydiff_core_class_mro`
+workaround: See :ref:`cpydiff_core_class_mro`
"""
class A:
def __init__(self):
diff --git a/tests/cpydiff/core_arguments.py b/tests/cpydiff/core_function_argcount.py
index 4734a8062..5f3dca4dc 100644
--- a/tests/cpydiff/core_arguments.py
+++ b/tests/cpydiff/core_function_argcount.py
@@ -1,5 +1,5 @@
"""
-categories: Core
+categories: Core,Functions
description: Error messages for methods may display unexpected argument counts
cause: MicroPython counts "self" as an argument.
workaround: Interpret error messages with the information above in mind.
diff --git a/tests/cpydiff/core_mro.py b/tests/cpydiff/core_mro.py
deleted file mode 100644
index 35b898b30..000000000
--- a/tests/cpydiff/core_mro.py
+++ /dev/null
@@ -1,15 +0,0 @@
-"""
-categories: Core
-description: Method Resolution Order (MRO) is not compliant with CPython
-cause: Unknown
-workaround: Unknown
-"""
-class Foo:
- def __str__(self):
- return "Foo"
-
-class C(tuple, Foo):
- pass
-
-t = C((1, 2, 3))
-print(t)
diff --git a/tests/cpydiff/modules_deque.py b/tests/cpydiff/modules_deque.py
index dc9369d02..a503ea4f5 100644
--- a/tests/cpydiff/modules_deque.py
+++ b/tests/cpydiff/modules_deque.py
@@ -2,7 +2,7 @@
categories: Modules,deque
description: Deque not implemented
cause: Unknown
-workaround: Use regular queues or lists creatively
+workaround: Use regular lists. micropython-lib has implementation of collections.deque.
"""
import collections
D = collections.deque()
diff --git a/tests/cpydiff/modules_sys_stdassign.py b/tests/cpydiff/modules_sys_stdassign.py
index 096af430e..1bf2a598a 100644
--- a/tests/cpydiff/modules_sys_stdassign.py
+++ b/tests/cpydiff/modules_sys_stdassign.py
@@ -1,7 +1,7 @@
"""
categories: Modules,sys
-description: Override sys.stdin, sys.stdout and sys.stderr. Impossible as they are stored in read-only memory.
-cause: Unknown
+description: Overriding sys.stdin, sys.stdout and sys.stderr not possible
+cause: They are stored in read-only memory.
workaround: Unknown
"""
import sys
diff --git a/tests/cpydiff/types_bytes_keywords.py b/tests/cpydiff/types_bytes_keywords.py
index 35119e28f..4dc383f26 100644
--- a/tests/cpydiff/types_bytes_keywords.py
+++ b/tests/cpydiff/types_bytes_keywords.py
@@ -1,7 +1,7 @@
"""
categories: Types,bytes
-description: bytes(...) with keywords not implemented
+description: bytes() with keywords not implemented
cause: Unknown
-workaround: Input the encoding format directly. eg. ``print(bytes('abc', 'utf-8'))``
+workaround: Pass the encoding as a positional paramter, e.g. ``print(bytes('abc', 'utf-8'))``
"""
print(bytes('abc', encoding='utf8'))
diff --git a/tests/cpydiff/types_bytes_subscrstep.py b/tests/cpydiff/types_bytes_subscrstep.py
index fd1602d65..2871bda6c 100644
--- a/tests/cpydiff/types_bytes_subscrstep.py
+++ b/tests/cpydiff/types_bytes_subscrstep.py
@@ -1,7 +1,7 @@
"""
categories: Types,bytes
-description: Bytes subscr with step != 1 not implemented
-cause: Unknown
-workaround: Unknown
+description: Bytes subscription with step != 1 not implemented
+cause: MicroPython is highly optimized for memory usage.
+workaround: Use explicit loop for this very rare operation.
"""
print(b'123'[0:3:2])
diff --git a/tests/cpydiff/types_exception_instancevar.py b/tests/cpydiff/types_exception_instancevar.py
index d1015e96c..adc353361 100644
--- a/tests/cpydiff/types_exception_instancevar.py
+++ b/tests/cpydiff/types_exception_instancevar.py
@@ -1,8 +1,8 @@
"""
categories: Types,Exception
-description: Assign instance variable to exception
-cause: Unknown
-workaround: Unknown
+description: User-defined attributes for builtin exceptions are not supported
+cause: MicroPython is highly optimized for memory usage.
+workaround: Use user-defined exception subclasses.
"""
e = Exception()
e.x = 0
diff --git a/tests/cpydiff/types_exception_loops.py b/tests/cpydiff/types_exception_loops.py
index a142e4757..8d326cbbb 100644
--- a/tests/cpydiff/types_exception_loops.py
+++ b/tests/cpydiff/types_exception_loops.py
@@ -1,7 +1,7 @@
"""
categories: Types,Exception
-description: While loop guards will obscure exception line number reporting due to being optimised onto the end of the code block
-cause: Unknown
+description: Exception in while loop condition may have unexpected line number
+cause: Condition checks are optimized to happen at the end of loop body, and that line number is reported.
workaround: Unknown
"""
l = ["-foo", "-bar"]
diff --git a/tests/cpydiff/types_float_rounding.py b/tests/cpydiff/types_float_rounding.py
index 647f61ba2..82a149d85 100644
--- a/tests/cpydiff/types_float_rounding.py
+++ b/tests/cpydiff/types_float_rounding.py
@@ -1,6 +1,6 @@
"""
categories: Types,float
-description: uPy and CPython outputs formats differ
+description: uPy and CPython outputs formats may differ
cause: Unknown
workaround: Unknown
"""
diff --git a/tests/cpydiff/types_int_subclassconv.py b/tests/cpydiff/types_int_subclassconv.py
index 565fbad4b..260b060ed 100644
--- a/tests/cpydiff/types_int_subclassconv.py
+++ b/tests/cpydiff/types_int_subclassconv.py
@@ -2,7 +2,7 @@
categories: Types,int
description: No int conversion for int-derived types available
cause: Unknown
-workaround: Unknown
+workaround: Avoid subclassing builtin types unless really needed. Prefer https://en.wikipedia.org/wiki/Composition_over_inheritance .
"""
class A(int):
__add__ = lambda self, other: A(int(self) + other)
diff --git a/tests/cpydiff/types_list_delete_subscrstep.py b/tests/cpydiff/types_list_delete_subscrstep.py
index f524fa8dc..36e6f526b 100644
--- a/tests/cpydiff/types_list_delete_subscrstep.py
+++ b/tests/cpydiff/types_list_delete_subscrstep.py
@@ -2,7 +2,7 @@
categories: Types,list
description: List delete with step != 1 not implemented
cause: Unknown
-workaround: Unknown
+workaround: Use explicit loop for this rare operation.
"""
l = [1, 2, 3, 4]
del l[0:4:2]
diff --git a/tests/cpydiff/types_list_store_subscrstep.py b/tests/cpydiff/types_list_store_subscrstep.py
index 2de2e1a3c..1460372bb 100644
--- a/tests/cpydiff/types_list_store_subscrstep.py
+++ b/tests/cpydiff/types_list_store_subscrstep.py
@@ -2,7 +2,7 @@
categories: Types,list
description: List store with step != 1 not implemented
cause: Unknown
-workaround: Unknown
+workaround: Use explicit loop for this rare operation.
"""
l = [1, 2, 3, 4]
l[0:4:2] = [5, 6]
diff --git a/tests/cpydiff/types_str_ljust_rjust.py b/tests/cpydiff/types_str_ljust_rjust.py
new file mode 100644
index 000000000..498596205
--- /dev/null
+++ b/tests/cpydiff/types_str_ljust_rjust.py
@@ -0,0 +1,7 @@
+"""
+categories: Types,str
+description: str.ljust() and str.rjust() not implemented
+cause: MicroPython is highly optimized for memory usage. Easy workarounds available.
+workaround: Instead of `s.ljust(10)` use `"%-10s" % s`, instead of `s.rjust(10)` use `"% 10s" % s`. Alternatively, `"{:<10}".format(s)` or `"{:>10}".format(s)`.
+"""
+print('abc'.ljust(10))
diff --git a/tests/extmod/btree1.py b/tests/extmod/btree1.py
index 2127554db..59638ef0a 100644
--- a/tests/extmod/btree1.py
+++ b/tests/extmod/btree1.py
@@ -4,8 +4,7 @@ try:
import uerrno
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
#f = open("_test.db", "w+b")
f = uio.BytesIO()
diff --git a/tests/extmod/framebuf1.py b/tests/extmod/framebuf1.py
index 990b0b120..2c1366522 100644
--- a/tests/extmod/framebuf1.py
+++ b/tests/extmod/framebuf1.py
@@ -2,8 +2,7 @@ try:
import framebuf
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
w = 5
h = 16
diff --git a/tests/extmod/framebuf16.py b/tests/extmod/framebuf16.py
index 3aa1d34de..fe81f7f93 100644
--- a/tests/extmod/framebuf16.py
+++ b/tests/extmod/framebuf16.py
@@ -2,8 +2,7 @@ try:
import framebuf
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
def printbuf():
print("--8<--")
diff --git a/tests/extmod/framebuf4.py b/tests/extmod/framebuf4.py
index 641f5bfc5..8358fa55b 100644
--- a/tests/extmod/framebuf4.py
+++ b/tests/extmod/framebuf4.py
@@ -2,8 +2,7 @@ try:
import framebuf
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
def printbuf():
print("--8<--")
diff --git a/tests/extmod/machine1.py b/tests/extmod/machine1.py
index e0c561168..6ff38cc05 100644
--- a/tests/extmod/machine1.py
+++ b/tests/extmod/machine1.py
@@ -8,8 +8,7 @@ try:
machine.mem8
except:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
print(machine.mem8)
diff --git a/tests/extmod/machine_pinbase.py b/tests/extmod/machine_pinbase.py
index 5e82823ec..e91775504 100644
--- a/tests/extmod/machine_pinbase.py
+++ b/tests/extmod/machine_pinbase.py
@@ -6,8 +6,7 @@ try:
machine.PinBase
except AttributeError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
class MyPin(machine.PinBase):
diff --git a/tests/extmod/machine_pulse.py b/tests/extmod/machine_pulse.py
index 6491b5409..d525974e0 100644
--- a/tests/extmod/machine_pulse.py
+++ b/tests/extmod/machine_pulse.py
@@ -7,8 +7,7 @@ try:
machine.time_pulse_us
except AttributeError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
class ConstPin(machine.PinBase):
diff --git a/tests/extmod/machine_signal.py b/tests/extmod/machine_signal.py
index 96b8f43c7..53f4f5890 100644
--- a/tests/extmod/machine_signal.py
+++ b/tests/extmod/machine_signal.py
@@ -9,8 +9,7 @@ try:
machine.Signal
except AttributeError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
class Pin(machine.PinBase):
def __init__(self):
diff --git a/tests/extmod/time_ms_us.py b/tests/extmod/time_ms_us.py
index 2078f1bb5..31f07d31b 100644
--- a/tests/extmod/time_ms_us.py
+++ b/tests/extmod/time_ms_us.py
@@ -1,10 +1,9 @@
-import sys
import utime
try:
utime.sleep_ms
except AttributeError:
print("SKIP")
- sys.exit()
+ raise SystemExit
utime.sleep_ms(1)
utime.sleep_us(1)
diff --git a/tests/extmod/ubinascii_a2b_base64.py b/tests/extmod/ubinascii_a2b_base64.py
index 58eb0b50b..b35f26591 100644
--- a/tests/extmod/ubinascii_a2b_base64.py
+++ b/tests/extmod/ubinascii_a2b_base64.py
@@ -4,9 +4,8 @@ try:
except ImportError:
import binascii
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(binascii.a2b_base64(b''))
print(binascii.a2b_base64(b'Zg=='))
diff --git a/tests/extmod/ubinascii_b2a_base64.py b/tests/extmod/ubinascii_b2a_base64.py
index 1c0c30311..f4bb69fe0 100644
--- a/tests/extmod/ubinascii_b2a_base64.py
+++ b/tests/extmod/ubinascii_b2a_base64.py
@@ -4,9 +4,8 @@ try:
except ImportError:
import binascii
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(binascii.b2a_base64(b''))
print(binascii.b2a_base64(b'f'))
diff --git a/tests/extmod/ubinascii_crc32.py b/tests/extmod/ubinascii_crc32.py
index b82c44d6b..89664a9b3 100644
--- a/tests/extmod/ubinascii_crc32.py
+++ b/tests/extmod/ubinascii_crc32.py
@@ -4,16 +4,14 @@ try:
except ImportError:
import binascii
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
try:
binascii.crc32
except AttributeError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
print(hex(binascii.crc32(b'The quick brown fox jumps over the lazy dog')))
print(hex(binascii.crc32(b'\x00' * 32)))
diff --git a/tests/extmod/ubinascii_hexlify.py b/tests/extmod/ubinascii_hexlify.py
index 5d70bda96..bc9928747 100644
--- a/tests/extmod/ubinascii_hexlify.py
+++ b/tests/extmod/ubinascii_hexlify.py
@@ -4,9 +4,8 @@ try:
except ImportError:
import binascii
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(binascii.hexlify(b'\x00\x01\x02\x03\x04\x05\x06\x07'))
print(binascii.hexlify(b'\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'))
diff --git a/tests/extmod/ubinascii_micropython.py b/tests/extmod/ubinascii_micropython.py
index 96f566bd1..77084ec9e 100644
--- a/tests/extmod/ubinascii_micropython.py
+++ b/tests/extmod/ubinascii_micropython.py
@@ -4,10 +4,12 @@ try:
except ImportError:
import binascii
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# two arguments supported in uPy but not CPython
a = binascii.hexlify(b'123', ':')
print(a)
+
+# zero length buffer
+print(binascii.hexlify(b'', b':'))
diff --git a/tests/extmod/ubinascii_micropython.py.exp b/tests/extmod/ubinascii_micropython.py.exp
index 0ae3d768e..a195d2602 100644
--- a/tests/extmod/ubinascii_micropython.py.exp
+++ b/tests/extmod/ubinascii_micropython.py.exp
@@ -1 +1,2 @@
b'31:32:33'
+b''
diff --git a/tests/extmod/ubinascii_unhexlify.py b/tests/extmod/ubinascii_unhexlify.py
index e669789ba..865abfe3a 100644
--- a/tests/extmod/ubinascii_unhexlify.py
+++ b/tests/extmod/ubinascii_unhexlify.py
@@ -4,9 +4,8 @@ try:
except ImportError:
import binascii
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(binascii.unhexlify(b'0001020304050607'))
print(binascii.unhexlify(b'08090a0b0c0d0e0f'))
diff --git a/tests/extmod/uctypes_32bit_intbig.py b/tests/extmod/uctypes_32bit_intbig.py
index a082dc370..6b4d3d76c 100644
--- a/tests/extmod/uctypes_32bit_intbig.py
+++ b/tests/extmod/uctypes_32bit_intbig.py
@@ -3,9 +3,8 @@
try:
import uctypes
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
buf = b"12345678abcd"
struct = uctypes.struct(
diff --git a/tests/extmod/uctypes_array_assign_le.py b/tests/extmod/uctypes_array_assign_le.py
index bae467d09..6afa7e0a2 100644
--- a/tests/extmod/uctypes_array_assign_le.py
+++ b/tests/extmod/uctypes_array_assign_le.py
@@ -1,9 +1,8 @@
try:
import uctypes
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
# arr is array at offset 0, of UINT8 elements, array size is 2
diff --git a/tests/extmod/uctypes_array_assign_native_le.py b/tests/extmod/uctypes_array_assign_native_le.py
index f0ecc0dad..a538bf9ad 100644
--- a/tests/extmod/uctypes_array_assign_native_le.py
+++ b/tests/extmod/uctypes_array_assign_native_le.py
@@ -3,11 +3,11 @@ try:
import uctypes
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
if sys.byteorder != "little":
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
# arr is array at offset 0, of UINT8 elements, array size is 2
diff --git a/tests/extmod/uctypes_array_assign_native_le_intbig.py b/tests/extmod/uctypes_array_assign_native_le_intbig.py
index f29a3b66e..84dfba0e2 100644
--- a/tests/extmod/uctypes_array_assign_native_le_intbig.py
+++ b/tests/extmod/uctypes_array_assign_native_le_intbig.py
@@ -3,11 +3,11 @@ try:
import uctypes
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
if sys.byteorder != "little":
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
# arr is array at offset 0, of UINT8 elements, array size is 2
diff --git a/tests/extmod/uctypes_bytearray.py b/tests/extmod/uctypes_bytearray.py
index bf7845ab2..61c7da271 100644
--- a/tests/extmod/uctypes_bytearray.py
+++ b/tests/extmod/uctypes_bytearray.py
@@ -1,9 +1,8 @@
try:
import uctypes
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
"arr": (uctypes.ARRAY | 0, uctypes.UINT8 | 2),
diff --git a/tests/extmod/uctypes_le.py b/tests/extmod/uctypes_le.py
index 829beda58..7df5ac090 100644
--- a/tests/extmod/uctypes_le.py
+++ b/tests/extmod/uctypes_le.py
@@ -1,9 +1,8 @@
try:
import uctypes
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
"s0": uctypes.UINT16 | 0,
diff --git a/tests/extmod/uctypes_le_float.py b/tests/extmod/uctypes_le_float.py
index a61305ba8..84ff2b84c 100644
--- a/tests/extmod/uctypes_le_float.py
+++ b/tests/extmod/uctypes_le_float.py
@@ -1,9 +1,8 @@
try:
import uctypes
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
"f32": uctypes.FLOAT32 | 0,
diff --git a/tests/extmod/uctypes_native_float.py b/tests/extmod/uctypes_native_float.py
index 80cb54383..acef47036 100644
--- a/tests/extmod/uctypes_native_float.py
+++ b/tests/extmod/uctypes_native_float.py
@@ -1,9 +1,8 @@
try:
import uctypes
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
"f32": uctypes.FLOAT32 | 0,
diff --git a/tests/extmod/uctypes_native_le.py b/tests/extmod/uctypes_native_le.py
index 5900224d4..8bba03b38 100644
--- a/tests/extmod/uctypes_native_le.py
+++ b/tests/extmod/uctypes_native_le.py
@@ -6,11 +6,11 @@ try:
import uctypes
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
if sys.byteorder != "little":
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
diff --git a/tests/extmod/uctypes_print.py b/tests/extmod/uctypes_print.py
index 76a009dc7..c310238e5 100644
--- a/tests/extmod/uctypes_print.py
+++ b/tests/extmod/uctypes_print.py
@@ -2,9 +2,8 @@
try:
import uctypes
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# we use an address of "0" because we just want to print something deterministic
# and don't actually need to set/get any values in the struct
diff --git a/tests/extmod/uctypes_ptr_le.py b/tests/extmod/uctypes_ptr_le.py
index e8a6243ce..056e45650 100644
--- a/tests/extmod/uctypes_ptr_le.py
+++ b/tests/extmod/uctypes_ptr_le.py
@@ -3,11 +3,11 @@ try:
import uctypes
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
if sys.byteorder != "little":
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
"ptr": (uctypes.PTR | 0, uctypes.UINT8),
diff --git a/tests/extmod/uctypes_ptr_native_le.py b/tests/extmod/uctypes_ptr_native_le.py
index 9b016c04d..24508b1cb 100644
--- a/tests/extmod/uctypes_ptr_native_le.py
+++ b/tests/extmod/uctypes_ptr_native_le.py
@@ -3,11 +3,11 @@ try:
import uctypes
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
if sys.byteorder != "little":
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
diff --git a/tests/extmod/uctypes_sizeof.py b/tests/extmod/uctypes_sizeof.py
index 266cd0694..5a6adb437 100644
--- a/tests/extmod/uctypes_sizeof.py
+++ b/tests/extmod/uctypes_sizeof.py
@@ -1,9 +1,8 @@
try:
import uctypes
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
desc = {
# arr is array at offset 0, of UINT8 elements, array size is 2
diff --git a/tests/extmod/uctypes_sizeof_native.py b/tests/extmod/uctypes_sizeof_native.py
index f676c8c6d..32c740e77 100644
--- a/tests/extmod/uctypes_sizeof_native.py
+++ b/tests/extmod/uctypes_sizeof_native.py
@@ -1,9 +1,8 @@
try:
import uctypes
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
S1 = {}
assert uctypes.sizeof(S1) == 0
diff --git a/tests/extmod/uhashlib_sha1.py b/tests/extmod/uhashlib_sha1.py
index f12fc649a..4f7066899 100644
--- a/tests/extmod/uhashlib_sha1.py
+++ b/tests/extmod/uhashlib_sha1.py
@@ -1,4 +1,3 @@
-import sys
try:
import uhashlib as hashlib
except ImportError:
@@ -8,14 +7,14 @@ except ImportError:
# This is neither uPy, nor cPy, so must be uPy with
# uhashlib module disabled.
print("SKIP")
- sys.exit()
+ raise SystemExit
try:
hashlib.sha1
except AttributeError:
# SHA1 is only available on some ports
print("SKIP")
- sys.exit()
+ raise SystemExit
sha1 = hashlib.sha1(b'hello')
sha1.update(b'world')
diff --git a/tests/extmod/uhashlib_sha256.py b/tests/extmod/uhashlib_sha256.py
index ff51f2ffa..3200e8f5c 100644
--- a/tests/extmod/uhashlib_sha256.py
+++ b/tests/extmod/uhashlib_sha256.py
@@ -1,4 +1,3 @@
-import sys
try:
import uhashlib as hashlib
except ImportError:
@@ -8,7 +7,7 @@ except ImportError:
# This is neither uPy, nor cPy, so must be uPy with
# uhashlib module disabled.
print("SKIP")
- sys.exit()
+ raise SystemExit
h = hashlib.sha256()
diff --git a/tests/extmod/uheapq1.py b/tests/extmod/uheapq1.py
index 4b0e5de57..7c1fe4e1e 100644
--- a/tests/extmod/uheapq1.py
+++ b/tests/extmod/uheapq1.py
@@ -4,9 +4,8 @@ except:
try:
import heapq
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
try:
heapq.heappop([])
diff --git a/tests/extmod/ujson_dumps.py b/tests/extmod/ujson_dumps.py
index 4a02f5170..d73271801 100644
--- a/tests/extmod/ujson_dumps.py
+++ b/tests/extmod/ujson_dumps.py
@@ -4,9 +4,8 @@ except ImportError:
try:
import json
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(json.dumps(False))
print(json.dumps(True))
diff --git a/tests/extmod/ujson_dumps_extra.py b/tests/extmod/ujson_dumps_extra.py
index a52e8224c..21a388c32 100644
--- a/tests/extmod/ujson_dumps_extra.py
+++ b/tests/extmod/ujson_dumps_extra.py
@@ -3,8 +3,7 @@
try:
import ujson
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(ujson.dumps(b'1234'))
diff --git a/tests/extmod/ujson_dumps_float.py b/tests/extmod/ujson_dumps_float.py
index d949ea6dd..e8cceb6f1 100644
--- a/tests/extmod/ujson_dumps_float.py
+++ b/tests/extmod/ujson_dumps_float.py
@@ -4,8 +4,7 @@ except ImportError:
try:
import json
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(json.dumps(1.2))
diff --git a/tests/extmod/ujson_load.py b/tests/extmod/ujson_load.py
index 901132a5f..9725ab2dd 100644
--- a/tests/extmod/ujson_load.py
+++ b/tests/extmod/ujson_load.py
@@ -6,9 +6,8 @@ except:
from io import StringIO
import json
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(json.load(StringIO('null')))
print(json.load(StringIO('"abc\\u0064e"')))
diff --git a/tests/extmod/ujson_loads.py b/tests/extmod/ujson_loads.py
index b2e18e3af..adba3c068 100644
--- a/tests/extmod/ujson_loads.py
+++ b/tests/extmod/ujson_loads.py
@@ -4,9 +4,8 @@ except ImportError:
try:
import json
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
def my_print(o):
if isinstance(o, dict):
diff --git a/tests/extmod/ujson_loads_float.py b/tests/extmod/ujson_loads_float.py
index b20a412ff..f1b8cc364 100644
--- a/tests/extmod/ujson_loads_float.py
+++ b/tests/extmod/ujson_loads_float.py
@@ -4,9 +4,8 @@ except ImportError:
try:
import json
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
def my_print(o):
print('%.3f' % o)
diff --git a/tests/extmod/urandom_basic.py b/tests/extmod/urandom_basic.py
index 885b8517f..57e6b26cb 100644
--- a/tests/extmod/urandom_basic.py
+++ b/tests/extmod/urandom_basic.py
@@ -4,9 +4,8 @@ except ImportError:
try:
import random
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# check getrandbits returns a value within the bit range
for b in (1, 2, 3, 4, 16, 32):
diff --git a/tests/extmod/urandom_extra.py b/tests/extmod/urandom_extra.py
index 925dd0dbc..f5a34e168 100644
--- a/tests/extmod/urandom_extra.py
+++ b/tests/extmod/urandom_extra.py
@@ -4,16 +4,14 @@ except ImportError:
try:
import random
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
try:
random.randint
except AttributeError:
- import sys
print('SKIP')
- sys.exit()
+ raise SystemExit
print('randrange')
for i in range(50):
diff --git a/tests/extmod/ure1.py b/tests/extmod/ure1.py
index a867f1751..6075990fc 100644
--- a/tests/extmod/ure1.py
+++ b/tests/extmod/ure1.py
@@ -4,9 +4,8 @@ except ImportError:
try:
import re
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
r = re.compile(".+")
m = r.match("abc")
@@ -81,3 +80,6 @@ try:
re.compile("*")
except:
print("Caught invalid regex")
+
+# bytes objects
+m = re.match(rb'a+?', b'ab'); print(m.group(0))
diff --git a/tests/extmod/ure_debug.py b/tests/extmod/ure_debug.py
index 252df21e3..cfb264bb6 100644
--- a/tests/extmod/ure_debug.py
+++ b/tests/extmod/ure_debug.py
@@ -2,8 +2,7 @@
try:
import ure
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
ure.compile('^a|b[0-9]\w$', ure.DEBUG)
diff --git a/tests/extmod/ure_error.py b/tests/extmod/ure_error.py
index 3f16f9158..f52f735c7 100644
--- a/tests/extmod/ure_error.py
+++ b/tests/extmod/ure_error.py
@@ -6,9 +6,8 @@ except ImportError:
try:
import re
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
def test_re(r):
try:
diff --git a/tests/extmod/ure_group.py b/tests/extmod/ure_group.py
index 98aae2a73..4e39468c5 100644
--- a/tests/extmod/ure_group.py
+++ b/tests/extmod/ure_group.py
@@ -6,9 +6,8 @@ except ImportError:
try:
import re
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
def print_groups(match):
print('----')
diff --git a/tests/extmod/ure_namedclass.py b/tests/extmod/ure_namedclass.py
index e233f17c8..215d09613 100644
--- a/tests/extmod/ure_namedclass.py
+++ b/tests/extmod/ure_namedclass.py
@@ -6,9 +6,8 @@ except ImportError:
try:
import re
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
def print_groups(match):
print('----')
diff --git a/tests/extmod/ure_split.py b/tests/extmod/ure_split.py
index 1e411c27c..a8b9c1686 100644
--- a/tests/extmod/ure_split.py
+++ b/tests/extmod/ure_split.py
@@ -4,9 +4,8 @@ except ImportError:
try:
import re
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
r = re.compile(" ")
s = r.split("a b c foobar")
@@ -27,3 +26,8 @@ print(s)
r = re.compile("[a-f]+")
s = r.split("0a3b9")
print(s)
+
+# bytes objects
+r = re.compile(b"x")
+s = r.split(b"fooxbar")
+print(s)
diff --git a/tests/extmod/ure_split_empty.py b/tests/extmod/ure_split_empty.py
index ad6334eba..76ce97ea6 100644
--- a/tests/extmod/ure_split_empty.py
+++ b/tests/extmod/ure_split_empty.py
@@ -7,9 +7,8 @@
try:
import ure as re
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
r = re.compile(" *")
s = r.split("a b c foobar")
diff --git a/tests/extmod/ure_split_notimpl.py b/tests/extmod/ure_split_notimpl.py
index eca3ea512..da6e9652d 100644
--- a/tests/extmod/ure_split_notimpl.py
+++ b/tests/extmod/ure_split_notimpl.py
@@ -1,9 +1,8 @@
try:
import ure as re
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
r = re.compile('( )')
try:
diff --git a/tests/extmod/ussl_basic.py b/tests/extmod/ussl_basic.py
index e9d435bca..e8710ed51 100644
--- a/tests/extmod/ussl_basic.py
+++ b/tests/extmod/ussl_basic.py
@@ -5,8 +5,7 @@ try:
import ussl as ssl
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
# create in client mode
try:
@@ -44,6 +43,14 @@ except OSError as er:
# close
ss.close()
+# close 2nd time
+ss.close()
+
+# read on closed socket
+try:
+ ss.read(10)
+except OSError as er:
+ print('read:', repr(er))
# write on closed socket
try:
diff --git a/tests/extmod/ussl_basic.py.exp b/tests/extmod/ussl_basic.py.exp
index b4dd03860..cb9c51f7a 100644
--- a/tests/extmod/ussl_basic.py.exp
+++ b/tests/extmod/ussl_basic.py.exp
@@ -5,4 +5,5 @@ setblocking: NotImplementedError
4
b''
read: OSError(-261,)
-write: OSError(-256,)
+read: OSError(9,)
+write: OSError(9,)
diff --git a/tests/extmod/utimeq1.py b/tests/extmod/utimeq1.py
index 68d69e25e..dc7f3b660 100644
--- a/tests/extmod/utimeq1.py
+++ b/tests/extmod/utimeq1.py
@@ -5,8 +5,7 @@ try:
from utimeq import utimeq
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
DEBUG = 0
diff --git a/tests/extmod/utimeq_stable.py b/tests/extmod/utimeq_stable.py
index 9f6ba76d4..9fb522d51 100644
--- a/tests/extmod/utimeq_stable.py
+++ b/tests/extmod/utimeq_stable.py
@@ -2,8 +2,7 @@ try:
from utimeq import utimeq
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
h = utimeq(10)
diff --git a/tests/extmod/uzlib_decompio.py b/tests/extmod/uzlib_decompio.py
index 6f07c048c..112a82597 100644
--- a/tests/extmod/uzlib_decompio.py
+++ b/tests/extmod/uzlib_decompio.py
@@ -2,9 +2,8 @@ try:
import uzlib as zlib
import uio as io
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# Raw DEFLATE bitstream
diff --git a/tests/extmod/uzlib_decompio_gz.py b/tests/extmod/uzlib_decompio_gz.py
index 7572e9693..02087f763 100644
--- a/tests/extmod/uzlib_decompio_gz.py
+++ b/tests/extmod/uzlib_decompio_gz.py
@@ -2,9 +2,8 @@ try:
import uzlib as zlib
import uio as io
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# gzip bitstream
diff --git a/tests/extmod/uzlib_decompress.py b/tests/extmod/uzlib_decompress.py
index 10121ee7e..63247955c 100644
--- a/tests/extmod/uzlib_decompress.py
+++ b/tests/extmod/uzlib_decompress.py
@@ -4,9 +4,8 @@ except ImportError:
try:
import uzlib as zlib
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
PATTERNS = [
# Packed results produced by CPy's zlib.compress()
diff --git a/tests/extmod/vfs_basic.py b/tests/extmod/vfs_basic.py
index fc016b8d5..4fc67d34b 100644
--- a/tests/extmod/vfs_basic.py
+++ b/tests/extmod/vfs_basic.py
@@ -9,8 +9,7 @@ try:
uos.mount
except (ImportError, AttributeError):
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
class Filesystem:
@@ -57,8 +56,8 @@ for path in uos.listdir('/'):
# stat root dir
print(uos.stat('/'))
-# statvfs root dir
-print(uos.statvfs('/'))
+# statvfs root dir; verify that f_namemax has a sensible size
+print(uos.statvfs('/')[9] >= 32)
# getcwd when in root dir
print(uos.getcwd())
diff --git a/tests/extmod/vfs_basic.py.exp b/tests/extmod/vfs_basic.py.exp
index f8ecd07ea..0ae2c2cc9 100644
--- a/tests/extmod/vfs_basic.py.exp
+++ b/tests/extmod/vfs_basic.py.exp
@@ -1,5 +1,5 @@
(16384, 0, 0, 0, 0, 0, 0, 0, 0, 0)
-(0, 0, 0, 0, 0, 0, 0, 0, 0, 4096)
+True
/
1 mount False False
['test_mnt']
diff --git a/tests/extmod/vfs_fat_fileio1.py b/tests/extmod/vfs_fat_fileio1.py
index 9036df7a5..d19df120b 100644
--- a/tests/extmod/vfs_fat_fileio1.py
+++ b/tests/extmod/vfs_fat_fileio1.py
@@ -1,4 +1,3 @@
-import sys
try:
import uerrno
try:
@@ -8,13 +7,13 @@ try:
import uos
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
try:
uos.VfsFat
except AttributeError:
print("SKIP")
- sys.exit()
+ raise SystemExit
class RAMFS:
@@ -46,7 +45,7 @@ try:
bdev = RAMFS(50)
except MemoryError:
print("SKIP")
- sys.exit()
+ raise SystemExit
uos.VfsFat.mkfs(bdev)
vfs = uos.VfsFat(bdev)
diff --git a/tests/extmod/vfs_fat_fileio2.py b/tests/extmod/vfs_fat_fileio2.py
index b2a0ba70f..b5adb75c9 100644
--- a/tests/extmod/vfs_fat_fileio2.py
+++ b/tests/extmod/vfs_fat_fileio2.py
@@ -1,4 +1,3 @@
-import sys
try:
import uerrno
try:
@@ -8,13 +7,13 @@ try:
import uos
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
try:
uos.VfsFat
except AttributeError:
print("SKIP")
- sys.exit()
+ raise SystemExit
class RAMFS:
@@ -46,7 +45,7 @@ try:
bdev = RAMFS(50)
except MemoryError:
print("SKIP")
- sys.exit()
+ raise SystemExit
uos.VfsFat.mkfs(bdev)
vfs = uos.VfsFat(bdev)
diff --git a/tests/extmod/vfs_fat_more.py b/tests/extmod/vfs_fat_more.py
index dacb21553..baec96787 100644
--- a/tests/extmod/vfs_fat_more.py
+++ b/tests/extmod/vfs_fat_more.py
@@ -1,4 +1,3 @@
-import sys
import uerrno
try:
try:
@@ -8,13 +7,13 @@ try:
import uos
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
try:
uos.VfsFat
except AttributeError:
print("SKIP")
- sys.exit()
+ raise SystemExit
class RAMFS:
@@ -47,7 +46,7 @@ try:
bdev2 = RAMFS(50)
except MemoryError:
print("SKIP")
- sys.exit()
+ raise SystemExit
# first we umount any existing mount points the target may have
try:
diff --git a/tests/extmod/vfs_fat_oldproto.py b/tests/extmod/vfs_fat_oldproto.py
index 3e66758c3..ef4f1da78 100644
--- a/tests/extmod/vfs_fat_oldproto.py
+++ b/tests/extmod/vfs_fat_oldproto.py
@@ -1,4 +1,3 @@
-import sys
try:
import uerrno
try:
@@ -7,13 +6,13 @@ try:
import uos
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
try:
uos.VfsFat
except AttributeError:
print("SKIP")
- sys.exit()
+ raise SystemExit
class RAMFS_OLD:
@@ -43,7 +42,7 @@ try:
bdev = RAMFS_OLD(50)
except MemoryError:
print("SKIP")
- sys.exit()
+ raise SystemExit
uos.VfsFat.mkfs(bdev)
vfs = uos.VfsFat(bdev)
diff --git a/tests/extmod/vfs_fat_ramdisk.py b/tests/extmod/vfs_fat_ramdisk.py
index fe72a8bef..801c69786 100644
--- a/tests/extmod/vfs_fat_ramdisk.py
+++ b/tests/extmod/vfs_fat_ramdisk.py
@@ -1,4 +1,3 @@
-import sys
try:
import uerrno
try:
@@ -7,13 +6,13 @@ try:
import uos
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
try:
uos.VfsFat
except AttributeError:
print("SKIP")
- sys.exit()
+ raise SystemExit
class RAMFS:
@@ -45,7 +44,7 @@ try:
bdev = RAMFS(50)
except MemoryError:
print("SKIP")
- sys.exit()
+ raise SystemExit
uos.VfsFat.mkfs(bdev)
diff --git a/tests/extmod/websocket_basic.py b/tests/extmod/websocket_basic.py
index 770836c8e..9a80503a0 100644
--- a/tests/extmod/websocket_basic.py
+++ b/tests/extmod/websocket_basic.py
@@ -3,9 +3,8 @@ try:
import uerrno
import websocket
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# put raw data in the stream and do a websocket read
def ws_read(msg, sz):
diff --git a/tests/feature_check/float.py b/tests/feature_check/float.py
new file mode 100644
index 000000000..af93f5976
--- /dev/null
+++ b/tests/feature_check/float.py
@@ -0,0 +1,13 @@
+# detect how many bits of precision the floating point implementation has
+
+try:
+ float
+except NameError:
+ print(0)
+else:
+ if float('1.0000001') == float('1.0'):
+ print(30)
+ elif float('1e300') == float('inf'):
+ print(32)
+ else:
+ print(64)
diff --git a/tests/feature_check/float.py.exp b/tests/feature_check/float.py.exp
new file mode 100644
index 000000000..900731ffd
--- /dev/null
+++ b/tests/feature_check/float.py.exp
@@ -0,0 +1 @@
+64
diff --git a/tests/float/array_construct.py b/tests/float/array_construct.py
index 7e01fd476..938675835 100644
--- a/tests/float/array_construct.py
+++ b/tests/float/array_construct.py
@@ -3,9 +3,8 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(array('f', array('h', [1, 2])))
print(array('d', array('f', [1, 2])))
diff --git a/tests/float/builtin_float_minmax.py b/tests/float/builtin_float_minmax.py
index 42cfa6382..266ed133d 100644
--- a/tests/float/builtin_float_minmax.py
+++ b/tests/float/builtin_float_minmax.py
@@ -3,31 +3,30 @@ try:
min
max
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
-print(min(0,1.0))
-print(min(1.0,0))
-print(min(0,-1.0))
-print(min(-1.0,0))
+print(min(0, 1.0))
+print(min(1.0, 0))
+print(min(0, -1.0))
+print(min(-1.0, 0))
-print(max(0,1.0))
-print(max(1.0,0))
-print(max(0,-1.0))
-print(max(-1.0,0))
+print(max(0, 1.0))
+print(max(1.0, 0))
+print(max(0, -1.0))
+print(max(-1.0, 0))
-print(min(1.5,-1.5))
-print(min(-1.5,1.5))
+print(min(1.5, -1.5))
+print(min(-1.5, 1.5))
-print(max(1.5,-1.5))
-print(max(-1.5,1.5))
+print(max(1.5, -1.5))
+print(max(-1.5, 1.5))
-print(min([1,2.9,4,0,-1,2]))
-print(max([1,2.9,4,0,-1,2]))
+print(min([1, 2.9, 4, 0, -1, 2]))
+print(max([1, 2.9, 4, 0, -1, 2]))
-print(min([1,2.9,4,6.5,-1,2]))
-print(max([1,2.9,4,6.5,-1,2]))
-print(min([1,2.9,4,-6.5,-1,2]))
-print(max([1,2.9,4,-6.5,-1,2]))
+print(min([1, 2.9, 4, 6.5, -1, 2]))
+print(max([1, 2.9, 4, 6.5, -1, 2]))
+print(min([1, 2.9, 4, -6.5, -1, 2]))
+print(max([1, 2.9, 4, -6.5, -1, 2]))
diff --git a/tests/float/bytearray_construct.py b/tests/float/bytearray_construct.py
index db946a99d..e960d624e 100644
--- a/tests/float/bytearray_construct.py
+++ b/tests/float/bytearray_construct.py
@@ -3,8 +3,7 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(bytearray(array('f', [1, 2.3])))
diff --git a/tests/float/bytes_construct.py b/tests/float/bytes_construct.py
index 8664d7296..0e4482e43 100644
--- a/tests/float/bytes_construct.py
+++ b/tests/float/bytes_construct.py
@@ -3,8 +3,7 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
print(bytes(array('f', [1, 2.3])))
diff --git a/tests/float/cmath_fun.py b/tests/float/cmath_fun.py
index 3ebcf5918..ae5921c30 100644
--- a/tests/float/cmath_fun.py
+++ b/tests/float/cmath_fun.py
@@ -4,8 +4,7 @@ try:
from cmath import *
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
# make sure these constants exist in cmath
print("%.5g" % e)
diff --git a/tests/float/cmath_fun_special.py b/tests/float/cmath_fun_special.py
index 422964dd7..471fda8c0 100644
--- a/tests/float/cmath_fun_special.py
+++ b/tests/float/cmath_fun_special.py
@@ -5,8 +5,7 @@ try:
log10
except (ImportError, NameError):
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
test_values_non_zero = []
base_values = (0.0, 0.5, 1.2345, 10.)
diff --git a/tests/float/float_array.py b/tests/float/float_array.py
index 8bc963444..8c8edcff7 100644
--- a/tests/float/float_array.py
+++ b/tests/float/float_array.py
@@ -1,9 +1,8 @@
try:
from array import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
def test(a):
print(a)
diff --git a/tests/float/float_struct.py b/tests/float/float_struct.py
index a36ccce38..c4c186b89 100644
--- a/tests/float/float_struct.py
+++ b/tests/float/float_struct.py
@@ -5,9 +5,8 @@ try:
except:
import struct
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
i = 1. + 1/2
# TODO: it looks like '=' format modifier is not yet supported
diff --git a/tests/float/int_big_float.py b/tests/float/int_big_float.py
index b1a26ca73..0bd166218 100644
--- a/tests/float/int_big_float.py
+++ b/tests/float/int_big_float.py
@@ -18,6 +18,10 @@ print("%.5g" % (i / 1.2))
# this should delegate to complex
print("%.5g" % (i * 1.2j).imag)
+# negative power should produce float
+print("%.5g" % (i ** -1))
+print("%.5g" % ((2 + i - i) ** -3))
+
try:
i / 0
except ZeroDivisionError:
diff --git a/tests/float/math_fun.py b/tests/float/math_fun.py
index d9f179587..2835b9bfb 100644
--- a/tests/float/math_fun.py
+++ b/tests/float/math_fun.py
@@ -4,8 +4,7 @@ try:
from math import *
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
test_values = [-100., -1.23456, -1, -0.5, 0.0, 0.5, 1.23456, 100.]
test_values_small = [-10., -1.23456, -1, -0.5, 0.0, 0.5, 1.23456, 10.] # so we don't overflow 32-bit precision
@@ -52,7 +51,7 @@ binary_functions = [('copysign', copysign, [(23., 42.), (-23., 42.), (23., -42.)
('atan2', atan2, ((1., 0.), (0., 1.), (2., 0.5), (-3., 5.), (-3., -4.),)),
('fmod', fmod, ((1., 1.), (0., 1.), (2., 0.5), (-3., 5.), (-3., -4.),)),
('ldexp', ldexp, ((1., 0), (0., 1), (2., 2), (3., -2), (-3., -4),)),
- ('log', log, ((2., 2.), (3., 2.), (4., 5.), (0., 1.), (1., 0.), (-1., 1.), (1., -1.))),
+ ('log', log, ((2., 2.), (3., 2.), (4., 5.), (0., 1.), (1., 0.), (-1., 1.), (1., -1.), (2., 1.))),
]
for function_name, function, test_vals in binary_functions:
@@ -60,5 +59,5 @@ for function_name, function, test_vals in binary_functions:
for value1, value2 in test_vals:
try:
print("{:.5g}".format(function(value1, value2)))
- except ValueError as e:
- print(str(e))
+ except (ValueError, ZeroDivisionError) as e:
+ print(type(e))
diff --git a/tests/float/math_fun_bool.py b/tests/float/math_fun_bool.py
index 57232857a..30ab14a52 100644
--- a/tests/float/math_fun_bool.py
+++ b/tests/float/math_fun_bool.py
@@ -4,8 +4,7 @@ try:
from math import isfinite, isnan, isinf
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
test_values = [1, 0, -1, 1.0, 0.0, -1.0, float('NaN'), float('Inf'),
-float('NaN'), -float('Inf')]
diff --git a/tests/float/math_fun_int.py b/tests/float/math_fun_int.py
index ee54f0995..5cadbb1e5 100644
--- a/tests/float/math_fun_int.py
+++ b/tests/float/math_fun_int.py
@@ -4,8 +4,7 @@ try:
import math
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
for fun in (math.ceil, math.floor, math.trunc):
for x in (-1.6, -0.2, 0, 0.6, 1.4, float('inf'), float('nan')):
diff --git a/tests/float/math_fun_intbig.py b/tests/float/math_fun_intbig.py
index 962c10daa..697ca7a6d 100644
--- a/tests/float/math_fun_intbig.py
+++ b/tests/float/math_fun_intbig.py
@@ -4,8 +4,7 @@ try:
import math
except ImportError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
for fun in (math.ceil, math.floor, math.trunc):
for x in (-1e25, 1e25):
diff --git a/tests/float/math_fun_special.py b/tests/float/math_fun_special.py
index 32249b423..c3665a7cd 100644
--- a/tests/float/math_fun_special.py
+++ b/tests/float/math_fun_special.py
@@ -5,8 +5,7 @@ try:
erf
except (ImportError, NameError):
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
test_values = [-8., -2.5, -1, -0.5, 0.0, 0.5, 2.5, 8.,]
pos_test_values = [0.001, 0.1, 0.5, 1.0, 1.5, 10.,]
diff --git a/tests/float/string_format_modulo.py b/tests/float/string_format_modulo.py
index 03c8dd00a..aea534247 100644
--- a/tests/float/string_format_modulo.py
+++ b/tests/float/string_format_modulo.py
@@ -44,3 +44,6 @@ print(('%.40g' % 1e-3)[:2])
print(('%.40g' % 1e-4)[:2])
print("%.0g" % 1) # 0 precision 'g'
+
+print('%.1e' % 9.99) # round up with positive exponent
+print('%.1e' % 0.999) # round up with negative exponent
diff --git a/tests/float/string_format_modulo3.py b/tests/float/string_format_modulo3.py
index 563964786..5d26f2575 100644
--- a/tests/float/string_format_modulo3.py
+++ b/tests/float/string_format_modulo3.py
@@ -1,4 +1,3 @@
# uPy and CPython outputs differ for the following
print("%.1g" % -9.9) # round up 'g' with '-' sign
-print("%.1e" % 9.99) # round up with positive exponent
-print("%.1e" % 0.999) # round up with negative exponent
+print("%.2g" % 99.9) # round up
diff --git a/tests/float/string_format_modulo3.py.exp b/tests/float/string_format_modulo3.py.exp
index b158c7d7f..71432b340 100644
--- a/tests/float/string_format_modulo3.py.exp
+++ b/tests/float/string_format_modulo3.py.exp
@@ -1,3 +1,2 @@
-10
-1.00e+01
-1.00e-00
+100
diff --git a/tests/import/builtin_import.py b/tests/import/builtin_import.py
new file mode 100644
index 000000000..088f631fc
--- /dev/null
+++ b/tests/import/builtin_import.py
@@ -0,0 +1,16 @@
+# test calling builtin import function
+
+# basic test
+__import__('builtins')
+
+# first arg should be a string
+try:
+ __import__(1)
+except TypeError:
+ print('TypeError')
+
+# level argument should be non-negative
+try:
+ __import__('xyz', None, None, None, -1)
+except ValueError:
+ print('ValueError')
diff --git a/tests/import/pkg7/subpkg1/subpkg2/mod3.py b/tests/import/pkg7/subpkg1/subpkg2/mod3.py
index 7ed69bdee..c73e2081f 100644
--- a/tests/import/pkg7/subpkg1/subpkg2/mod3.py
+++ b/tests/import/pkg7/subpkg1/subpkg2/mod3.py
@@ -3,8 +3,7 @@ from ...mod2 import bar
print(mod1.foo)
print(bar)
-# when attempting relative import beyond top-level package uPy raises ImportError
-# whereas CPython raises a ValueError
+# attempted relative import beyond top-level package
try:
from .... import mod1
except ValueError:
diff --git a/tests/io/buffered_writer.py b/tests/io/buffered_writer.py
index bb7b4e8db..c2cedb991 100644
--- a/tests/io/buffered_writer.py
+++ b/tests/io/buffered_writer.py
@@ -4,9 +4,8 @@ try:
io.BytesIO
io.BufferedWriter
except AttributeError:
- import sys
print('SKIP')
- sys.exit()
+ raise SystemExit
bts = io.BytesIO()
buf = io.BufferedWriter(bts, 8)
diff --git a/tests/io/bytesio_cow.py b/tests/io/bytesio_cow.py
new file mode 100644
index 000000000..92654a000
--- /dev/null
+++ b/tests/io/bytesio_cow.py
@@ -0,0 +1,20 @@
+# Make sure that write operations on io.BytesIO don't
+# change original object it was constructed from.
+try:
+ import uio as io
+except ImportError:
+ import io
+
+b = b"foobar"
+
+a = io.BytesIO(b)
+a.write(b"1")
+print(b)
+print(a.getvalue())
+
+b = bytearray(b"foobar")
+
+a = io.BytesIO(b)
+a.write(b"1")
+print(b)
+print(a.getvalue())
diff --git a/tests/io/open_append.py b/tests/io/open_append.py
index 2120b72f0..a696823bc 100644
--- a/tests/io/open_append.py
+++ b/tests/io/open_append.py
@@ -1,4 +1,3 @@
-import sys
try:
import uos as os
except ImportError:
@@ -6,7 +5,7 @@ except ImportError:
if not hasattr(os, "unlink"):
print("SKIP")
- sys.exit()
+ raise SystemExit
# cleanup in case testfile exists
try:
diff --git a/tests/io/open_plus.py b/tests/io/open_plus.py
index 98598ee67..bba96fa2f 100644
--- a/tests/io/open_plus.py
+++ b/tests/io/open_plus.py
@@ -1,4 +1,3 @@
-import sys
try:
import uos as os
except ImportError:
@@ -6,7 +5,7 @@ except ImportError:
if not hasattr(os, "unlink"):
print("SKIP")
- sys.exit()
+ raise SystemExit
# cleanup in case testfile exists
try:
diff --git a/tests/io/resource_stream.py b/tests/io/resource_stream.py
index 86975f118..37d985bf1 100644
--- a/tests/io/resource_stream.py
+++ b/tests/io/resource_stream.py
@@ -5,7 +5,7 @@ try:
uio.resource_stream
except AttributeError:
print('SKIP')
- sys.exit()
+ raise SystemExit
buf = uio.resource_stream("data", "file2")
print(buf.read())
diff --git a/tests/io/stringio1.py b/tests/io/stringio1.py
index fa50f282e..9f7c1e44e 100644
--- a/tests/io/stringio1.py
+++ b/tests/io/stringio1.py
@@ -36,7 +36,7 @@ print(a.read())
a = io.StringIO()
a.close()
for f in [a.read, a.getvalue, lambda:a.write("")]:
- # CPython throws for operations on closed I/O, micropython makes
+ # CPython throws for operations on closed I/O, MicroPython makes
# the underlying string empty unless MICROPY_CPYTHON_COMPAT defined
try:
f()
diff --git a/tests/io/write_ext.py b/tests/io/write_ext.py
index 19b616174..5a6eaa35c 100644
--- a/tests/io/write_ext.py
+++ b/tests/io/write_ext.py
@@ -5,9 +5,8 @@ import uio
try:
uio.BytesIO
except AttributeError:
- import sys
print('SKIP')
- sys.exit()
+ raise SystemExit
buf = uio.BytesIO()
diff --git a/tests/jni/list.py b/tests/jni/list.py
index 6725abb5a..d58181d0b 100644
--- a/tests/jni/list.py
+++ b/tests/jni/list.py
@@ -1,10 +1,9 @@
-import sys
import jni
try:
ArrayList = jni.cls("java/util/ArrayList")
except:
print("SKIP")
- sys.exit()
+ raise SystemExit
l = ArrayList()
print(l)
diff --git a/tests/jni/object.py b/tests/jni/object.py
index 6cf936c4d..aa67615ec 100644
--- a/tests/jni/object.py
+++ b/tests/jni/object.py
@@ -1,10 +1,9 @@
-import sys
import jni
try:
Integer = jni.cls("java/lang/Integer")
except:
print("SKIP")
- sys.exit()
+ raise SystemExit
# Create object
i = Integer(42)
diff --git a/tests/jni/system_out.py b/tests/jni/system_out.py
index 7a1f18030..86c4b9e11 100644
--- a/tests/jni/system_out.py
+++ b/tests/jni/system_out.py
@@ -1,9 +1,8 @@
-import sys
try:
import jni
System = jni.cls("java/lang/System")
except:
print("SKIP")
- sys.exit()
+ raise SystemExit
System.out.println("Hello, Java!")
diff --git a/tests/micropython/heapalloc_bytesio.py b/tests/micropython/heapalloc_bytesio.py
index 2a8d50abe..4aae2abf0 100644
--- a/tests/micropython/heapalloc_bytesio.py
+++ b/tests/micropython/heapalloc_bytesio.py
@@ -1,9 +1,8 @@
try:
import uio
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
import micropython
diff --git a/tests/micropython/heapalloc_bytesio2.py b/tests/micropython/heapalloc_bytesio2.py
new file mode 100644
index 000000000..cd76f5807
--- /dev/null
+++ b/tests/micropython/heapalloc_bytesio2.py
@@ -0,0 +1,20 @@
+# Creating BytesIO from immutable object should not immediately
+# copy its content.
+try:
+ import uio
+ import micropython
+ micropython.mem_total
+except (ImportError, AttributeError):
+ print("SKIP")
+ raise SystemExit
+
+
+data = b"1234" * 256
+
+before = micropython.mem_total()
+
+buf = uio.BytesIO(data)
+
+after = micropython.mem_total()
+
+print(after - before < len(data))
diff --git a/tests/micropython/heapalloc_bytesio2.py.exp b/tests/micropython/heapalloc_bytesio2.py.exp
new file mode 100644
index 000000000..0ca95142b
--- /dev/null
+++ b/tests/micropython/heapalloc_bytesio2.py.exp
@@ -0,0 +1 @@
+True
diff --git a/tests/micropython/heapalloc_iter.py b/tests/micropython/heapalloc_iter.py
index 45d3519e4..79461f999 100644
--- a/tests/micropython/heapalloc_iter.py
+++ b/tests/micropython/heapalloc_iter.py
@@ -2,9 +2,8 @@
try:
import array
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
try:
from micropython import heap_lock, heap_unlock
diff --git a/tests/micropython/heapalloc_traceback.py b/tests/micropython/heapalloc_traceback.py
index b3795293f..f4212b6ce 100644
--- a/tests/micropython/heapalloc_traceback.py
+++ b/tests/micropython/heapalloc_traceback.py
@@ -5,9 +5,8 @@ import sys
try:
import uio
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# preallocate exception instance with some room for a traceback
global_exc = StopIteration()
diff --git a/tests/micropython/heapalloc_traceback.py.exp b/tests/micropython/heapalloc_traceback.py.exp
index facd0af13..291bbd697 100644
--- a/tests/micropython/heapalloc_traceback.py.exp
+++ b/tests/micropython/heapalloc_traceback.py.exp
@@ -1,5 +1,5 @@
StopIteration
Traceback (most recent call last):
- File , line 23, in test
+ File , line 22, in test
StopIteration:
diff --git a/tests/micropython/kbd_intr.py b/tests/micropython/kbd_intr.py
index a7ce7464b..879c9a229 100644
--- a/tests/micropython/kbd_intr.py
+++ b/tests/micropython/kbd_intr.py
@@ -6,8 +6,7 @@ try:
micropython.kbd_intr
except AttributeError:
print('SKIP')
- import sys
- sys.exit()
+ raise SystemExit
# just check we can actually call it
micropython.kbd_intr(3)
diff --git a/tests/micropython/schedule.py b/tests/micropython/schedule.py
index 3d584eea4..74f90cb2d 100644
--- a/tests/micropython/schedule.py
+++ b/tests/micropython/schedule.py
@@ -6,8 +6,7 @@ try:
micropython.schedule
except AttributeError:
print('SKIP')
- import sys
- sys.exit()
+ raise SystemExit
# Basic test of scheduling a function.
diff --git a/tests/misc/non_compliant.py b/tests/misc/non_compliant.py
index 31074ab01..b4c90e9fc 100644
--- a/tests/misc/non_compliant.py
+++ b/tests/misc/non_compliant.py
@@ -4,9 +4,8 @@ try:
import array
import ustruct
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# when super can't find self
try:
diff --git a/tests/misc/print_exception.py b/tests/misc/print_exception.py
index b833a7981..9ab8e728b 100644
--- a/tests/misc/print_exception.py
+++ b/tests/misc/print_exception.py
@@ -6,7 +6,7 @@ try:
import io
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
if hasattr(sys, 'print_exception'):
print_exception = sys.print_exception
diff --git a/tests/misc/recursive_data.py b/tests/misc/recursive_data.py
index 383018945..3b7fa5095 100644
--- a/tests/misc/recursive_data.py
+++ b/tests/misc/recursive_data.py
@@ -2,9 +2,8 @@
try:
import uio as io
except ImportError:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
l = [1, 2, 3, None]
l[-1] = l
diff --git a/tests/misc/recursive_iternext.py b/tests/misc/recursive_iternext.py
index d90f17716..edb5a843f 100644
--- a/tests/misc/recursive_iternext.py
+++ b/tests/misc/recursive_iternext.py
@@ -6,9 +6,8 @@ try:
max
zip
except:
- import sys
print("SKIP")
- sys.exit()
+ raise SystemExit
# We need to pick an N that is large enough to hit the recursion
# limit, but not too large that we run out of heap memory.
diff --git a/tests/misc/sys_exc_info.py b/tests/misc/sys_exc_info.py
index de5b82562..4bb2c61e8 100644
--- a/tests/misc/sys_exc_info.py
+++ b/tests/misc/sys_exc_info.py
@@ -3,7 +3,7 @@ try:
sys.exc_info
except:
print("SKIP")
- sys.exit()
+ raise SystemExit
def f():
print(sys.exc_info()[0:2])
diff --git a/tests/net_hosted/README b/tests/net_hosted/README
new file mode 100644
index 000000000..724dd6158
--- /dev/null
+++ b/tests/net_hosted/README
@@ -0,0 +1,11 @@
+This directory contains network tests which require just "peer to peer"
+network connection between test host and device under test, instead of
+full Internet connection.
+
+Note that setup for these tests and tests themselves are WIP, and may
+not yet fully correspond to the functional specification above.
+
+So far, these tests are not run as part of the main testsuite and need
+to be run seperately (from the main test/ directory):
+
+ ./run-tests net_hosted/*.py
diff --git a/tests/net_hosted/accept_nonblock.py b/tests/net_hosted/accept_nonblock.py
new file mode 100644
index 000000000..56f3288e2
--- /dev/null
+++ b/tests/net_hosted/accept_nonblock.py
@@ -0,0 +1,16 @@
+# test that socket.accept() on a non-blocking socket raises EAGAIN
+
+try:
+ import usocket as socket
+except:
+ import socket
+
+s = socket.socket()
+s.bind(socket.getaddrinfo('127.0.0.1', 8123)[0][-1])
+s.setblocking(False)
+s.listen(1)
+try:
+ s.accept()
+except OSError as er:
+ print(er.args[0] == 11) # 11 is EAGAIN
+s.close()
diff --git a/tests/net_hosted/accept_nonblock.py.exp b/tests/net_hosted/accept_nonblock.py.exp
new file mode 100644
index 000000000..0ca95142b
--- /dev/null
+++ b/tests/net_hosted/accept_nonblock.py.exp
@@ -0,0 +1 @@
+True
diff --git a/tests/net_hosted/accept_timeout.py b/tests/net_hosted/accept_timeout.py
new file mode 100644
index 000000000..44b3b8c7c
--- /dev/null
+++ b/tests/net_hosted/accept_timeout.py
@@ -0,0 +1,22 @@
+# test that socket.accept() on a socket with timeout raises ETIMEDOUT
+
+try:
+ import usocket as socket
+except:
+ import socket
+
+try:
+ socket.socket.settimeout
+except AttributeError:
+ print('SKIP')
+ raise SystemExit
+
+s = socket.socket()
+s.bind(socket.getaddrinfo('127.0.0.1', 8123)[0][-1])
+s.settimeout(1)
+s.listen(1)
+try:
+ s.accept()
+except OSError as er:
+ print(er.args[0] in (110, 'timed out')) # 110 is ETIMEDOUT; CPython uses a string
+s.close()
diff --git a/tests/net_hosted/accept_timeout.py.exp b/tests/net_hosted/accept_timeout.py.exp
new file mode 100644
index 000000000..0ca95142b
--- /dev/null
+++ b/tests/net_hosted/accept_timeout.py.exp
@@ -0,0 +1 @@
+True
diff --git a/tests/net_hosted/connect_nonblock.py b/tests/net_hosted/connect_nonblock.py
new file mode 100644
index 000000000..6479978be
--- /dev/null
+++ b/tests/net_hosted/connect_nonblock.py
@@ -0,0 +1,20 @@
+# test that socket.connect() on a non-blocking socket raises EINPROGRESS
+
+try:
+ import usocket as socket
+except:
+ import socket
+
+
+def test(peer_addr):
+ s = socket.socket()
+ s.setblocking(False)
+ try:
+ s.connect(peer_addr)
+ except OSError as er:
+ print(er.args[0] == 115) # 115 is EINPROGRESS
+ s.close()
+
+
+if __name__ == "__main__":
+ test(socket.getaddrinfo('micropython.org', 80)[0][-1])
diff --git a/tests/net_hosted/connect_nonblock.py.exp b/tests/net_hosted/connect_nonblock.py.exp
new file mode 100644
index 000000000..0ca95142b
--- /dev/null
+++ b/tests/net_hosted/connect_nonblock.py.exp
@@ -0,0 +1 @@
+True
diff --git a/tests/net_inet/README b/tests/net_inet/README
new file mode 100644
index 000000000..9a5614efa
--- /dev/null
+++ b/tests/net_inet/README
@@ -0,0 +1,5 @@
+This directory contains network tests which require Internet connection.
+Note that these tests are not run as part of the main testsuite and need
+to be run seperately (from the main test/ directory):
+
+ ./run-tests net_inet/*.py
diff --git a/tests/net_inet/test_tls_sites.py b/tests/net_inet/test_tls_sites.py
new file mode 100644
index 000000000..67345fd0b
--- /dev/null
+++ b/tests/net_inet/test_tls_sites.py
@@ -0,0 +1,56 @@
+try:
+ import usocket as _socket
+except:
+ import _socket
+try:
+ import ussl as ssl
+except:
+ import ssl
+
+
+def test_one(site, opts):
+ ai = _socket.getaddrinfo(site, 443)
+ addr = ai[0][-1]
+
+ s = _socket.socket()
+
+ try:
+ s.connect(addr)
+
+ if "sni" in opts:
+ s = ssl.wrap_socket(s, server_hostname=opts["host"])
+ else:
+ s = ssl.wrap_socket(s)
+
+ s.write(b"GET / HTTP/1.0\r\n\r\n")
+ resp = s.read(4096)
+# print(resp)
+
+ finally:
+ s.close()
+
+
+SITES = [
+ "google.com",
+ "www.google.com",
+ "api.telegram.org",
+# "w9rybpfril.execute-api.ap-southeast-2.amazonaws.com",
+ {"host": "w9rybpfril.execute-api.ap-southeast-2.amazonaws.com", "sni": True},
+]
+
+
+def main():
+ for site in SITES:
+ opts = {}
+ if isinstance(site, dict):
+ opts = site
+ site = opts["host"]
+
+ try:
+ test_one(site, opts)
+ print(site, "ok")
+ except Exception as e:
+ print(site, repr(e))
+
+
+main()
diff --git a/tests/net_inet/test_tls_sites.py.exp b/tests/net_inet/test_tls_sites.py.exp
new file mode 100644
index 000000000..12732d1fa
--- /dev/null
+++ b/tests/net_inet/test_tls_sites.py.exp
@@ -0,0 +1,4 @@
+google.com ok
+www.google.com ok
+api.telegram.org ok
+w9rybpfril.execute-api.ap-southeast-2.amazonaws.com ok
diff --git a/tests/pyb/can.py b/tests/pyb/can.py
index 7f2d070ec..0fd8c8368 100644
--- a/tests/pyb/can.py
+++ b/tests/pyb/can.py
@@ -2,8 +2,7 @@ try:
from pyb import CAN
except ImportError:
print('SKIP')
- import sys
- sys.exit()
+ raise SystemExit
import pyb
diff --git a/tests/pyb/dac.py b/tests/pyb/dac.py
index 942f30354..6f03bbc64 100644
--- a/tests/pyb/dac.py
+++ b/tests/pyb/dac.py
@@ -2,8 +2,7 @@ import pyb
if not hasattr(pyb, 'DAC'):
print('SKIP')
- import sys
- sys.exit()
+ raise SystemExit
dac = pyb.DAC(1)
print(dac)
diff --git a/tests/pyb/pyb_f405.py b/tests/pyb/pyb_f405.py
index 3c81fe109..2f161ae09 100644
--- a/tests/pyb/pyb_f405.py
+++ b/tests/pyb/pyb_f405.py
@@ -4,8 +4,7 @@ import os, pyb
if not 'STM32F405' in os.uname().machine:
print('SKIP')
- import sys
- sys.exit()
+ raise SystemExit
print(pyb.freq())
print(type(pyb.rng()))
diff --git a/tests/pyb/pyb_f411.py b/tests/pyb/pyb_f411.py
index 328653965..50de30282 100644
--- a/tests/pyb/pyb_f411.py
+++ b/tests/pyb/pyb_f411.py
@@ -4,7 +4,6 @@ import os, pyb
if not 'STM32F411' in os.uname().machine:
print('SKIP')
- import sys
- sys.exit()
+ raise SystemExit
print(pyb.freq())
diff --git a/tests/run-bench-tests b/tests/run-bench-tests
index 1e5e7804b..d48b4b7ec 100755
--- a/tests/run-bench-tests
+++ b/tests/run-bench-tests
@@ -26,7 +26,7 @@ def run_tests(pyb, test_dict):
print(base_test + ":")
for test_file in tests:
- # run Micro Python
+ # run MicroPython
if pyb is None:
# run on PC
try:
diff --git a/tests/run-tests b/tests/run-tests
index f24fc0961..f9c26283d 100755
--- a/tests/run-tests
+++ b/tests/run-tests
@@ -239,6 +239,7 @@ def run_tests(pyb, tests, args, base_path="."):
skip_tests.add('cmdline/repl_emacs_keys.py')
upy_byteorder = run_feature_check(pyb, args, base_path, 'byteorder.py')
+ upy_float_precision = int(run_feature_check(pyb, args, base_path, 'float.py'))
has_complex = run_feature_check(pyb, args, base_path, 'complex.py') == b'complex\n'
has_coverage = run_feature_check(pyb, args, base_path, 'coverage.py') == b'coverage\n'
cpy_byteorder = subprocess.check_output([CPYTHON3, base_path + '/feature_check/byteorder.py'])
@@ -252,6 +253,19 @@ def run_tests(pyb, tests, args, base_path="."):
skip_tests.add('thread/stress_heap.py') # has reliability issues
skip_tests.add('thread/stress_recurse.py') # has reliability issues
+ if upy_float_precision == 0:
+ skip_tests.add('extmod/ujson_dumps_float.py')
+ skip_tests.add('extmod/ujson_loads_float.py')
+ skip_tests.add('misc/rge_sm.py')
+ if upy_float_precision < 32:
+ skip_tests.add('float/float2int_intbig.py') # requires fp32, there's float2int_fp30_intbig.py instead
+ skip_tests.add('float/string_format.py') # requires fp32, there's string_format_fp30.py instead
+ skip_tests.add('float/bytes_construct.py') # requires fp32
+ skip_tests.add('float/bytearray_construct.py') # requires fp32
+ if upy_float_precision < 64:
+ skip_tests.add('float/float_divmod.py') # tested by float/float_divmod_relaxed.py instead
+ skip_tests.add('float/float2int_doubleprec_intbig.py')
+
if not has_complex:
skip_tests.add('float/complex1.py')
skip_tests.add('float/complex1_intbig.py')
@@ -272,8 +286,6 @@ def run_tests(pyb, tests, args, base_path="."):
# Some tests shouldn't be run on pyboard
if pyb is not None:
skip_tests.add('basics/exception_chain.py') # warning is not printed
- skip_tests.add('float/float_divmod.py') # tested by float/float_divmod_relaxed.py instead
- skip_tests.add('float/float2int_doubleprec_intbig.py') # requires double precision floating point to work
skip_tests.add('micropython/meminfo.py') # output is very different to PC output
skip_tests.add('extmod/machine_mem.py') # raw memory access not supported
@@ -282,19 +294,12 @@ def run_tests(pyb, tests, args, base_path="."):
skip_tests.add('misc/recursion.py') # requires stack checking enabled
skip_tests.add('misc/recursive_data.py') # requires stack checking enabled
skip_tests.add('misc/recursive_iternext.py') # requires stack checking enabled
- skip_tests.add('misc/rge_sm.py') # requires floating point
skip_tests.update({'extmod/uctypes_%s.py' % t for t in 'bytearray le native_le ptr_le ptr_native_le sizeof sizeof_native array_assign_le array_assign_native_le'.split()}) # requires uctypes
skip_tests.add('extmod/zlibd_decompress.py') # requires zlib
- skip_tests.add('extmod/ujson_dumps_float.py') # requires floating point
- skip_tests.add('extmod/ujson_loads_float.py') # requires floating point
skip_tests.add('extmod/uheapq1.py') # uheapq not supported by WiPy
skip_tests.add('extmod/urandom_basic.py') # requires urandom
skip_tests.add('extmod/urandom_extra.py') # requires urandom
elif args.target == 'esp8266':
- skip_tests.add('float/float2int_intbig.py') # requires at least fp32, there's float2int_fp30_intbig.py instead
- skip_tests.add('float/string_format.py') # requires at least fp32, there's string_format_fp30.py instead
- skip_tests.add('float/bytes_construct.py') # requires fp32
- skip_tests.add('float/bytearray_construct.py') # requires fp32
skip_tests.add('misc/rge_sm.py') # too large
elif args.target == 'minimal':
skip_tests.add('misc/rge_sm.py') # too large
@@ -318,6 +323,7 @@ def run_tests(pyb, tests, args, base_path="."):
skip_tests.update({'basics/%s.py' % t for t in 'with_break with_continue with_return'.split()}) # require complete with support
skip_tests.add('basics/array_construct2.py') # requires generators
skip_tests.add('basics/bool1.py') # seems to randomly fail
+ skip_tests.add('basics/builtin_hash_gen.py') # requires yield
skip_tests.add('basics/class_bind_self.py') # requires yield
skip_tests.add('basics/del_deref.py') # requires checking for unbound local
skip_tests.add('basics/del_local.py') # requires checking for unbound local
@@ -382,7 +388,7 @@ def run_tests(pyb, tests, args, base_path="."):
if args.write_exp:
continue
- # run Micro Python
+ # run MicroPython
output_mupy = run_micropython(pyb, args, test_file)
if output_mupy == b'SKIP\n':
diff --git a/tests/thread/thread_lock1.py b/tests/thread/thread_lock1.py
index ca585ffbb..ba5c7dff0 100644
--- a/tests/thread/thread_lock1.py
+++ b/tests/thread/thread_lock1.py
@@ -38,3 +38,9 @@ try:
except KeyError:
print('KeyError')
print(lock.locked())
+
+# test that we can't release an unlocked lock
+try:
+ lock.release()
+except RuntimeError:
+ print('RuntimeError')
diff --git a/tests/unix/extra_coverage.py b/tests/unix/extra_coverage.py
index 870e7d5f2..7a496aa87 100644
--- a/tests/unix/extra_coverage.py
+++ b/tests/unix/extra_coverage.py
@@ -2,8 +2,7 @@ try:
extra_coverage
except NameError:
print("SKIP")
- import sys
- sys.exit()
+ raise SystemExit
import uerrno
import uio
diff --git a/tests/unix/extra_coverage.py.exp b/tests/unix/extra_coverage.py.exp
index 416993887..390ff1669 100644
--- a/tests/unix/extra_coverage.py.exp
+++ b/tests/unix/extra_coverage.py.exp
@@ -11,6 +11,7 @@ false true
2147483648
80000000
80000000
+abc
# vstr
tests
sts
diff --git a/tests/unix/ffi_callback.py b/tests/unix/ffi_callback.py
index 7f8af15b3..23b058bce 100644
--- a/tests/unix/ffi_callback.py
+++ b/tests/unix/ffi_callback.py
@@ -1,9 +1,8 @@
-import sys
try:
import ffi
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
def ffi_open(names):
diff --git a/tests/unix/ffi_float.py b/tests/unix/ffi_float.py
index cc12fa7ad..c92a39bcd 100644
--- a/tests/unix/ffi_float.py
+++ b/tests/unix/ffi_float.py
@@ -1,10 +1,9 @@
# test ffi float support
-import sys
try:
import ffi
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
def ffi_open(names):
diff --git a/tests/unix/ffi_float2.py b/tests/unix/ffi_float2.py
index d635a2714..721eb4d19 100644
--- a/tests/unix/ffi_float2.py
+++ b/tests/unix/ffi_float2.py
@@ -1,10 +1,9 @@
# test ffi float support
-import sys
try:
import ffi
except ImportError:
print("SKIP")
- sys.exit()
+ raise SystemExit
def ffi_open(names):
@@ -25,7 +24,7 @@ try:
tgammaf = libm.func('f', 'tgammaf', 'f')
except OSError:
print("SKIP")
- sys.exit()
+ raise SystemExit
for fun in (tgammaf,):
for val in (0.5, 1, 1.0, 1.5, 4, 4.0):