()
| 555 | |
| 556 | #[test] |
| 557 | fn view_with_base_object() { |
| 558 | Python::attach(|py| { |
| 559 | let array = Array::<f64, _>::zeros((1, 2, 3)).into_pyarray(py); |
| 560 | |
| 561 | let locals = [("array", &array)].into_py_dict(py).unwrap(); |
| 562 | let view = py |
| 563 | .eval(c_str!("array[:,:,0]"), None, Some(&locals)) |
| 564 | .unwrap() |
| 565 | .cast_into::<PyArray2<f64>>() |
| 566 | .unwrap(); |
| 567 | assert_ne!( |
| 568 | view.as_ptr().cast::<c_void>(), |
| 569 | array.as_ptr().cast::<c_void>(), |
| 570 | ); |
| 571 | |
| 572 | let base = unsafe { (*view.as_array_ptr()).base }; |
| 573 | assert_eq!(base.cast::<c_void>(), array.as_ptr().cast::<c_void>()); |
| 574 | |
| 575 | let base = unsafe { (*array.as_array_ptr()).base }; |
| 576 | assert!(!base.is_null()); |
| 577 | |
| 578 | let base_address = base_address(py, view.as_array_ptr()); |
| 579 | assert_ne!(base_address, view.as_ptr().cast::<c_void>()); |
| 580 | assert_ne!(base_address, array.as_ptr().cast::<c_void>()); |
| 581 | assert_eq!(base_address, base.cast::<c_void>()); |
| 582 | |
| 583 | let data_range = data_range(py, view.as_array_ptr()); |
| 584 | assert_eq!(data_range.0, array.data().cast::<c_char>()); |
| 585 | assert_eq!(data_range.1, unsafe { |
| 586 | array.data().add(4).cast::<c_char>() |
| 587 | }); |
| 588 | }); |
| 589 | } |
| 590 | |
| 591 | #[test] |
| 592 | fn view_of_view_without_base_object() { |
nothing calls this directly
no test coverage detected