Skip to content

Commit d4668b8

Browse files
committed
Update tests
1 parent feaaa9f commit d4668b8

3 files changed

Lines changed: 292 additions & 0 deletions

File tree

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
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 main() {
10+
std::process::exit(main_0());
11+
}
12+
fn main_0() -> i32 {
13+
let arr: Value<Box<[i32]>> = Rc::new(RefCell::new(Box::new([10, 11, 12, 13, 14, 15, 16, 17])));
14+
let p: Value<Ptr<i32>> = Rc::new(RefCell::new((arr.as_pointer() as Ptr<i32>)));
15+
let q: Value<Ptr<i32>> = Rc::new(RefCell::new((*p.borrow()).offset((1) as isize)));
16+
assert!((((*q.borrow()).read()) == 11));
17+
let r: Value<Ptr<i32>> = Rc::new(RefCell::new((*p.borrow()).offset((3) as isize)));
18+
assert!((((*r.borrow()).read()) == 13));
19+
let s: Value<Ptr<i32>> = Rc::new(RefCell::new((*r.borrow()).offset(-((2) as isize))));
20+
assert!((((*s.borrow()).read()) == 11));
21+
let diff: Value<i64> = Rc::new(RefCell::new(
22+
((*r.borrow()).clone() - (*p.borrow()).clone()) as i64,
23+
));
24+
assert!(((*diff.borrow()) == 3_i64));
25+
let idx: Value<u64> = Rc::new(RefCell::new(
26+
(((((*r.borrow()).clone() - (*p.borrow()).clone()) as i64) as i64) as u64),
27+
));
28+
assert!(((*idx.borrow()) == 3_u64));
29+
let q2: Value<Ptr<i32>> = Rc::new(RefCell::new((*p.borrow()).clone()));
30+
(*q2.borrow_mut()).prefix_inc();
31+
assert!((((*q2.borrow()).read()) == 11));
32+
(*q2.borrow_mut()).postfix_inc();
33+
assert!((((*q2.borrow()).read()) == 12));
34+
(*q2.borrow_mut()).prefix_dec();
35+
assert!((((*q2.borrow()).read()) == 11));
36+
(*q2.borrow_mut()).postfix_dec();
37+
assert!((((*q2.borrow()).read()) == 10));
38+
assert!({
39+
let _lhs = (*q2.borrow()).clone();
40+
_lhs == (*p.borrow()).clone()
41+
});
42+
let q3: Value<Ptr<i32>> = Rc::new(RefCell::new((*p.borrow()).clone()));
43+
(*q3.borrow_mut()) += 4;
44+
assert!((((*q3.borrow()).read()) == 14));
45+
(*q3.borrow_mut()) -= 2;
46+
assert!((((*q3.borrow()).read()) == 12));
47+
let step: Value<u64> = Rc::new(RefCell::new(2_u64));
48+
let q4: Value<Ptr<i32>> = Rc::new(RefCell::new(
49+
(*p.borrow()).offset((*step.borrow()) as isize),
50+
));
51+
assert!((((*q4.borrow()).read()) == 12));
52+
let v: Value<i32> = Rc::new(RefCell::new(((*p.borrow()).offset((3) as isize).read())));
53+
assert!(((*v.borrow()) == 13));
54+
let v2: Value<i32> = Rc::new(RefCell::new((((*p.borrow()).offset((4) as isize)).read())));
55+
assert!(((*v2.borrow()) == 14));
56+
((*p.borrow()).offset((5) as isize)).write(99);
57+
assert!((((*p.borrow()).offset((5) as isize).read()) == 99));
58+
assert!(((*arr.borrow())[(5) as usize] == 99));
59+
let end: Value<Ptr<i32>> = Rc::new(RefCell::new((*p.borrow()).offset((8) as isize)));
60+
let sum: Value<i32> = Rc::new(RefCell::new(0));
61+
let it: Value<Ptr<i32>> = Rc::new(RefCell::new((*p.borrow()).clone()));
62+
'loop_: while {
63+
let _lhs = (*it.borrow()).clone();
64+
_lhs != (*end.borrow()).clone()
65+
} {
66+
let __rhs = ((*it.borrow()).read());
67+
(*sum.borrow_mut()) += __rhs;
68+
(*it.borrow_mut()).prefix_inc();
69+
}
70+
assert!(((*sum.borrow()) == (((((((10 + 11) + 12) + 13) + 14) + 99) + 16) + 17)));
71+
let bytes: Value<Box<[u8]>> = Rc::new(RefCell::new(Box::new([
72+
0_u8, 1_u8, 2_u8, 3_u8, 4_u8, 5_u8, 6_u8, 7_u8,
73+
])));
74+
let bp: Value<Ptr<u8>> = Rc::new(RefCell::new((bytes.as_pointer() as Ptr<u8>)));
75+
let bq: Value<Ptr<u8>> = Rc::new(RefCell::new((*bp.borrow()).offset((4) as isize)));
76+
assert!(((((*bq.borrow()).read()) as i32) == 4));
77+
let bdiff: Value<i64> = Rc::new(RefCell::new(
78+
((*bq.borrow()).clone() - (*bp.borrow()).clone()) as i64,
79+
));
80+
assert!(((*bdiff.borrow()) == 4_i64));
81+
let cp: Value<Ptr<i32>> = Rc::new(RefCell::new((arr.as_pointer() as Ptr<i32>)));
82+
let cq: Value<Ptr<i32>> = Rc::new(RefCell::new((*cp.borrow()).offset((2) as isize)));
83+
assert!((((*cq.borrow()).read()) == 12));
84+
let cdiff: Value<i64> = Rc::new(RefCell::new(
85+
((*cq.borrow()).clone() - (*cp.borrow()).clone()) as i64,
86+
));
87+
assert!(((*cdiff.borrow()) == 2_i64));
88+
let n: Value<u64> = Rc::new(RefCell::new(3_u64));
89+
let q5: Value<Ptr<i32>> = Rc::new(RefCell::new(
90+
(arr.as_pointer() as Ptr<i32>).offset((*n.borrow()) as isize),
91+
));
92+
assert!((((*q5.borrow()).read()) == 13));
93+
let q6: Value<Ptr<i32>> = Rc::new(RefCell::new(
94+
((arr.as_pointer() as Ptr<i32>).offset((*n.borrow()) as isize)),
95+
));
96+
assert!({
97+
let _lhs = (*q6.borrow()).clone();
98+
_lhs == (*q5.borrow()).clone()
99+
});
100+
let matrix: Value<Box<[Value<Box<[i32]>>]>> = Rc::new(RefCell::new(Box::new([
101+
Rc::new(RefCell::new(Box::new([0, 1, 2, 3]))),
102+
Rc::new(RefCell::new(Box::new([4, 5, 6, 7]))),
103+
Rc::new(RefCell::new(Box::new([8, 9, 10, 11]))),
104+
])));
105+
let row1: Value<Ptr<i32>> = Rc::new(RefCell::new(
106+
((((matrix.as_pointer() as Ptr<Value<Box<[i32]>>>)
107+
.offset(1 as isize)
108+
.read()
109+
.as_pointer()) as Ptr<i32>)
110+
.offset(0 as isize)),
111+
));
112+
assert!((((*row1.borrow()).offset((2) as isize).read()) == 6));
113+
let back: Value<Ptr<i32>> = Rc::new(RefCell::new((*end.borrow()).offset(-((1) as isize))));
114+
assert!((((*back.borrow()).read()) == 17));
115+
return 0;
116+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
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 fn main() {
10+
unsafe {
11+
std::process::exit(main_0() as i32);
12+
}
13+
}
14+
unsafe fn main_0() -> i32 {
15+
let mut arr: [i32; 8] = [10, 11, 12, 13, 14, 15, 16, 17];
16+
let mut p: *mut i32 = arr.as_mut_ptr();
17+
let mut q: *mut i32 = p.offset((1) as isize);
18+
assert!(((*q) == (11)));
19+
let mut r: *mut i32 = p.offset((3) as isize);
20+
assert!(((*r) == (13)));
21+
let mut s: *mut i32 = r.offset(-((2) as isize));
22+
assert!(((*s) == (11)));
23+
let mut diff: i64 = ((r as usize - p as usize) / ::std::mem::size_of::<i32>()) as i64;
24+
assert!(((diff) == (3_i64)));
25+
let mut idx: u64 =
26+
(((((r as usize - p as usize) / ::std::mem::size_of::<i32>()) as i64) as i64) as u64);
27+
assert!(((idx) == (3_u64)));
28+
let mut q2: *mut i32 = p;
29+
q2.prefix_inc();
30+
assert!(((*q2) == (11)));
31+
q2.postfix_inc();
32+
assert!(((*q2) == (12)));
33+
q2.prefix_dec();
34+
assert!(((*q2) == (11)));
35+
q2.postfix_dec();
36+
assert!(((*q2) == (10)));
37+
assert!(((q2) == (p)));
38+
let mut q3: *mut i32 = p;
39+
q3 = (q3).wrapping_add(4 as i32 as usize);
40+
assert!(((*q3) == (14)));
41+
q3 = (q3).wrapping_sub(2 as i32 as usize);
42+
assert!(((*q3) == (12)));
43+
let mut step: u64 = 2_u64;
44+
let mut q4: *mut i32 = p.offset((step) as isize);
45+
assert!(((*q4) == (12)));
46+
let mut v: i32 = (*p.offset((3) as isize));
47+
assert!(((v) == (13)));
48+
let mut v2: i32 = (*(p.offset((4) as isize)));
49+
assert!(((v2) == (14)));
50+
(*(p.offset((5) as isize))) = 99;
51+
assert!(((*p.offset((5) as isize)) == (99)));
52+
assert!(((arr[(5) as usize]) == (99)));
53+
let mut end: *mut i32 = p.offset((8) as isize);
54+
let mut sum: i32 = 0;
55+
let mut it: *mut i32 = p;
56+
'loop_: while ((it) != (end)) {
57+
sum += (*it);
58+
it.prefix_inc();
59+
}
60+
assert!(((sum) == ((((((((10) + (11)) + (12)) + (13)) + (14)) + (99)) + (16)) + (17))));
61+
let mut bytes: [u8; 8] = [0_u8, 1_u8, 2_u8, 3_u8, 4_u8, 5_u8, 6_u8, 7_u8];
62+
let mut bp: *mut u8 = bytes.as_mut_ptr();
63+
let mut bq: *mut u8 = bp.offset((4) as isize);
64+
assert!((((*bq) as i32) == (4)));
65+
let mut bdiff: i64 = ((bq as usize - bp as usize) / ::std::mem::size_of::<u8>()) as i64;
66+
assert!(((bdiff) == (4_i64)));
67+
let mut cp: *const i32 = arr.as_mut_ptr().cast_const();
68+
let mut cq: *const i32 = cp.offset((2) as isize);
69+
assert!(((*cq) == (12)));
70+
let mut cdiff: i64 = ((cq as usize - cp as usize) / ::std::mem::size_of::<i32>()) as i64;
71+
assert!(((cdiff) == (2_i64)));
72+
let mut n: u64 = 3_u64;
73+
let mut q5: *mut i32 = arr.as_mut_ptr().offset((n) as isize);
74+
assert!(((*q5) == (13)));
75+
let mut q6: *mut i32 = (&mut arr[(n) as usize] as *mut i32);
76+
assert!(((q6) == (q5)));
77+
let mut matrix: [[i32; 4]; 3] = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]];
78+
let mut row1: *mut i32 = (&mut matrix[(1) as usize][(0) as usize] as *mut i32);
79+
assert!(((*row1.offset((2) as isize)) == (6)));
80+
let mut back: *mut i32 = end.offset(-((1) as isize));
81+
assert!(((*back) == (17)));
82+
return 0;
83+
}

tests/unit/pointer_usize_arith.cpp

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#include <cassert>
2+
#include <cstddef>
3+
4+
int main() {
5+
int arr[8] = {10, 11, 12, 13, 14, 15, 16, 17};
6+
int *p = arr;
7+
8+
int *q = p + 1;
9+
assert(*q == 11);
10+
11+
int *r = p + 3;
12+
assert(*r == 13);
13+
14+
int *s = r - 2;
15+
assert(*s == 11);
16+
17+
ptrdiff_t diff = r - p;
18+
assert(diff == 3);
19+
20+
size_t idx = (size_t)(r - p);
21+
assert(idx == 3);
22+
23+
int *q2 = p;
24+
++q2;
25+
assert(*q2 == 11);
26+
27+
q2++;
28+
assert(*q2 == 12);
29+
30+
--q2;
31+
assert(*q2 == 11);
32+
33+
q2--;
34+
assert(*q2 == 10);
35+
assert(q2 == p);
36+
37+
int *q3 = p;
38+
q3 += 4;
39+
assert(*q3 == 14);
40+
q3 -= 2;
41+
assert(*q3 == 12);
42+
43+
size_t step = 2;
44+
int *q4 = p + step;
45+
assert(*q4 == 12);
46+
47+
int v = p[3];
48+
assert(v == 13);
49+
50+
int v2 = *(p + 4);
51+
assert(v2 == 14);
52+
53+
*(p + 5) = 99;
54+
assert(p[5] == 99);
55+
assert(arr[5] == 99);
56+
57+
int *end = p + 8;
58+
int sum = 0;
59+
for (int *it = p; it != end; ++it) {
60+
sum += *it;
61+
}
62+
assert(sum == 10 + 11 + 12 + 13 + 14 + 99 + 16 + 17);
63+
64+
unsigned char bytes[8] = {0, 1, 2, 3, 4, 5, 6, 7};
65+
unsigned char *bp = bytes;
66+
unsigned char *bq = bp + 4;
67+
assert(*bq == 4);
68+
69+
ptrdiff_t bdiff = bq - bp;
70+
assert(bdiff == 4);
71+
72+
const int *cp = arr;
73+
const int *cq = cp + 2;
74+
assert(*cq == 12);
75+
ptrdiff_t cdiff = cq - cp;
76+
assert(cdiff == 2);
77+
78+
size_t n = 3;
79+
int *q5 = arr + n;
80+
assert(*q5 == 13);
81+
82+
int *q6 = &arr[n];
83+
assert(q6 == q5);
84+
85+
int matrix[3][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}};
86+
int *row1 = &matrix[1][0];
87+
assert(row1[2] == 6);
88+
89+
int *back = end - 1;
90+
assert(*back == 17);
91+
92+
return 0;
93+
}

0 commit comments

Comments
 (0)