Mercurial > public > mercurial-scm > hg
annotate rust/pyo3-sharedref/tests/test_sharedref.rs @ 52664:f5091286b10c
packaging: modernize (compat PEP 517) with less distutils and setup.py calls
- setup.py: less distutils imports and setuptools required
distutils is deprecated and one should import commands from setuptools to support
modern workflows depending on PEP 517 and 518.
Moreover, for Python >=3.12, distutils comes from setuptools. It corresponds to old and
unmaintain code that do not support PEP 517.
The PEP 517 frontends (pip, build, pipx, PDM, UV, etc.) are responsible for creating a
venv just for the build. The build dependencies (currently only setuptools) are specified
in the pyproject.toml file. Therefore, there is no reason to support building without
setuptools.
Calling directly setup.py is deprecated and we have to use a PEP 517 frontend.
For this commit we use pip with venv.
- run-tests.py: install with pip instead of direct call of setup.py
Mercurial is then built in an isolated environment.
- Makefile: use venv+pip instead of setup.py
author | paugier <pierre.augier@univ-grenoble-alpes.fr> |
---|---|
date | Wed, 08 Jan 2025 05:07:00 +0100 |
parents | ac0cb3c334a1 |
children |
rev | line source |
---|---|
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
1 use pyo3::prelude::*; |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
2 use pyo3_sharedref::*; |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
3 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
4 #[pyclass] |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
5 struct Owner { |
52610
c25d345f5aa5
rust-pyo3-sharedref: renamed PySharedRefCell to PyShareable
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52609
diff
changeset
|
6 string: PyShareable<String>, |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
7 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
8 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
9 #[pymethods] |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
10 impl Owner { |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
11 #[new] |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
12 fn new(s: String) -> Self { |
52608
d85514a88706
rust-pyo3-sharedref: reworked constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52607
diff
changeset
|
13 Self { string: s.into() } |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
14 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
15 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
16 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
17 fn with_setup( |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
18 test: impl FnOnce(Python<'_>, &Bound<'_, Owner>) -> PyResult<()>, |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
19 ) -> PyResult<()> { |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
20 pyo3::prepare_freethreaded_python(); |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
21 Python::with_gil(|py| { |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
22 let owner = Bound::new(py, Owner::new("new".to_owned()))?; |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
23 test(py, &owner) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
24 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
25 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
26 |
52611
4a73eb3923ac
rust-pyo3-sharedref: renamed UnsafePyLeaked to SharedByPyObject
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52610
diff
changeset
|
27 /// "leak" in the sense of `SharedByPyObject` the `string` data field, |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
28 /// taking care of all the boilerplate |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
29 fn share_string( |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
30 owner: &Bound<'_, Owner>, |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
31 ) -> SharedByPyObject<&'static String> { |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
32 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
33 unsafe { shareable.share(owner) } |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
34 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
35 |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
36 fn try_share_string( |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
37 owner: &Bound<'_, Owner>, |
52611
4a73eb3923ac
rust-pyo3-sharedref: renamed UnsafePyLeaked to SharedByPyObject
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52610
diff
changeset
|
38 ) -> Result<SharedByPyObject<&'static String>, TryShareError> { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
39 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
40 unsafe { shareable.try_share(owner) } |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
41 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
42 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
43 /// Mutate the `string` field of `owner` as would be done from Python code |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
44 /// |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
45 /// This is to simulate normal mutation of the owner object from |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
46 /// the Python interpreter. This could be replaced by methods of [`Owner`] |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
47 /// (wih closure replaced by a small fixed operations) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
48 /// and perhaps will, once we are done converting the original tests |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
49 /// from rust-cpython |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
50 fn mutate_string<'py>( |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
51 owner: &'py Bound<'py, Owner>, |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
52 f: impl FnOnce(&mut String), |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
53 ) -> () { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
54 let shareable = &owner.borrow_mut().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
55 let shared_ref = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
56 f(&mut shared_ref.write()); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
57 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
58 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
59 #[test] |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
60 fn test_shared_borrow() -> PyResult<()> { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
61 with_setup(|py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
62 let shared = share_string(owner); |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
63 let shared_ref = unsafe { shared.try_borrow(py) }.unwrap(); |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
64 assert_eq!(*shared_ref, "new"); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
65 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
66 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
67 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
68 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
69 #[test] |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
70 fn test_shared_borrow_mut() -> PyResult<()> { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
71 with_setup(|py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
72 let shared = share_string(owner); |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
73 let mut shared_iter = unsafe { shared.map(py, |s| s.chars()) }; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
74 let mut shared_ref = |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
75 unsafe { shared_iter.try_borrow_mut(py) }.unwrap(); |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
76 assert_eq!(shared_ref.next(), Some('n')); |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
77 assert_eq!(shared_ref.next(), Some('e')); |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
78 assert_eq!(shared_ref.next(), Some('w')); |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
79 assert_eq!(shared_ref.next(), None); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
80 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
81 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
82 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
83 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
84 #[test] |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
85 fn test_shared_borrow_after_mut() -> PyResult<()> { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
86 with_setup(|py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
87 let shared = share_string(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
88 mutate_string(owner, String::clear); |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
89 assert!(unsafe { shared.try_borrow(py) }.is_err()); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
90 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
91 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
92 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
93 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
94 #[test] |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
95 fn test_shared_borrow_mut_after_mut() -> PyResult<()> { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
96 with_setup(|py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
97 let shared = share_string(owner); |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
98 let mut shared_iter = unsafe { shared.map(py, |s| s.chars()) }; |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
99 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
100 mutate_string(owner, String::clear); |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
101 assert!(unsafe { shared_iter.try_borrow_mut(py) }.is_err()); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
102 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
103 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
104 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
105 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
106 #[test] |
52611
4a73eb3923ac
rust-pyo3-sharedref: renamed UnsafePyLeaked to SharedByPyObject
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52610
diff
changeset
|
107 #[should_panic(expected = "map() over invalidated shared reference")] |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
108 fn test_shared_map_after_mut() { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
109 with_setup(|py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
110 let shared = share_string(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
111 mutate_string(owner, String::clear); |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
112 let _shared_iter = unsafe { shared.map(py, |s| s.chars()) }; |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
113 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
114 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
115 .expect("should already have panicked") |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
116 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
117 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
118 /// run `try_borrow_mut` on the `string` field and assert it is not an error |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
119 /// |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
120 /// Simply returning the `Result` is not possible, because that is |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
121 /// returning a reference to data owned by the function |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
122 fn assert_try_write_string_ok(owner: &Bound<'_, Owner>) { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
123 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
124 let shared_ref = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
125 assert!(shared_ref.try_write().is_ok()); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
126 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
127 |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
128 fn assert_try_write_string_err(owner: &Bound<'_, Owner>) { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
129 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
130 let shared_ref = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
131 assert!(shared_ref.try_write().is_err()); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
132 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
133 |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
134 fn assert_try_read_string_err(owner: &Bound<'_, Owner>) { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
135 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
136 let shared_ref = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
137 assert!(shared_ref.try_read().is_err()); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
138 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
139 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
140 #[test] |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
141 fn test_try_write_while_shared_ref() -> PyResult<()> { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
142 with_setup(|py, owner| { |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
143 assert_try_write_string_ok(owner); |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
144 let shared = share_string(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
145 { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
146 let _shared_ref = unsafe { shared.try_borrow(py) }.unwrap(); |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
147 assert_try_write_string_err(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
148 { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
149 let _shared_ref2 = unsafe { shared.try_borrow(py) }.unwrap(); |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
150 assert_try_write_string_err(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
151 } |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
152 assert_try_write_string_err(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
153 } |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
154 assert_try_write_string_ok(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
155 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
156 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
157 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
158 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
159 #[test] |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
160 fn test_try_write_while_shared_ref_mut() -> PyResult<()> { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
161 with_setup(|py, owner| { |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
162 assert_try_write_string_ok(owner); |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
163 let shared = share_string(owner); |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
164 let mut shared_iter = unsafe { shared.map(py, |s| s.chars()) }; |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
165 { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
166 let _shared_ref = |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
167 unsafe { shared_iter.try_borrow_mut(py) }.unwrap(); |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
168 assert_try_write_string_err(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
169 } |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
170 assert_try_write_string_ok(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
171 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
172 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
173 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
174 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
175 #[test] |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
176 fn test_try_share_while_write() -> PyResult<()> { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
177 with_setup(|_py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
178 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
179 let shared_ref = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
180 let _mut_ref = shared_ref.write(); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
181 |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
182 assert!(try_share_string(owner).is_err()); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
183 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
184 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
185 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
186 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
187 #[test] |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
188 #[should_panic(expected = "already mutably borrowed")] |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
189 fn test_share_while_write() { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
190 with_setup(|_py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
191 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
192 let shared_ref = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
193 let _mut_ref = shared_ref.write(); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
194 |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
195 share_string(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
196 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
197 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
198 .expect("should already have panicked") |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
199 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
200 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
201 #[test] |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
202 fn test_try_write_while_borrow() -> PyResult<()> { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
203 with_setup(|_py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
204 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
205 let shared_ref = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
206 let _ref = shared_ref.read(); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
207 |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
208 assert_try_write_string_err(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
209 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
210 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
211 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
212 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
213 #[test] |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
214 #[should_panic(expected = "already borrowed")] |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
215 fn test_write_while_borrow() { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
216 with_setup(|_py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
217 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
218 let shared_ref = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
219 let _ref = shared_ref.read(); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
220 |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
221 let shared_ref2 = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
222 let _mut_ref = shared_ref2.write(); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
223 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
224 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
225 .expect("should already have panicked") |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
226 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
227 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
228 #[test] |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
229 fn test_try_borrow_while_write() -> PyResult<()> { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
230 with_setup(|_py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
231 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
232 let shared_ref = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
233 let _mut_ref = shared_ref.write(); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
234 |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
235 assert_try_read_string_err(owner); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
236 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
237 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
238 } |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
239 |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
240 #[test] |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
241 #[should_panic(expected = "already mutably borrowed")] |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
242 fn test_borrow_while_write() { |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
243 with_setup(|_py, owner| { |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
244 let shareable = &owner.borrow().string; |
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
245 let shared_ref = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
246 let _mut_ref = shared_ref.write(); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
247 |
52613
ac0cb3c334a1
rust-pyo3-sharedref: renamings in test
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52612
diff
changeset
|
248 let shared_ref2 = unsafe { shareable.borrow_with_owner(owner) }; |
52609
d1e304025b90
rust-pyo3-sharedref: replaced borrow/borrow_mut with RwLock namings
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52608
diff
changeset
|
249 let _ref = shared_ref2.read(); |
52607
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
250 Ok(()) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
251 }) |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
252 .expect("should already have panicked") |
a7d2529ed6dd
rust-pyo3-sharedref: converted integration tests from rust-cpython
Georges Racinet <georges.racinet@octobus.net>
parents:
diff
changeset
|
253 } |