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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }