Skip to content

Commit 77a16d5

Browse files
committed
Add wide char test
1 parent 9e0b9dd commit 77a16d5

2 files changed

Lines changed: 318 additions & 0 deletions

File tree

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
extern crate libcc2rs;
2+
use libcc2rs::*;
3+
use std::cell::RefCell;
4+
use std::collections::BTreeMap;
5+
use std::io::prelude::*;
6+
use std::io::{Read, Seek, Write};
7+
use std::os::fd::AsFd;
8+
use std::rc::{Rc, Weak};
9+
pub fn get_0(s: Ptr<u8>) -> Ptr<u8> {
10+
let s: Value<Ptr<u8>> = Rc::new(RefCell::new(s));
11+
return (*s.borrow()).clone();
12+
}
13+
pub fn get_1(s: Ptr<i32>) -> Ptr<i32> {
14+
let s: Value<Ptr<i32>> = Rc::new(RefCell::new(s));
15+
return (*s.borrow()).clone();
16+
}
17+
pub fn get_2(s: Ptr<u8>) -> Ptr<u8> {
18+
let s: Value<Ptr<u8>> = Rc::new(RefCell::new(s));
19+
return (*s.borrow()).clone();
20+
}
21+
pub fn get_3(s: Ptr<u16>) -> Ptr<u16> {
22+
let s: Value<Ptr<u16>> = Rc::new(RefCell::new(s));
23+
return (*s.borrow()).clone();
24+
}
25+
pub fn get_4(s: Ptr<u32>) -> Ptr<u32> {
26+
let s: Value<Ptr<u32>> = Rc::new(RefCell::new(s));
27+
return (*s.borrow()).clone();
28+
}
29+
pub fn second_5(s: Ptr<Box<[u8]>>) -> u8 {
30+
return ((s.to_strong().as_pointer() as Ptr<u8>)
31+
.offset((1) as isize)
32+
.read());
33+
}
34+
pub fn second_6(s: Ptr<Box<[i32]>>) -> i32 {
35+
return ((s.to_strong().as_pointer() as Ptr<i32>)
36+
.offset((1) as isize)
37+
.read());
38+
}
39+
pub fn second_7(s: Ptr<Box<[u8]>>) -> u8 {
40+
return ((s.to_strong().as_pointer() as Ptr<u8>)
41+
.offset((1) as isize)
42+
.read());
43+
}
44+
pub fn second_8(s: Ptr<Box<[u16]>>) -> u16 {
45+
return ((s.to_strong().as_pointer() as Ptr<u16>)
46+
.offset((1) as isize)
47+
.read());
48+
}
49+
pub fn second_9(s: Ptr<Box<[u32]>>) -> u32 {
50+
return ((s.to_strong().as_pointer() as Ptr<u32>)
51+
.offset((1) as isize)
52+
.read());
53+
}
54+
pub fn main() {
55+
__cpp2rust_init_globals();
56+
std::process::exit(main_0());
57+
}
58+
fn main_0() -> i32 {
59+
let c: Value<Ptr<u8>> = Rc::new(RefCell::new(Ptr::<u8>::from_string_literal(b"A")));
60+
let w: Value<Ptr<i32>> = Rc::new(RefCell::new(Ptr::<i32>::from_string_literal(&[
61+
65 as i32, 258 as i32, 0 as i32,
62+
])));
63+
let b: Value<Ptr<u8>> = Rc::new(RefCell::new(Ptr::<u8>::from_string_literal(&[
64+
196 as u8, 130 as u8, 0 as u8,
65+
])));
66+
let s: Value<Ptr<u16>> = Rc::new(RefCell::new(Ptr::<u16>::from_string_literal(&[
67+
65 as u16, 258 as u16, 0 as u16,
68+
])));
69+
let l: Value<Ptr<u32>> = Rc::new(RefCell::new(Ptr::<u32>::from_string_literal(&[
70+
65 as u32, 258 as u32, 0 as u32,
71+
])));
72+
assert!(((((*c.borrow()).offset((0) as isize).read()) as i32) == (('A' as u8) as i32)));
73+
assert!(
74+
((((*b.borrow()).offset((0) as isize).read()) as i32) == 196)
75+
&& ((((*b.borrow()).offset((1) as isize).read()) as i32) == 130)
76+
);
77+
assert!((((*w.borrow()).offset((1) as isize).read()) == 258));
78+
assert!(((((*s.borrow()).offset((1) as isize).read()) as i32) == 258));
79+
assert!((((*l.borrow()).offset((1) as isize).read()) == 258_u32));
80+
assert!(
81+
((((*w.borrow()).offset((2) as isize).read()) == 0)
82+
&& ((((*s.borrow()).offset((2) as isize).read()) as i32) == 0))
83+
&& (((*l.borrow()).offset((2) as isize).read()) == 0_u32)
84+
);
85+
assert!(
86+
(((({ get_0(Ptr::<u8>::from_string_literal(b"A"),) })
87+
.offset((0) as isize)
88+
.read()) as i32)
89+
== (('A' as u8) as i32))
90+
);
91+
assert!(
92+
((({ get_1(Ptr::<i32>::from_string_literal(&[258 as i32, 0 as i32,]),) })
93+
.offset((0) as isize)
94+
.read())
95+
== 258)
96+
);
97+
assert!(
98+
(((({
99+
get_2(Ptr::<u8>::from_string_literal(&[
100+
196 as u8, 130 as u8, 0 as u8,
101+
]))
102+
})
103+
.offset((0) as isize)
104+
.read()) as i32)
105+
== 196)
106+
);
107+
assert!(
108+
(((({ get_3(Ptr::<u16>::from_string_literal(&[258 as u16, 0 as u16,]),) })
109+
.offset((0) as isize)
110+
.read()) as i32)
111+
== 258)
112+
);
113+
assert!(
114+
((({ get_4(Ptr::<u32>::from_string_literal(&[258 as u32, 0 as u32,]),) })
115+
.offset((0) as isize)
116+
.read())
117+
== 258_u32)
118+
);
119+
assert!(
120+
((({ second_5(Ptr::<Box<[u8]>>::from_string_literal_array(b"AB"),) }) as i32)
121+
== (('B' as u8) as i32))
122+
);
123+
assert!(
124+
(({
125+
second_6(Ptr::<Box<[i32]>>::from_string_literal_array(&[
126+
65 as i32, 258 as i32, 0 as i32,
127+
]))
128+
}) == 258)
129+
);
130+
assert!(
131+
((({
132+
second_7(Ptr::<Box<[u8]>>::from_string_literal_array(&[
133+
196 as u8, 130 as u8, 0 as u8,
134+
]))
135+
}) as i32)
136+
== 130)
137+
);
138+
assert!(
139+
((({
140+
second_8(Ptr::<Box<[u16]>>::from_string_literal_array(&[
141+
65 as u16, 258 as u16, 0 as u16,
142+
]))
143+
}) as i32)
144+
== 258)
145+
);
146+
assert!(
147+
(({
148+
second_9(Ptr::<Box<[u32]>>::from_string_literal_array(&[
149+
65 as u32, 258 as u32, 0 as u32,
150+
]))
151+
}) == 258_u32)
152+
);
153+
let nw: Value<usize> = Rc::new(RefCell::new(
154+
((::std::mem::size_of::<[i32; 4]>() as usize)
155+
.wrapping_div((::std::mem::size_of::<i32>() as usize)) as usize)
156+
.wrapping_sub(1_usize),
157+
));
158+
let nb: Value<usize> = Rc::new(RefCell::new(
159+
((::std::mem::size_of::<[u8; 4]>() as usize)
160+
.wrapping_div((::std::mem::size_of::<u8>() as usize)) as usize)
161+
.wrapping_sub(1_usize),
162+
));
163+
let ns: Value<usize> = Rc::new(RefCell::new(
164+
((::std::mem::size_of::<[u16; 4]>() as usize)
165+
.wrapping_div((::std::mem::size_of::<u16>() as usize)) as usize)
166+
.wrapping_sub(1_usize),
167+
));
168+
let nl: Value<usize> = Rc::new(RefCell::new(
169+
((::std::mem::size_of::<[u32; 4]>() as usize)
170+
.wrapping_div((::std::mem::size_of::<u32>() as usize)) as usize)
171+
.wrapping_sub(1_usize),
172+
));
173+
assert!(
174+
((((*nw.borrow()) == 3_usize) && ((*nb.borrow()) == 3_usize))
175+
&& ((*ns.borrow()) == 3_usize))
176+
&& ((*nl.borrow()) == 3_usize)
177+
);
178+
let pw: Value<Box<[i32]>> = Rc::new(RefCell::new(Box::from([
179+
258 as i32, 0 as i32, 0 as i32, 0 as i32,
180+
])));
181+
let ps: Value<Box<[u16]>> = Rc::new(RefCell::new(Box::from([
182+
258 as u16, 0 as u16, 0 as u16, 0 as u16,
183+
])));
184+
assert!(
185+
(((*pw.borrow())[(0) as usize] == 258) && ((*pw.borrow())[(1) as usize] == 0))
186+
&& ((*pw.borrow())[(3) as usize] == 0)
187+
);
188+
assert!(
189+
((((*ps.borrow())[(0) as usize] as i32) == 258)
190+
&& (((*ps.borrow())[(1) as usize] as i32) == 0))
191+
&& (((*ps.borrow())[(3) as usize] as i32) == 0)
192+
);
193+
let ew: Value<Box<[i32]>> = Rc::new(RefCell::new(Box::from([0 as i32, 0 as i32])));
194+
assert!(((*ew.borrow())[(0) as usize] == 0) && ((*ew.borrow())[(1) as usize] == 0));
195+
return 0;
196+
}
197+
pub fn __cpp2rust_init_globals() {}

‎tests/unit/out/unsafe/wide_char.rs‎

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
extern crate libc;
2+
use libc::*;
3+
extern crate libcc2rs;
4+
use libcc2rs::*;
5+
use std::collections::BTreeMap;
6+
use std::io::{Read, Seek, Write};
7+
use std::os::fd::{AsFd, FromRawFd, IntoRawFd};
8+
use std::rc::Rc;
9+
pub unsafe fn get_0(mut s: *const libc::c_char) -> *const libc::c_char {
10+
return s;
11+
}
12+
pub unsafe fn get_1(mut s: *const i32) -> *const i32 {
13+
return s;
14+
}
15+
pub unsafe fn get_2(mut s: *const u8) -> *const u8 {
16+
return s;
17+
}
18+
pub unsafe fn get_3(mut s: *const u16) -> *const u16 {
19+
return s;
20+
}
21+
pub unsafe fn get_4(mut s: *const u32) -> *const u32 {
22+
return s;
23+
}
24+
pub unsafe fn second_5(s: *const [libc::c_char; 3]) -> libc::c_char {
25+
return (*s)[(1) as usize];
26+
}
27+
pub unsafe fn second_6(s: *const [i32; 3]) -> i32 {
28+
return (*s)[(1) as usize];
29+
}
30+
pub unsafe fn second_7(s: *const [u8; 3]) -> u8 {
31+
return (*s)[(1) as usize];
32+
}
33+
pub unsafe fn second_8(s: *const [u16; 3]) -> u16 {
34+
return (*s)[(1) as usize];
35+
}
36+
pub unsafe fn second_9(s: *const [u32; 3]) -> u32 {
37+
return (*s)[(1) as usize];
38+
}
39+
pub fn main() {
40+
unsafe {
41+
__cpp2rust_init_globals();
42+
std::process::exit(main_0() as i32);
43+
}
44+
}
45+
unsafe fn main_0() -> i32 {
46+
let mut c: *const libc::c_char = c"A".as_ptr();
47+
let mut w: *const i32 = (&[65 as i32, 258 as i32, 0 as i32]).as_ptr();
48+
let mut b: *const u8 = (&[196 as u8, 130 as u8, 0 as u8]).as_ptr();
49+
let mut s: *const u16 = (&[65 as u16, 258 as u16, 0 as u16]).as_ptr();
50+
let mut l: *const u32 = (&[65 as u32, 258 as u32, 0 as u32]).as_ptr();
51+
assert!((((*c.offset((0) as isize)) as i32) == (('A' as libc::c_char) as i32)));
52+
assert!(
53+
(((*b.offset((0) as isize)) as i32) == (196))
54+
&& (((*b.offset((1) as isize)) as i32) == (130))
55+
);
56+
assert!(((*w.offset((1) as isize)) == (258)));
57+
assert!((((*s.offset((1) as isize)) as i32) == (258)));
58+
assert!(((*l.offset((1) as isize)) == (258_u32)));
59+
assert!(
60+
(((*w.offset((2) as isize)) == (0)) && (((*s.offset((2) as isize)) as i32) == (0)))
61+
&& ((*l.offset((2) as isize)) == (0_u32))
62+
);
63+
assert!(
64+
(((*(unsafe { get_0(c"A".as_ptr(),) }).offset((0) as isize)) as i32)
65+
== (('A' as libc::c_char) as i32))
66+
);
67+
assert!(
68+
((*(unsafe { get_1((&[258 as i32, 0 as i32,]).as_ptr(),) }).offset((0) as isize)) == (258))
69+
);
70+
assert!(
71+
(((*(unsafe { get_2((&[196 as u8, 130 as u8, 0 as u8,]).as_ptr(),) }).offset((0) as isize))
72+
as i32)
73+
== (196))
74+
);
75+
assert!(
76+
(((*(unsafe { get_3((&[258 as u16, 0 as u16,]).as_ptr(),) }).offset((0) as isize)) as i32)
77+
== (258))
78+
);
79+
assert!(
80+
((*(unsafe { get_4((&[258 as u32, 0 as u32,]).as_ptr(),) }).offset((0) as isize))
81+
== (258_u32))
82+
);
83+
assert!(
84+
(((unsafe { second_5(&std::mem::transmute(*b"AB\0"),) }) as i32)
85+
== (('B' as libc::c_char) as i32))
86+
);
87+
assert!(((unsafe { second_6(&(&[65 as i32, 258 as i32, 0 as i32,]),) }) == (258)));
88+
assert!((((unsafe { second_7(&(&[196 as u8, 130 as u8, 0 as u8,]),) }) as i32) == (130)));
89+
assert!((((unsafe { second_8(&(&[65 as u16, 258 as u16, 0 as u16,]),) }) as i32) == (258)));
90+
assert!(((unsafe { second_9(&(&[65 as u32, 258 as u32, 0 as u32,]),) }) == (258_u32)));
91+
let nw: usize = ((::std::mem::size_of::<[i32; 4]>() as usize)
92+
.wrapping_div((::std::mem::size_of::<i32>() as usize)) as usize)
93+
.wrapping_sub(1_usize);
94+
let nb: usize = ((::std::mem::size_of::<[u8; 4]>() as usize)
95+
.wrapping_div((::std::mem::size_of::<u8>() as usize)) as usize)
96+
.wrapping_sub(1_usize);
97+
let ns: usize = ((::std::mem::size_of::<[u16; 4]>() as usize)
98+
.wrapping_div((::std::mem::size_of::<u16>() as usize)) as usize)
99+
.wrapping_sub(1_usize);
100+
let nl: usize = ((::std::mem::size_of::<[u32; 4]>() as usize)
101+
.wrapping_div((::std::mem::size_of::<u32>() as usize)) as usize)
102+
.wrapping_sub(1_usize);
103+
assert!(
104+
((((nw) == (3_usize)) && ((nb) == (3_usize))) && ((ns) == (3_usize)))
105+
&& ((nl) == (3_usize))
106+
);
107+
let pw: [i32; 4] = [258 as i32, 0 as i32, 0 as i32, 0 as i32];
108+
let ps: [u16; 4] = [258 as u16, 0 as u16, 0 as u16, 0 as u16];
109+
assert!(
110+
(((pw[(0) as usize]) == (258)) && ((pw[(1) as usize]) == (0)))
111+
&& ((pw[(3) as usize]) == (0))
112+
);
113+
assert!(
114+
(((ps[(0) as usize] as i32) == (258)) && ((ps[(1) as usize] as i32) == (0)))
115+
&& ((ps[(3) as usize] as i32) == (0))
116+
);
117+
let ew: [i32; 2] = [0 as i32, 0 as i32];
118+
assert!(((ew[(0) as usize]) == (0)) && ((ew[(1) as usize]) == (0)));
119+
return 0;
120+
}
121+
pub unsafe fn __cpp2rust_init_globals() {}

0 commit comments

Comments
 (0)