use std::pin::Pin;
#[test]
fn box_into_pin() {
use super::pinned::IntoPin;
let mut b = Box::new(1);
{
let pin: Pin<&mut Box<u32>> = (&mut b).into_pin();
}
{
let pin: Pin<&mut u32> = (&mut b).into_pin();
}
{
let pin: Pin<&u32> = (&b).into_pin();
}
{
let pin: Pin<&u32> = (&mut b).into_pin();
}
let pinbox: Pin<Box<u32>> = b.into_pin();
}
#[test]
fn vec_into_pin() {
use super::pinned::IntoPin;
let mut v = vec![1, 2, 3, 4];
{
let mut pin: Pin<&mut Vec<u32>> = (&mut v).into_pin();
pin[0] = 0;
}
{
let mut pin: Pin<&mut [u32]> = (&mut v).into_pin();
pin[1] = 0;
}
{
let pin: Pin<&[u32]> = (&v).into_pin();
assert_eq!(pin[..2], [0, 0][..]);
}
{
let pin: Pin<&[u32]> = (&mut v).into_pin();
assert_eq!(pin[..3], [0, 0, 3][..]);
}
}
#[test]
fn test_arbitrary_into_pin() {
use super::pinned::IntoPin;
let mut n: u64 = 9;
{
let mut pin: Pin<&mut u64> = (&mut n).into_pin();
*pin = 0;
}
assert_eq!(n, 0);
}
#[test]
fn pin_into_pin() {
use super::pinned::IntoPin;
fn quark<'a, T: IntoPin<&'a mut u32>>(x: T) {
let mut pin = x.into_pin();
*pin = 0;
}
{
let mut n = 9;
let p: Pin<&mut u32> = (&mut n).into_pin();
quark(p);
assert_eq!(n, 0);
}
{
let mut n = 9;
quark(&mut n);
assert_eq!(n, 0);
}
}