1 // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
20 let mut p = Pair {fst: 10, snd: 20};
21 let pptr: *mut Pair = &mut p;
22 let iptr: *mut isize = pptr as *mut isize;
23 assert_eq!(*iptr, 10);
25 assert_eq!(*iptr, 30);
26 assert_eq!(p.fst, 30);
28 *pptr = Pair {fst: 50, snd: 60};
29 assert_eq!(*iptr, 50);
30 assert_eq!(p.fst, 50);
31 assert_eq!(p.snd, 60);
33 let v0 = vec![32000u16, 32001u16, 32002u16];
34 let mut v1 = vec![0u16, 0u16, 0u16];
36 copy(v0.as_ptr().offset(1), v1.as_mut_ptr().offset(1), 1);
37 assert!((v1[0] == 0u16 &&
40 copy(v0.as_ptr().offset(2), v1.as_mut_ptr(), 1);
41 assert!((v1[0] == 32002u16 &&
44 copy(v0.as_ptr(), v1.as_mut_ptr().offset(2), 1);
45 assert!((v1[0] == 32002u16 &&
53 let p: *const isize = null();
56 let q = unsafe { p.offset(1) };
57 assert!(!q.is_null());
59 let mp: *mut isize = null_mut();
60 assert!(mp.is_null());
62 let mq = unsafe { mp.offset(1) };
63 assert!(!mq.is_null());
69 let p: *const isize = null();
70 assert_eq!(p.as_ref(), None);
72 let q: *const isize = &2;
73 assert_eq!(q.as_ref().unwrap(), &2);
75 let p: *mut isize = null_mut();
76 assert_eq!(p.as_ref(), None);
78 let q: *mut isize = &mut 2;
79 assert_eq!(q.as_ref().unwrap(), &2);
84 let p = &u as *const isize;
85 assert_eq!(p.as_ref().unwrap(), &2);
93 let p: *mut isize = null_mut();
94 assert!(p.as_mut() == None);
96 let q: *mut isize = &mut 2;
97 assert!(q.as_mut().unwrap() == &mut 2);
102 let p = &mut u as *mut isize;
103 assert!(p.as_mut().unwrap() == &mut 2);
109 fn test_ptr_addition() {
111 let xs = vec![5; 16];
112 let mut ptr = xs.as_ptr();
113 let end = ptr.offset(16);
121 let mut m_ptr = xs_mut.as_mut_ptr();
122 let m_end = m_ptr.offset(16);
124 while m_ptr < m_end {
126 m_ptr = m_ptr.offset(1);
129 assert!(xs_mut == vec![10; 16]);
134 fn test_ptr_subtraction() {
136 let xs = vec![0,1,2,3,4,5,6,7,8,9];
138 let ptr = xs.as_ptr();
141 assert_eq!(*(ptr.offset(idx as isize)), idx as isize);
146 let m_start = xs_mut.as_mut_ptr();
147 let mut m_ptr = m_start.offset(9);
149 while m_ptr >= m_start {
151 m_ptr = m_ptr.offset(-1);
154 assert_eq!(xs_mut, [0,2,4,6,8,10,12,14,16,18]);
159 fn test_set_memory() {
160 let mut xs = [0u8; 20];
161 let ptr = xs.as_mut_ptr();
162 unsafe { write_bytes(ptr, 5u8, xs.len()); }
163 assert!(xs == [5u8; 20]);
167 fn test_unsized_unique() {
168 let xs: &mut [i32] = &mut [1, 2, 3];
169 let ptr = unsafe { Unique::new(xs as *mut [i32]) };
170 let ys = unsafe { &mut **ptr };
171 let zs: &mut [i32] = &mut [1, 2, 3];