Skip to content

Commit e88a390

Browse files
committed
Update tests
1 parent 360a2a5 commit e88a390

3 files changed

Lines changed: 91 additions & 0 deletions

File tree

‎tests/unit/default_function_arguments.cpp‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ int foo(int a, int b = 10) { return a + b; }
44

55
bool baz(int *a, int *b = nullptr) { return a == b; }
66

7+
struct Bar {
8+
int v;
9+
Bar(int v = 1) : v(v) {}
10+
};
11+
712
int main() {
813
assert(foo(1) == 11);
914
assert(foo(1, 2) == 3);
@@ -12,5 +17,13 @@ int main() {
1217
assert(baz(&a) == false);
1318
assert(baz(&a, &a) == true);
1419

20+
Bar b;
21+
assert(b.v == 1);
22+
assert(Bar(2).v == 2);
23+
24+
Bar arr[3] = {};
25+
assert(arr[0].v == 1);
26+
assert(arr[2].v == 1);
27+
1528
return 0;
1629
}

‎tests/unit/out/refcount/default_function_arguments.rs‎

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,47 @@ pub fn baz_1(a: Ptr<i32>, b: Option<Ptr<i32>>) -> bool {
1919
_lhs == (*b.borrow()).clone()
2020
};
2121
}
22+
#[derive()]
23+
pub struct Bar {
24+
pub v: Value<i32>,
25+
}
26+
impl Bar {
27+
pub fn Bar(v: Option<i32>) -> Self {
28+
let v: Value<i32> = Rc::new(RefCell::new(v.unwrap_or(1)));
29+
let __this: Value<Bar> = Rc::new(RefCell::new(Self {
30+
v: Rc::new(RefCell::new((*v.borrow()))),
31+
}));
32+
let this: Ptr<Bar> = __this.as_pointer();
33+
Rc::try_unwrap(__this).ok().unwrap().into_inner()
34+
}
35+
}
36+
impl Clone for Bar {
37+
fn clone(&self) -> Self {
38+
let __this: Value<Bar> = Rc::new(RefCell::new(Self {
39+
v: Rc::new(RefCell::new((*self.v.borrow()))),
40+
}));
41+
let this: Ptr<Bar> = __this.as_pointer();
42+
Rc::try_unwrap(__this).ok().unwrap().into_inner()
43+
}
44+
}
45+
impl Default for Bar {
46+
fn default() -> Self {
47+
{ Bar::Bar(None) }
48+
}
49+
}
50+
impl ByteRepr for Bar {
51+
fn byte_size() -> usize {
52+
4
53+
}
54+
fn to_bytes(&self, buf: &mut [u8]) {
55+
(*self.v.borrow()).to_bytes(&mut buf[0..4]);
56+
}
57+
fn from_bytes(buf: &[u8]) -> Self {
58+
Self {
59+
v: Rc::new(RefCell::new(<i32>::from_bytes(&buf[0..4]))),
60+
}
61+
}
62+
}
2263
pub fn main() {
2364
std::process::exit(main_0());
2465
}
@@ -35,5 +76,15 @@ fn main_0() -> i32 {
3576
}) as i32)
3677
== (true as i32))
3778
);
79+
let b: Value<Bar> = Rc::new(RefCell::new(Bar::Bar({ Some() })));
80+
assert!(((*(*b.borrow()).v.borrow()) == 1));
81+
assert!(((*Bar::Bar({ Some(2) },).v.borrow()) == 2));
82+
let arr: Value<Box<[Bar]>> = Rc::new(RefCell::new(Box::new([
83+
Bar::Bar({ Some() }),
84+
Bar::Bar({ Some() }),
85+
Bar::Bar({ Some() }),
86+
])));
87+
assert!(((*(*arr.borrow())[(0) as usize].v.borrow()) == 1));
88+
assert!(((*(*arr.borrow())[(2) as usize].v.borrow()) == 1));
3889
return 0;
3990
}

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,23 @@ pub unsafe fn baz_1(mut a: *mut i32, mut b: Option<*mut i32>) -> bool {
1414
let mut b: *mut i32 = b.unwrap_or(std::ptr::null_mut());
1515
return ((a) == (b));
1616
}
17+
#[repr(C)]
18+
#[derive(Copy, Clone)]
19+
pub struct Bar {
20+
pub v: i32,
21+
}
22+
impl Bar {
23+
pub unsafe fn Bar(mut v: Option<i32>) -> Self {
24+
let mut v: i32 = v.unwrap_or(1);
25+
let mut this = Self { v: v };
26+
this
27+
}
28+
}
29+
impl Default for Bar {
30+
fn default() -> Self {
31+
unsafe { Bar::Bar(None) }
32+
}
33+
}
1734
pub fn main() {
1835
unsafe {
1936
std::process::exit(main_0() as i32);
@@ -32,5 +49,15 @@ unsafe fn main_0() -> i32 {
3249
}) as i32)
3350
== (true as i32))
3451
);
52+
let mut b: Bar = Bar::Bar({ Some() });
53+
assert!(((b.v) == (1)));
54+
assert!(((Bar::Bar({ Some(2) },).v) == (2)));
55+
let mut arr: [Bar; 3] = [
56+
Bar::Bar({ Some() }),
57+
Bar::Bar({ Some() }),
58+
Bar::Bar({ Some() }),
59+
];
60+
assert!(((arr[(0) as usize].v) == (1)));
61+
assert!(((arr[(2) as usize].v) == (1)));
3562
return 0;
3663
}

0 commit comments

Comments
 (0)