Skip to content

Commit f52bc69

Browse files
committed
Update tests
1 parent 2f71345 commit f52bc69

3 files changed

Lines changed: 78 additions & 143 deletions

File tree

tests/unit/implicit_autoref.cpp

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,29 @@
11
#include <cassert>
2-
3-
struct Counter {
4-
int value = 0;
5-
void bump() { ++value; }
6-
int get() const { return value; }
7-
};
2+
#include <vector>
83

94
struct Holder {
10-
Counter c;
11-
Counter &ref;
12-
Holder(Counter &c) : ref(c) {}
5+
std::vector<int> v;
136
};
147

15-
void via_ref(Counter &r) { r.bump(); }
16-
178
int main() {
18-
Counter c;
19-
Counter *p = &c;
20-
(*p).bump();
21-
p->bump();
22-
23-
Counter arr[2];
24-
arr[0].bump();
25-
arr[1].bump();
26-
27-
Holder h(c);
28-
h.c.bump();
29-
h.ref.bump();
30-
31-
via_ref(c);
32-
33-
int sum = (*p).get() + h.c.get() + h.ref.get() + arr[0].get() + arr[1].get();
34-
assert(sum == 11);
9+
std::vector<int> v;
10+
v.push_back(10);
11+
v.push_back(20);
12+
13+
std::vector<int> *p = &v;
14+
int a = (*p)[0];
15+
(*p)[1] = 30;
16+
17+
Holder h;
18+
h.v.push_back(40);
19+
h.v.push_back(50);
20+
Holder *hp = &h;
21+
int b = (*hp).v[0];
22+
(*hp).v[1] = 60;
23+
24+
assert(a == 10);
25+
assert((*p)[1] == 30);
26+
assert(b == 40);
27+
assert((*hp).v[1] == 60);
3528
return 0;
3629
}

tests/unit/out/refcount/implicit_autoref.rs

Lines changed: 39 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -7,88 +7,59 @@ use std::io::{Read, Seek, Write};
77
use std::os::fd::AsFd;
88
use std::rc::{Rc, Weak};
99
#[derive(Default)]
10-
pub struct Counter {
11-
pub value: Value<i32>,
12-
}
13-
impl Counter {
14-
pub fn bump(&self) {
15-
(*self.value.borrow_mut()).prefix_inc();
16-
}
17-
pub fn get(&self) -> i32 {
18-
return (*self.value.borrow());
19-
}
20-
}
21-
impl Clone for Counter {
22-
fn clone(&self) -> Self {
23-
let mut this = Self {
24-
value: Rc::new(RefCell::new((*self.value.borrow()))),
25-
};
26-
this
27-
}
28-
}
29-
impl ByteRepr for Counter {}
30-
#[derive(Default)]
3110
pub struct Holder {
32-
pub c: Value<Counter>,
33-
pub ref_: Ptr<Counter>,
34-
}
35-
impl Holder {
36-
pub fn Holder(c: Ptr<Counter>) -> Self {
37-
let mut this = Self {
38-
c: Rc::new(RefCell::new(<Counter>::default())),
39-
ref_: (c).clone(),
40-
};
41-
this
42-
}
11+
pub v: Value<Vec<i32>>,
4312
}
4413
impl Clone for Holder {
4514
fn clone(&self) -> Self {
4615
let mut this = Self {
47-
c: Rc::new(RefCell::new((*self.c.borrow()).clone())),
48-
ref_: (self.ref_).clone(),
16+
v: Rc::new(RefCell::new((*self.v.borrow()).clone())),
4917
};
5018
this
5119
}
5220
}
5321
impl ByteRepr for Holder {}
54-
pub fn via_ref_0(r: Ptr<Counter>) {
55-
({ (*r.upgrade().deref()).bump() });
56-
}
5722
pub fn main() {
5823
std::process::exit(main_0());
5924
}
6025
fn main_0() -> i32 {
61-
let c: Value<Counter> = Rc::new(RefCell::new(<Counter>::default()));
62-
let p: Value<Ptr<Counter>> = Rc::new(RefCell::new((c.as_pointer())));
63-
({ (*(*p.borrow()).upgrade().deref()).bump() });
64-
({ (*(*p.borrow()).upgrade().deref()).bump() });
65-
let arr: Value<Box<[Counter]>> = Rc::new(RefCell::new(
66-
(0..2)
67-
.map(|_| <Counter>::default())
68-
.collect::<Box<[Counter]>>(),
26+
let v: Value<Vec<i32>> = Rc::new(RefCell::new(Vec::new()));
27+
(*v.borrow_mut()).push(10);
28+
(*v.borrow_mut()).push(20);
29+
let p: Value<Ptr<Vec<i32>>> = Rc::new(RefCell::new((v.as_pointer())));
30+
let a: Value<i32> = Rc::new(RefCell::new(
31+
((((*p.borrow()).to_strong().as_pointer()) as Ptr<i32>)
32+
.offset(0_u64 as isize)
33+
.read()),
6934
));
70-
({ (*arr.borrow())[(0) as usize].bump() });
71-
({ (*arr.borrow())[(1) as usize].bump() });
72-
let h: Value<Holder> = Rc::new(RefCell::new(Holder::Holder(c.as_pointer())));
73-
({ (*(*h.borrow()).c.borrow()).bump() });
74-
({ (*(*h.borrow()).ref_.upgrade().deref()).bump() });
75-
({
76-
let _r: Ptr<Counter> = c.as_pointer();
77-
via_ref_0(_r)
78-
});
79-
let sum: Value<i32> = Rc::new(RefCell::new({
80-
let _lhs = {
81-
let _lhs = {
82-
let _lhs = {
83-
let _lhs = ({ (*(*p.borrow()).upgrade().deref()).get() });
84-
_lhs + ({ (*(*h.borrow()).c.borrow()).get() })
85-
};
86-
_lhs + ({ (*(*h.borrow()).ref_.upgrade().deref()).get() })
87-
};
88-
_lhs + ({ (*arr.borrow())[(0) as usize].get() })
89-
};
90-
_lhs + ({ (*arr.borrow())[(1) as usize].get() })
91-
}));
92-
println!("{}", (*sum.borrow()));
35+
(((*p.borrow()).to_strong().as_pointer()) as Ptr<i32>)
36+
.offset(1_u64 as isize)
37+
.write(30);
38+
let h: Value<Holder> = Rc::new(RefCell::new(<Holder>::default()));
39+
(*(*h.borrow()).v.borrow_mut()).push(40);
40+
(*(*h.borrow()).v.borrow_mut()).push(50);
41+
let hp: Value<Ptr<Holder>> = Rc::new(RefCell::new((h.as_pointer())));
42+
let b: Value<i32> = Rc::new(RefCell::new(
43+
(((*(*hp.borrow()).upgrade().deref()).v.as_pointer() as Ptr<i32>)
44+
.offset(0_u64 as isize)
45+
.read()),
46+
));
47+
((*(*hp.borrow()).upgrade().deref()).v.as_pointer() as Ptr<i32>)
48+
.offset(1_u64 as isize)
49+
.write(60);
50+
assert!(((*a.borrow()) == 10));
51+
assert!(
52+
(((((*p.borrow()).to_strong().as_pointer()) as Ptr<i32>)
53+
.offset(1_u64 as isize)
54+
.read())
55+
== 30)
56+
);
57+
assert!(((*b.borrow()) == 40));
58+
assert!(
59+
((((*(*hp.borrow()).upgrade().deref()).v.as_pointer() as Ptr<i32>)
60+
.offset(1_u64 as isize)
61+
.read())
62+
== 60)
63+
);
9364
return 0;
9465
}

tests/unit/out/unsafe/implicit_autoref.rs

Lines changed: 18 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,60 +7,31 @@ use std::io::{Read, Seek, Write};
77
use std::os::fd::{AsFd, FromRawFd, IntoRawFd};
88
use std::rc::Rc;
99
#[repr(C)]
10-
#[derive(Copy, Clone, Default)]
11-
pub struct Counter {
12-
pub value: i32,
13-
}
14-
impl Counter {
15-
pub unsafe fn bump(&mut self) {
16-
self.value.prefix_inc();
17-
}
18-
pub unsafe fn get(&self) -> i32 {
19-
return self.value;
20-
}
21-
}
22-
#[repr(C)]
23-
#[derive(Copy, Clone, Default)]
10+
#[derive(Clone, Default)]
2411
pub struct Holder {
25-
pub c: Counter,
26-
pub ref_: *mut Counter,
27-
}
28-
impl Holder {
29-
pub unsafe fn Holder(c: *mut Counter) -> Self {
30-
let mut this = Self {
31-
c: <Counter>::default(),
32-
ref_: c,
33-
};
34-
this
35-
}
36-
}
37-
pub unsafe fn via_ref_0(r: *mut Counter) {
38-
(unsafe { (*r).bump() });
12+
pub v: Vec<i32>,
3913
}
4014
pub fn main() {
4115
unsafe {
4216
std::process::exit(main_0() as i32);
4317
}
4418
}
4519
unsafe fn main_0() -> i32 {
46-
let mut c: Counter = <Counter>::default();
47-
let mut p: *mut Counter = (&mut c as *mut Counter);
48-
(unsafe { (*p).bump() });
49-
(unsafe { (*p).bump() });
50-
let mut arr: [Counter; 2] = [<Counter>::default(); 2];
51-
(unsafe { arr[(0) as usize].bump() });
52-
(unsafe { arr[(1) as usize].bump() });
53-
let mut h: Holder = Holder::Holder(&mut c as *mut Counter);
54-
(unsafe { h.c.bump() });
55-
(unsafe { (*h.ref_).bump() });
56-
(unsafe {
57-
let _r: *mut Counter = &mut c as *mut Counter;
58-
via_ref_0(_r)
59-
});
60-
let mut sum: i32 = (((((unsafe { (*p).get() }) + (unsafe { h.c.get() }))
61-
+ (unsafe { (*h.ref_).get() }))
62-
+ (unsafe { arr[(0) as usize].get() }))
63-
+ (unsafe { arr[(1) as usize].get() }));
64-
printf(b"%d\n\0".as_ptr() as *const i8, sum);
20+
let mut v: Vec<i32> = Vec::new();
21+
v.push(10);
22+
v.push(20);
23+
let mut p: *mut Vec<i32> = (&mut v as *mut Vec<i32>);
24+
let mut a: i32 = (&mut (*p))[(0_u64) as usize];
25+
(&mut (*p))[(1_u64) as usize] = 30;
26+
let mut h: Holder = <Holder>::default();
27+
h.v.push(40);
28+
h.v.push(50);
29+
let mut hp: *mut Holder = (&mut h as *mut Holder);
30+
let mut b: i32 = (&mut (*hp)).v[(0_u64) as usize];
31+
(&mut (*hp)).v[(1_u64) as usize] = 60;
32+
assert!(((a) == (10)));
33+
assert!((((&mut (*p))[(1_u64) as usize]) == (30)));
34+
assert!(((b) == (40)));
35+
assert!((((&mut (*hp)).v[(1_u64) as usize]) == (60)));
6536
return 0;
6637
}

0 commit comments

Comments
 (0)