48 lines
1.1 KiB
Rust
48 lines
1.1 KiB
Rust
use pyo3::prelude::*;
|
|
use pyo3::py_run;
|
|
|
|
#[pyclass(dict, unsendable)]
|
|
struct UnsendableDictClass {}
|
|
|
|
#[pymethods]
|
|
impl UnsendableDictClass {
|
|
#[new]
|
|
fn new() -> Self {
|
|
UnsendableDictClass {}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
#[cfg_attr(all(Py_LIMITED_API, not(Py_3_10)), ignore)]
|
|
fn test_unsendable_dict() {
|
|
let gil = Python::acquire_gil();
|
|
let py = gil.python();
|
|
let inst = Py::new(py, UnsendableDictClass {}).unwrap();
|
|
py_run!(py, inst, "assert inst.__dict__ == {}");
|
|
}
|
|
|
|
#[pyclass(dict, unsendable, weakref)]
|
|
struct UnsendableDictClassWithWeakRef {}
|
|
|
|
#[pymethods]
|
|
impl UnsendableDictClassWithWeakRef {
|
|
#[new]
|
|
fn new() -> Self {
|
|
Self {}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
#[cfg_attr(all(Py_LIMITED_API, not(Py_3_10)), ignore)]
|
|
fn test_unsendable_dict_with_weakref() {
|
|
let gil = Python::acquire_gil();
|
|
let py = gil.python();
|
|
let inst = Py::new(py, UnsendableDictClassWithWeakRef {}).unwrap();
|
|
py_run!(py, inst, "assert inst.__dict__ == {}");
|
|
py_run!(
|
|
py,
|
|
inst,
|
|
"import weakref; assert weakref.ref(inst)() is inst; inst.a = 1; assert inst.a == 1"
|
|
);
|
|
}
|