Skip to content

Commit c40f102

Browse files
committed
Add test for freethreading
1 parent c3baa5b commit c40f102

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

meson.build

+6
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ add_project_arguments(
8383
language : 'cython'
8484
)
8585

86+
# Enable free-threading if Cython is new enough:
87+
#cy = meson.get_compiler('cython')
88+
#if cy.version().version_compare('>=3.1.0')
89+
# add_project_arguments('-Xfreethreading_compatible=true', language : 'cython')
90+
#endif
91+
8692
if get_option('coverage')
8793
add_project_arguments('-X', 'linetrace=True', language : 'cython')
8894
add_project_arguments('-DCYTHON_TRACE=1', language : 'c')

src/flint/test/test_all.py

+38
Original file line numberDiff line numberDiff line change
@@ -1612,10 +1612,12 @@ def set_bad2():
16121612
M6 = M6_copy
16131613
assert M6.nullspace() == (M([[1,15,1],[0,0,0],[0,0,0]],17).transpose(), 1)
16141614

1615+
16151616
def test_nmod_series():
16161617
# XXX: currently no code in nmod_series.pyx
16171618
pass
16181619

1620+
16191621
def test_arb():
16201622
A = flint.arb
16211623
assert A(3) > A(2.5)
@@ -1626,6 +1628,7 @@ def test_arb():
16261628
assert A(3) != A(2)
16271629
assert not (A("1.1") == A("1.1"))
16281630

1631+
16291632
def test_pickling():
16301633
objects = [
16311634
flint.fmpz(1),
@@ -4735,6 +4738,39 @@ def test_fq_default_poly():
47354738
assert raises(lambda: f.pow_trunc(-1, 5), ValueError)
47364739

47374740

4741+
def test_python_threads():
4742+
4743+
from threading import Thread
4744+
4745+
iterations = 10**5
4746+
threads = 3 + 1
4747+
size = 3
4748+
M = flint.fmpz_mat([[0]*size for _ in range(size)])
4749+
4750+
def set_values():
4751+
for i in range(iterations // 5):
4752+
i = random.randrange(M.nrows())
4753+
j = random.randrange(M.ncols())
4754+
if random.uniform(0, 1) > 0.5:
4755+
# Bigger than 2**62:
4756+
M[i,j] = 10**128
4757+
else:
4758+
# Smaller than 2**62:
4759+
M[i,j] = 0
4760+
4761+
def get_dets():
4762+
for i in range(iterations):
4763+
M.det()
4764+
4765+
threads = [Thread(target=set_values) for _ in range(threads-1)]
4766+
threads.append(Thread(target=get_dets))
4767+
4768+
for t in threads:
4769+
t.start()
4770+
for t in threads:
4771+
t.join()
4772+
4773+
47384774
def test_all_tests():
47394775
test_funcs = {f for name, f in globals().items() if name.startswith("test_")}
47404776
untested = test_funcs - set(all_tests)
@@ -4813,5 +4849,7 @@ def test_all_tests():
48134849

48144850
test_pickling,
48154851

4852+
test_python_threads,
4853+
48164854
test_all_tests,
48174855
]

0 commit comments

Comments
 (0)