summaryrefslogtreecommitdiff
path: root/tests/thread
diff options
context:
space:
mode:
Diffstat (limited to 'tests/thread')
-rw-r--r--tests/thread/mutate_bytearray.py3
-rw-r--r--tests/thread/mutate_dict.py3
-rw-r--r--tests/thread/mutate_instance.py17
-rw-r--r--tests/thread/mutate_list.py1
-rw-r--r--tests/thread/mutate_set.py1
-rw-r--r--tests/thread/stress_aes.py309
-rw-r--r--tests/thread/stress_create.py4
-rw-r--r--tests/thread/stress_heap.py3
-rw-r--r--tests/thread/stress_recurse.py7
-rw-r--r--tests/thread/thread_exc1.py5
-rw-r--r--tests/thread/thread_exc2.py4
-rw-r--r--tests/thread/thread_exit1.py4
-rw-r--r--tests/thread/thread_exit2.py4
-rw-r--r--tests/thread/thread_gc1.py2
-rw-r--r--tests/thread/thread_ident1.py8
-rw-r--r--tests/thread/thread_lock1.py4
-rw-r--r--tests/thread/thread_lock2.py6
-rw-r--r--tests/thread/thread_lock3.py4
-rw-r--r--tests/thread/thread_lock4.py3
-rw-r--r--tests/thread/thread_qstr1.py6
-rw-r--r--tests/thread/thread_shared1.py3
-rw-r--r--tests/thread/thread_shared2.py3
-rw-r--r--tests/thread/thread_sleep1.py6
-rw-r--r--tests/thread/thread_stacksize1.py7
-rw-r--r--tests/thread/thread_start1.py5
-rw-r--r--tests/thread/thread_start2.py10
26 files changed, 372 insertions, 60 deletions
diff --git a/tests/thread/mutate_bytearray.py b/tests/thread/mutate_bytearray.py
index 5015c3f9c..9b52e0c01 100644
--- a/tests/thread/mutate_bytearray.py
+++ b/tests/thread/mutate_bytearray.py
@@ -25,10 +25,11 @@ def th(n, lo, hi):
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_thread = 4
n_finished = 0
-n_repeat = 4 # use 40 for more stressful test (uses more heap)
+n_repeat = 4 # use 40 for more stressful test (uses more heap)
# spawn threads
for i in range(n_thread):
diff --git a/tests/thread/mutate_dict.py b/tests/thread/mutate_dict.py
index 563fce39d..0840dcafb 100644
--- a/tests/thread/mutate_dict.py
+++ b/tests/thread/mutate_dict.py
@@ -7,7 +7,7 @@
import _thread
# the shared dict
-di = {'a':'A', 'b':'B', 'c':'C', 'd':'D'}
+di = {"a": "A", "b": "B", "c": "C", "d": "D"}
# main thread function
def th(n, lo, hi):
@@ -28,6 +28,7 @@ def th(n, lo, hi):
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_thread = 4
n_finished = 0
diff --git a/tests/thread/mutate_instance.py b/tests/thread/mutate_instance.py
index 2ecfbe109..8ba91cbde 100644
--- a/tests/thread/mutate_instance.py
+++ b/tests/thread/mutate_instance.py
@@ -9,25 +9,28 @@ import _thread
# the shared user class and instance
class User:
def __init__(self):
- self.a = 'A'
- self.b = 'B'
- self.c = 'C'
+ self.a = "A"
+ self.b = "B"
+ self.c = "C"
+
+
user = User()
# main thread function
def th(n, lo, hi):
for repeat in range(n):
for i in range(lo, hi):
- setattr(user, 'attr_%u' % i, repeat + i)
- assert getattr(user, 'attr_%u' % i) == repeat + i
+ setattr(user, "attr_%u" % i, repeat + i)
+ assert getattr(user, "attr_%u" % i) == repeat + i
with lock:
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_repeat = 30
-n_range = 50 # 300 for stressful test (uses more heap)
+n_range = 50 # 300 for stressful test (uses more heap)
n_thread = 4
n_finished = 0
@@ -42,4 +45,4 @@ while n_finished < n_thread:
# check user instance has correct contents
print(user.a, user.b, user.c)
for i in range(n_thread * n_range):
- assert getattr(user, 'attr_%u' % i) == n_repeat - 1 + i
+ assert getattr(user, "attr_%u" % i) == n_repeat - 1 + i
diff --git a/tests/thread/mutate_list.py b/tests/thread/mutate_list.py
index d70e8a8a3..8ce15c085 100644
--- a/tests/thread/mutate_list.py
+++ b/tests/thread/mutate_list.py
@@ -29,6 +29,7 @@ def th(n, lo, hi):
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_thread = 4
n_finished = 0
diff --git a/tests/thread/mutate_set.py b/tests/thread/mutate_set.py
index c4529f356..61169b8aa 100644
--- a/tests/thread/mutate_set.py
+++ b/tests/thread/mutate_set.py
@@ -23,6 +23,7 @@ def th(n, lo, hi):
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_thread = 4
n_finished = 0
diff --git a/tests/thread/stress_aes.py b/tests/thread/stress_aes.py
index ebf7af371..3191192a4 100644
--- a/tests/thread/stress_aes.py
+++ b/tests/thread/stress_aes.py
@@ -19,49 +19,295 @@
# discrete arithmetic routines, mostly from a precomputed table
# non-linear, invertible, substitution box
-aes_s_box_table = bytes((
- 0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
- 0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,
- 0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,
- 0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,
- 0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,
- 0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,
- 0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,
- 0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,
- 0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,
- 0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,
- 0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,
- 0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,
- 0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,
- 0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,
- 0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,
- 0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16,
-))
+aes_s_box_table = bytes(
+ (
+ 0x63,
+ 0x7C,
+ 0x77,
+ 0x7B,
+ 0xF2,
+ 0x6B,
+ 0x6F,
+ 0xC5,
+ 0x30,
+ 0x01,
+ 0x67,
+ 0x2B,
+ 0xFE,
+ 0xD7,
+ 0xAB,
+ 0x76,
+ 0xCA,
+ 0x82,
+ 0xC9,
+ 0x7D,
+ 0xFA,
+ 0x59,
+ 0x47,
+ 0xF0,
+ 0xAD,
+ 0xD4,
+ 0xA2,
+ 0xAF,
+ 0x9C,
+ 0xA4,
+ 0x72,
+ 0xC0,
+ 0xB7,
+ 0xFD,
+ 0x93,
+ 0x26,
+ 0x36,
+ 0x3F,
+ 0xF7,
+ 0xCC,
+ 0x34,
+ 0xA5,
+ 0xE5,
+ 0xF1,
+ 0x71,
+ 0xD8,
+ 0x31,
+ 0x15,
+ 0x04,
+ 0xC7,
+ 0x23,
+ 0xC3,
+ 0x18,
+ 0x96,
+ 0x05,
+ 0x9A,
+ 0x07,
+ 0x12,
+ 0x80,
+ 0xE2,
+ 0xEB,
+ 0x27,
+ 0xB2,
+ 0x75,
+ 0x09,
+ 0x83,
+ 0x2C,
+ 0x1A,
+ 0x1B,
+ 0x6E,
+ 0x5A,
+ 0xA0,
+ 0x52,
+ 0x3B,
+ 0xD6,
+ 0xB3,
+ 0x29,
+ 0xE3,
+ 0x2F,
+ 0x84,
+ 0x53,
+ 0xD1,
+ 0x00,
+ 0xED,
+ 0x20,
+ 0xFC,
+ 0xB1,
+ 0x5B,
+ 0x6A,
+ 0xCB,
+ 0xBE,
+ 0x39,
+ 0x4A,
+ 0x4C,
+ 0x58,
+ 0xCF,
+ 0xD0,
+ 0xEF,
+ 0xAA,
+ 0xFB,
+ 0x43,
+ 0x4D,
+ 0x33,
+ 0x85,
+ 0x45,
+ 0xF9,
+ 0x02,
+ 0x7F,
+ 0x50,
+ 0x3C,
+ 0x9F,
+ 0xA8,
+ 0x51,
+ 0xA3,
+ 0x40,
+ 0x8F,
+ 0x92,
+ 0x9D,
+ 0x38,
+ 0xF5,
+ 0xBC,
+ 0xB6,
+ 0xDA,
+ 0x21,
+ 0x10,
+ 0xFF,
+ 0xF3,
+ 0xD2,
+ 0xCD,
+ 0x0C,
+ 0x13,
+ 0xEC,
+ 0x5F,
+ 0x97,
+ 0x44,
+ 0x17,
+ 0xC4,
+ 0xA7,
+ 0x7E,
+ 0x3D,
+ 0x64,
+ 0x5D,
+ 0x19,
+ 0x73,
+ 0x60,
+ 0x81,
+ 0x4F,
+ 0xDC,
+ 0x22,
+ 0x2A,
+ 0x90,
+ 0x88,
+ 0x46,
+ 0xEE,
+ 0xB8,
+ 0x14,
+ 0xDE,
+ 0x5E,
+ 0x0B,
+ 0xDB,
+ 0xE0,
+ 0x32,
+ 0x3A,
+ 0x0A,
+ 0x49,
+ 0x06,
+ 0x24,
+ 0x5C,
+ 0xC2,
+ 0xD3,
+ 0xAC,
+ 0x62,
+ 0x91,
+ 0x95,
+ 0xE4,
+ 0x79,
+ 0xE7,
+ 0xC8,
+ 0x37,
+ 0x6D,
+ 0x8D,
+ 0xD5,
+ 0x4E,
+ 0xA9,
+ 0x6C,
+ 0x56,
+ 0xF4,
+ 0xEA,
+ 0x65,
+ 0x7A,
+ 0xAE,
+ 0x08,
+ 0xBA,
+ 0x78,
+ 0x25,
+ 0x2E,
+ 0x1C,
+ 0xA6,
+ 0xB4,
+ 0xC6,
+ 0xE8,
+ 0xDD,
+ 0x74,
+ 0x1F,
+ 0x4B,
+ 0xBD,
+ 0x8B,
+ 0x8A,
+ 0x70,
+ 0x3E,
+ 0xB5,
+ 0x66,
+ 0x48,
+ 0x03,
+ 0xF6,
+ 0x0E,
+ 0x61,
+ 0x35,
+ 0x57,
+ 0xB9,
+ 0x86,
+ 0xC1,
+ 0x1D,
+ 0x9E,
+ 0xE1,
+ 0xF8,
+ 0x98,
+ 0x11,
+ 0x69,
+ 0xD9,
+ 0x8E,
+ 0x94,
+ 0x9B,
+ 0x1E,
+ 0x87,
+ 0xE9,
+ 0xCE,
+ 0x55,
+ 0x28,
+ 0xDF,
+ 0x8C,
+ 0xA1,
+ 0x89,
+ 0x0D,
+ 0xBF,
+ 0xE6,
+ 0x42,
+ 0x68,
+ 0x41,
+ 0x99,
+ 0x2D,
+ 0x0F,
+ 0xB0,
+ 0x54,
+ 0xBB,
+ 0x16,
+ )
+)
# multiplication of polynomials modulo x^8 + x^4 + x^3 + x + 1 = 0x11b
def aes_gf8_mul_2(x):
if x & 0x80:
- return (x << 1) ^ 0x11b
+ return (x << 1) ^ 0x11B
else:
return x << 1
+
def aes_gf8_mul_3(x):
return x ^ aes_gf8_mul_2(x)
+
# non-linear, invertible, substitution box
def aes_s_box(a):
- return aes_s_box_table[a & 0xff]
+ return aes_s_box_table[a & 0xFF]
+
# return 0x02^(a-1) in GF(2^8)
def aes_r_con(a):
ans = 1
while a > 1:
- ans <<= 1;
+ ans <<= 1
if ans & 0x100:
- ans ^= 0x11b
+ ans ^= 0x11B
a -= 1
return ans
+
##################################################################
# basic AES algorithm; see FIPS-197
#
@@ -81,6 +327,7 @@ def aes_add_round_key(state, w):
for i in range(16):
state[i] ^= w[i]
+
# combined sub_bytes, shift_rows, mix_columns, add_round_key
# all inputs must be size 16
def aes_sb_sr_mc_ark(state, w, w_idx, temp):
@@ -90,7 +337,7 @@ def aes_sb_sr_mc_ark(state, w, w_idx, temp):
x1 = aes_s_box_table[state[1 + ((i + 1) & 3) * 4]]
x2 = aes_s_box_table[state[2 + ((i + 2) & 3) * 4]]
x3 = aes_s_box_table[state[3 + ((i + 3) & 3) * 4]]
- temp[temp_idx] = aes_gf8_mul_2(x0) ^ aes_gf8_mul_3(x1) ^ x2 ^ x3 ^ w[w_idx]
+ temp[temp_idx] = aes_gf8_mul_2(x0) ^ aes_gf8_mul_3(x1) ^ x2 ^ x3 ^ w[w_idx]
temp[temp_idx + 1] = x0 ^ aes_gf8_mul_2(x1) ^ aes_gf8_mul_3(x2) ^ x3 ^ w[w_idx + 1]
temp[temp_idx + 2] = x0 ^ x1 ^ aes_gf8_mul_2(x2) ^ aes_gf8_mul_3(x3) ^ w[w_idx + 2]
temp[temp_idx + 3] = aes_gf8_mul_3(x0) ^ x1 ^ x2 ^ aes_gf8_mul_2(x3) ^ w[w_idx + 3]
@@ -99,6 +346,7 @@ def aes_sb_sr_mc_ark(state, w, w_idx, temp):
for i in range(16):
state[i] = temp[i]
+
# combined sub_bytes, shift_rows, add_round_key
# all inputs must be size 16
def aes_sb_sr_ark(state, w, w_idx, temp):
@@ -108,7 +356,7 @@ def aes_sb_sr_ark(state, w, w_idx, temp):
x1 = aes_s_box_table[state[1 + ((i + 1) & 3) * 4]]
x2 = aes_s_box_table[state[2 + ((i + 2) & 3) * 4]]
x3 = aes_s_box_table[state[3 + ((i + 3) & 3) * 4]]
- temp[temp_idx] = x0 ^ w[w_idx]
+ temp[temp_idx] = x0 ^ w[w_idx]
temp[temp_idx + 1] = x1 ^ w[w_idx + 1]
temp[temp_idx + 2] = x2 ^ w[w_idx + 2]
temp[temp_idx + 3] = x3 ^ w[w_idx + 3]
@@ -117,6 +365,7 @@ def aes_sb_sr_ark(state, w, w_idx, temp):
for i in range(16):
state[i] = temp[i]
+
# take state as input and change it to the next state in the sequence
# state and temp have size 16, w has size 16 * (Nr + 1), Nr >= 1
def aes_state(state, w, temp, nr):
@@ -127,6 +376,7 @@ def aes_state(state, w, temp, nr):
w_idx += 16
aes_sb_sr_ark(state, w, w_idx, temp)
+
# expand 'key' to 'w' for use with aes_state
# key has size 4 * Nk, w has size 16 * (Nr + 1), temp has size 16
def aes_key_expansion(key, w, temp, nk, nr):
@@ -150,9 +400,11 @@ def aes_key_expansion(key, w, temp, nk, nr):
for j in range(4):
w[w_idx + j] = w[w_idx + j - 4 * nk] ^ t[t_idx + j]
+
##################################################################
# simple use of AES algorithm, using output feedback (OFB) mode
+
class AES:
def __init__(self, keysize):
if keysize == 128:
@@ -178,7 +430,7 @@ class AES:
def set_iv(self, iv):
for i in range(16):
self.state[i] = iv[i]
- self.state_pos = 16;
+ self.state_pos = 16
def get_some_state(self, n_needed):
if self.state_pos >= 16:
@@ -200,6 +452,7 @@ class AES:
idx += ln
self.state_pos += n
+
##################################################################
# test code
@@ -209,6 +462,7 @@ except ImportError:
import time
import _thread
+
class LockedCounter:
def __init__(self):
self.lock = _thread.allocate_lock()
@@ -219,8 +473,10 @@ class LockedCounter:
self.value += val
self.lock.release()
+
count = LockedCounter()
+
def thread_entry():
global count
@@ -249,7 +505,8 @@ def thread_entry():
count.add(1)
-if __name__ == '__main__':
+
+if __name__ == "__main__":
n_thread = 20
for i in range(n_thread):
_thread.start_new_thread(thread_entry, ())
diff --git a/tests/thread/stress_create.py b/tests/thread/stress_create.py
index 2399746cc..eda768fa7 100644
--- a/tests/thread/stress_create.py
+++ b/tests/thread/stress_create.py
@@ -6,9 +6,11 @@ except ImportError:
import time
import _thread
+
def thread_entry(n):
pass
+
thread_num = 0
while thread_num < 500:
try:
@@ -19,4 +21,4 @@ while thread_num < 500:
# wait for the last threads to terminate
time.sleep(1)
-print('done')
+print("done")
diff --git a/tests/thread/stress_heap.py b/tests/thread/stress_heap.py
index 206cf1a86..41dfa5f37 100644
--- a/tests/thread/stress_heap.py
+++ b/tests/thread/stress_heap.py
@@ -11,9 +11,11 @@ except ImportError:
import time
import _thread
+
def last(l):
return l[-1]
+
def thread_entry(n):
# allocate a bytearray and fill it
data = bytearray(i for i in range(256))
@@ -35,6 +37,7 @@ def thread_entry(n):
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_thread = 10
n_finished = 0
diff --git a/tests/thread/stress_recurse.py b/tests/thread/stress_recurse.py
index 8edee246a..b7a128821 100644
--- a/tests/thread/stress_recurse.py
+++ b/tests/thread/stress_recurse.py
@@ -6,17 +6,20 @@
import _thread
+
def foo():
foo()
+
def thread_entry():
try:
foo()
except RuntimeError:
- print('RuntimeError')
+ print("RuntimeError")
global finished
finished = True
+
finished = False
_thread.start_new_thread(thread_entry, ())
@@ -24,4 +27,4 @@ _thread.start_new_thread(thread_entry, ())
# busy wait for thread to finish
while not finished:
pass
-print('done')
+print("done")
diff --git a/tests/thread/thread_exc1.py b/tests/thread/thread_exc1.py
index e00a16bd2..3c3a1e8be 100644
--- a/tests/thread/thread_exc1.py
+++ b/tests/thread/thread_exc1.py
@@ -6,9 +6,11 @@
import _thread
+
def foo():
raise ValueError
+
def thread_entry():
try:
foo()
@@ -18,6 +20,7 @@ def thread_entry():
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_thread = 4
n_finished = 0
@@ -29,4 +32,4 @@ for i in range(n_thread):
# busy wait for threads to finish
while n_finished < n_thread:
pass
-print('done')
+print("done")
diff --git a/tests/thread/thread_exc2.py b/tests/thread/thread_exc2.py
index 35cb32441..2863e1dec 100644
--- a/tests/thread/thread_exc2.py
+++ b/tests/thread/thread_exc2.py
@@ -2,9 +2,11 @@
import utime
import _thread
+
def thread_entry():
raise ValueError
+
_thread.start_new_thread(thread_entry, ())
utime.sleep(1)
-print('done')
+print("done")
diff --git a/tests/thread/thread_exit1.py b/tests/thread/thread_exit1.py
index ad7b01d89..6179716d1 100644
--- a/tests/thread/thread_exit1.py
+++ b/tests/thread/thread_exit1.py
@@ -10,12 +10,14 @@ except ImportError:
import time
import _thread
+
def thread_entry():
_thread.exit()
+
_thread.start_new_thread(thread_entry, ())
_thread.start_new_thread(thread_entry, ())
# wait for threads to finish
time.sleep(1)
-print('done')
+print("done")
diff --git a/tests/thread/thread_exit2.py b/tests/thread/thread_exit2.py
index 6bff8a173..ba9852b5c 100644
--- a/tests/thread/thread_exit2.py
+++ b/tests/thread/thread_exit2.py
@@ -10,12 +10,14 @@ except ImportError:
import time
import _thread
+
def thread_entry():
raise SystemExit
+
_thread.start_new_thread(thread_entry, ())
_thread.start_new_thread(thread_entry, ())
# wait for threads to finish
time.sleep(1)
-print('done')
+print("done")
diff --git a/tests/thread/thread_gc1.py b/tests/thread/thread_gc1.py
index 2ea189161..4e4faeaf8 100644
--- a/tests/thread/thread_gc1.py
+++ b/tests/thread/thread_gc1.py
@@ -7,6 +7,7 @@
import gc
import _thread
+
def thread_entry(n):
# allocate a bytearray and fill it
data = bytearray(i for i in range(256))
@@ -23,6 +24,7 @@ def thread_entry(n):
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_thread = 4
n_finished = 0
diff --git a/tests/thread/thread_ident1.py b/tests/thread/thread_ident1.py
index 9a6f89ff5..1ba342e2b 100644
--- a/tests/thread/thread_ident1.py
+++ b/tests/thread/thread_ident1.py
@@ -6,18 +6,20 @@
import _thread
+
def thread_entry():
tid = _thread.get_ident()
- print('thread', type(tid) == int, tid != 0, tid != tid_main)
+ print("thread", type(tid) == int, tid != 0, tid != tid_main)
global finished
finished = True
+
tid_main = _thread.get_ident()
-print('main', type(tid_main) == int, tid_main != 0)
+print("main", type(tid_main) == int, tid_main != 0)
finished = False
_thread.start_new_thread(thread_entry, ())
while not finished:
pass
-print('done')
+print("done")
diff --git a/tests/thread/thread_lock1.py b/tests/thread/thread_lock1.py
index c2d7c9d1e..e7066402c 100644
--- a/tests/thread/thread_lock1.py
+++ b/tests/thread/thread_lock1.py
@@ -38,11 +38,11 @@ try:
print(lock.locked())
raise KeyError
except KeyError:
- print('KeyError')
+ print("KeyError")
print(lock.locked())
# test that we can't release an unlocked lock
try:
lock.release()
except RuntimeError:
- print('RuntimeError')
+ print("RuntimeError")
diff --git a/tests/thread/thread_lock2.py b/tests/thread/thread_lock2.py
index 4ef912dff..c43b4b18d 100644
--- a/tests/thread/thread_lock2.py
+++ b/tests/thread/thread_lock2.py
@@ -12,15 +12,17 @@ import _thread
lock = _thread.allocate_lock()
+
def thread_entry():
lock.acquire()
- print('have it')
+ print("have it")
lock.release()
+
# spawn the threads
for i in range(4):
_thread.start_new_thread(thread_entry, ())
# wait for threads to finish
time.sleep(1)
-print('done')
+print("done")
diff --git a/tests/thread/thread_lock3.py b/tests/thread/thread_lock3.py
index 35808d99c..32d0c54b5 100644
--- a/tests/thread/thread_lock3.py
+++ b/tests/thread/thread_lock3.py
@@ -10,16 +10,18 @@ lock = _thread.allocate_lock()
n_thread = 10
n_finished = 0
+
def thread_entry(idx):
global n_finished
while True:
with lock:
if n_finished == idx:
break
- print('my turn:', idx)
+ print("my turn:", idx)
with lock:
n_finished += 1
+
# spawn threads
for i in range(n_thread):
_thread.start_new_thread(thread_entry, (i,))
diff --git a/tests/thread/thread_lock4.py b/tests/thread/thread_lock4.py
index 440f3e90c..7637d10b9 100644
--- a/tests/thread/thread_lock4.py
+++ b/tests/thread/thread_lock4.py
@@ -10,12 +10,14 @@ except ImportError:
import time
import _thread
+
def fac(n):
x = 1
for i in range(1, n + 1):
x *= i
return x
+
def thread_entry():
while True:
with jobs_lock:
@@ -27,6 +29,7 @@ def thread_entry():
with output_lock:
output.append((arg, ans))
+
# create a list of jobs
jobs = [(fac, i) for i in range(20, 80)]
jobs_lock = _thread.allocate_lock()
diff --git a/tests/thread/thread_qstr1.py b/tests/thread/thread_qstr1.py
index dccfb7f51..2099f94bd 100644
--- a/tests/thread/thread_qstr1.py
+++ b/tests/thread/thread_qstr1.py
@@ -15,6 +15,7 @@ def check(s, val):
assert type(s) == str
assert int(s) == val
+
# main thread function
def th(base, n):
for i in range(n):
@@ -25,10 +26,11 @@ def th(base, n):
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_thread = 4
n_finished = 0
-n_qstr_per_thread = 100 # make 1000 for a more stressful test (uses more heap)
+n_qstr_per_thread = 100 # make 1000 for a more stressful test (uses more heap)
# spawn threads
for i in range(n_thread):
@@ -38,4 +40,4 @@ for i in range(n_thread):
while n_finished < n_thread:
time.sleep(1)
-print('pass')
+print("pass")
diff --git a/tests/thread/thread_shared1.py b/tests/thread/thread_shared1.py
index de339ad7f..87f8b51e2 100644
--- a/tests/thread/thread_shared1.py
+++ b/tests/thread/thread_shared1.py
@@ -6,9 +6,11 @@
import _thread
+
def foo(i):
pass
+
def thread_entry(n, tup):
for i in tup:
foo(i)
@@ -16,6 +18,7 @@ def thread_entry(n, tup):
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_thread = 2
n_finished = 0
diff --git a/tests/thread/thread_shared2.py b/tests/thread/thread_shared2.py
index 2c749e688..dbe18f987 100644
--- a/tests/thread/thread_shared2.py
+++ b/tests/thread/thread_shared2.py
@@ -7,9 +7,11 @@
import _thread
+
def foo(lst, i):
lst[i] += 1
+
def thread_entry(n, lst, idx):
for i in range(n):
foo(lst, idx)
@@ -17,6 +19,7 @@ def thread_entry(n, lst, idx):
global n_finished
n_finished += 1
+
lock = _thread.allocate_lock()
n_thread = 2
n_finished = 0
diff --git a/tests/thread/thread_sleep1.py b/tests/thread/thread_sleep1.py
index d5aa99f97..d81d53739 100644
--- a/tests/thread/thread_sleep1.py
+++ b/tests/thread/thread_sleep1.py
@@ -6,9 +6,11 @@
try:
import utime
+
sleep_ms = utime.sleep_ms
except ImportError:
import time
+
sleep_ms = lambda t: time.sleep(t / 1000)
import _thread
@@ -17,6 +19,7 @@ lock = _thread.allocate_lock()
n_thread = 4
n_finished = 0
+
def thread_entry(t):
global n_finished
sleep_ms(t)
@@ -24,10 +27,11 @@ def thread_entry(t):
with lock:
n_finished += 1
+
for i in range(n_thread):
_thread.start_new_thread(thread_entry, (10 * i,))
# wait for threads to finish
while n_finished < n_thread:
sleep_ms(100)
-print('done', n_thread)
+print("done", n_thread)
diff --git a/tests/thread/thread_stacksize1.py b/tests/thread/thread_stacksize1.py
index e7189fafb..0c6e7a92c 100644
--- a/tests/thread/thread_stacksize1.py
+++ b/tests/thread/thread_stacksize1.py
@@ -8,20 +8,23 @@ import sys
import _thread
# different implementations have different minimum sizes
-if sys.implementation.name == 'micropython':
+if sys.implementation.name == "micropython":
sz = 2 * 1024
else:
sz = 32 * 1024
+
def foo():
pass
+
def thread_entry():
foo()
with lock:
global n_finished
n_finished += 1
+
# reset stack size to default
_thread.stack_size()
@@ -46,4 +49,4 @@ _thread.stack_size()
# busy wait for threads to finish
while n_finished < n_thread:
pass
-print('done')
+print("done")
diff --git a/tests/thread/thread_start1.py b/tests/thread/thread_start1.py
index 94df6dc62..f08ff05a8 100644
--- a/tests/thread/thread_start1.py
+++ b/tests/thread/thread_start1.py
@@ -10,16 +10,19 @@ except ImportError:
import time
import _thread
+
def foo():
pass
+
def thread_entry(n):
for i in range(n):
foo()
+
_thread.start_new_thread(thread_entry, (10,))
_thread.start_new_thread(thread_entry, (20,))
# wait for threads to finish
time.sleep(1)
-print('done')
+print("done")
diff --git a/tests/thread/thread_start2.py b/tests/thread/thread_start2.py
index 9412bb618..40f8a0522 100644
--- a/tests/thread/thread_start2.py
+++ b/tests/thread/thread_start2.py
@@ -10,11 +10,13 @@ except ImportError:
import time
import _thread
+
def thread_entry(a0, a1, a2, a3):
- print('thread', a0, a1, a2, a3)
+ print("thread", a0, a1, a2, a3)
+
# spawn thread using kw args
-_thread.start_new_thread(thread_entry, (10, 20), {'a2': 0, 'a3': 1})
+_thread.start_new_thread(thread_entry, (10, 20), {"a2": 0, "a3": 1})
# wait for thread to finish
time.sleep(1)
@@ -23,6 +25,6 @@ time.sleep(1)
try:
_thread.start_new_thread(thread_entry, (), ())
except TypeError:
- print('TypeError')
+ print("TypeError")
-print('done')
+print("done")