Mercurial > public > mercurial-scm > hg
annotate rust/pyo3-sharedref/tests/test_sharedref.rs @ 53042:cdd7bf612c7b stable tip
bundle-spec: properly format boolean parameter (issue6960)
This was breaking automatic clone bundle generation. This changeset fixes it and
add a test to catch it in the future.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 11 Mar 2025 02:29:42 +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 } |