()
| 590 | |
| 591 | #[test] |
| 592 | fn view_of_view_without_base_object() { |
| 593 | Python::attach(|py| { |
| 594 | let array = PyArray::<f64, _>::zeros(py, (1, 2, 3), false); |
| 595 | |
| 596 | let locals = [("array", &array)].into_py_dict(py).unwrap(); |
| 597 | let view1 = py |
| 598 | .eval(c_str!("array[:,:,0]"), None, Some(&locals)) |
| 599 | .unwrap() |
| 600 | .cast_into::<PyArray2<f64>>() |
| 601 | .unwrap(); |
| 602 | assert_ne!( |
| 603 | view1.as_ptr().cast::<c_void>(), |
| 604 | array.as_ptr().cast::<c_void>() |
| 605 | ); |
| 606 | |
| 607 | let locals = [("view1", &view1)].into_py_dict(py).unwrap(); |
| 608 | let view2 = py |
| 609 | .eval(c_str!("view1[:,0]"), None, Some(&locals)) |
| 610 | .unwrap() |
| 611 | .cast_into::<PyArray1<f64>>() |
| 612 | .unwrap(); |
| 613 | assert_ne!( |
| 614 | view2.as_ptr().cast::<c_void>(), |
| 615 | array.as_ptr().cast::<c_void>() |
| 616 | ); |
| 617 | assert_ne!( |
| 618 | view2.as_ptr().cast::<c_void>(), |
| 619 | view1.as_ptr().cast::<c_void>() |
| 620 | ); |
| 621 | |
| 622 | let base = unsafe { (*view2.as_array_ptr()).base }; |
| 623 | assert_eq!(base as *mut c_void, array.as_ptr().cast::<c_void>()); |
| 624 | |
| 625 | let base = unsafe { (*view1.as_array_ptr()).base }; |
| 626 | assert_eq!(base as *mut c_void, array.as_ptr().cast::<c_void>()); |
| 627 | |
| 628 | let base_address = base_address(py, view2.as_array_ptr()); |
| 629 | assert_ne!(base_address, view2.as_ptr().cast::<c_void>()); |
| 630 | assert_ne!(base_address, view1.as_ptr().cast::<c_void>()); |
| 631 | assert_eq!(base_address, base as *mut c_void); |
| 632 | |
| 633 | let data_range = data_range(py, view2.as_array_ptr()); |
| 634 | assert_eq!(data_range.0, array.data() as *mut c_char); |
| 635 | assert_eq!(data_range.1, unsafe { array.data().add(1) } as *mut c_char); |
| 636 | }); |
| 637 | } |
| 638 | |
| 639 | #[test] |
| 640 | fn view_of_view_with_base_object() { |
nothing calls this directly
no test coverage detected