Skip to content

Commit e302514

Browse files
committed
Add switch tests
1 parent 2276bb7 commit e302514

3 files changed

Lines changed: 989 additions & 0 deletions

File tree

tests/unit/out/refcount/switch.rs

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
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 basic_0(x: i32) -> i32 {
10+
let x: Value<i32> = Rc::new(RefCell::new(x));
11+
let r: Value<i32> = Rc::new(RefCell::new(0));
12+
'switch: {
13+
let __match_cond = (*x.borrow());
14+
match __match_cond {
15+
v if v == 0 => {
16+
(*r.borrow_mut()) = 10;
17+
break 'switch;
18+
}
19+
v if v == 1 => {
20+
(*r.borrow_mut()) = 20;
21+
break 'switch;
22+
}
23+
v if v == 2 => {
24+
(*r.borrow_mut()) = 30;
25+
break 'switch;
26+
}
27+
_ => {
28+
(*r.borrow_mut()) = 40;
29+
break 'switch;
30+
}
31+
}
32+
};
33+
return (*r.borrow());
34+
}
35+
pub fn stacked_1(x: i32) -> i32 {
36+
let x: Value<i32> = Rc::new(RefCell::new(x));
37+
let r: Value<i32> = Rc::new(RefCell::new(0));
38+
'switch: {
39+
let __match_cond = (*x.borrow());
40+
match __match_cond {
41+
v if v == 1 || v == 2 || v == 3 => {
42+
(*r.borrow_mut()) = 100;
43+
break 'switch;
44+
}
45+
v if v == 4 || v == 5 => {
46+
(*r.borrow_mut()) = 200;
47+
break 'switch;
48+
}
49+
_ => {
50+
(*r.borrow_mut()) = 300;
51+
break 'switch;
52+
}
53+
}
54+
};
55+
return (*r.borrow());
56+
}
57+
pub fn no_default_2(x: i32) -> i32 {
58+
let x: Value<i32> = Rc::new(RefCell::new(x));
59+
let r: Value<i32> = Rc::new(RefCell::new(-1_i32));
60+
'switch: {
61+
let __match_cond = (*x.borrow());
62+
match __match_cond {
63+
v if v == 7 => {
64+
(*r.borrow_mut()) = 1;
65+
break 'switch;
66+
}
67+
v if v == 8 => {
68+
(*r.borrow_mut()) = 2;
69+
break 'switch;
70+
}
71+
_ => {}
72+
}
73+
};
74+
return (*r.borrow());
75+
}
76+
pub fn only_default_3(x: i32) -> i32 {
77+
let x: Value<i32> = Rc::new(RefCell::new(x));
78+
let r: Value<i32> = Rc::new(RefCell::new(0));
79+
'switch: {
80+
let __match_cond = (*x.borrow());
81+
match __match_cond {
82+
_ => {
83+
(*r.borrow_mut()) = 42;
84+
break 'switch;
85+
}
86+
}
87+
};
88+
return (*r.borrow());
89+
}
90+
pub fn default_middle_4(x: i32) -> i32 {
91+
let x: Value<i32> = Rc::new(RefCell::new(x));
92+
let r: Value<i32> = Rc::new(RefCell::new(0));
93+
'switch: {
94+
let __match_cond = (*x.borrow());
95+
match __match_cond {
96+
v if v == 1 => {
97+
(*r.borrow_mut()) = 1;
98+
break 'switch;
99+
}
100+
v if v == 2 => {
101+
(*r.borrow_mut()) = 2;
102+
break 'switch;
103+
}
104+
_ => {
105+
(*r.borrow_mut()) = 99;
106+
break 'switch;
107+
}
108+
}
109+
};
110+
return (*r.borrow());
111+
}
112+
pub fn main() {
113+
std::process::exit(main_0());
114+
}
115+
fn main_0() -> i32 {
116+
assert!(
117+
(({
118+
let _x: i32 = 0;
119+
basic_0(_x)
120+
}) == 10)
121+
);
122+
assert!(
123+
(({
124+
let _x: i32 = 2;
125+
basic_0(_x)
126+
}) == 30)
127+
);
128+
assert!(
129+
(({
130+
let _x: i32 = 99;
131+
basic_0(_x)
132+
}) == 40)
133+
);
134+
assert!(
135+
(({
136+
let _x: i32 = 1;
137+
stacked_1(_x)
138+
}) == 100)
139+
);
140+
assert!(
141+
(({
142+
let _x: i32 = 3;
143+
stacked_1(_x)
144+
}) == 100)
145+
);
146+
assert!(
147+
(({
148+
let _x: i32 = 5;
149+
stacked_1(_x)
150+
}) == 200)
151+
);
152+
assert!(
153+
(({
154+
let _x: i32 = 9;
155+
stacked_1(_x)
156+
}) == 300)
157+
);
158+
assert!(
159+
(({
160+
let _x: i32 = 7;
161+
no_default_2(_x)
162+
}) == 1)
163+
);
164+
assert!(
165+
(({
166+
let _x: i32 = 42;
167+
no_default_2(_x)
168+
}) == -1_i32)
169+
);
170+
assert!(
171+
(({
172+
let _x: i32 = 1;
173+
only_default_3(_x)
174+
}) == 42)
175+
);
176+
assert!(
177+
(({
178+
let _x: i32 = 1;
179+
default_middle_4(_x)
180+
}) == 1)
181+
);
182+
assert!(
183+
(({
184+
let _x: i32 = 2;
185+
default_middle_4(_x)
186+
}) == 2)
187+
);
188+
assert!(
189+
(({
190+
let _x: i32 = 99;
191+
default_middle_4(_x)
192+
}) == 99)
193+
);
194+
return 0;
195+
}

tests/unit/out/unsafe/switch.rs

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
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 basic_0(mut x: i32) -> i32 {
10+
let mut r: i32 = 0;
11+
'switch: {
12+
let __match_cond = x;
13+
match __match_cond {
14+
v if v == 0 => {
15+
r = 10;
16+
break 'switch;
17+
}
18+
v if v == 1 => {
19+
r = 20;
20+
break 'switch;
21+
}
22+
v if v == 2 => {
23+
r = 30;
24+
break 'switch;
25+
}
26+
_ => {
27+
r = 40;
28+
break 'switch;
29+
}
30+
}
31+
};
32+
return r;
33+
}
34+
pub unsafe fn stacked_1(mut x: i32) -> i32 {
35+
let mut r: i32 = 0;
36+
'switch: {
37+
let __match_cond = x;
38+
match __match_cond {
39+
v if v == 1 || v == 2 || v == 3 => {
40+
r = 100;
41+
break 'switch;
42+
}
43+
v if v == 4 || v == 5 => {
44+
r = 200;
45+
break 'switch;
46+
}
47+
_ => {
48+
r = 300;
49+
break 'switch;
50+
}
51+
}
52+
};
53+
return r;
54+
}
55+
pub unsafe fn no_default_2(mut x: i32) -> i32 {
56+
let mut r: i32 = -1_i32;
57+
'switch: {
58+
let __match_cond = x;
59+
match __match_cond {
60+
v if v == 7 => {
61+
r = 1;
62+
break 'switch;
63+
}
64+
v if v == 8 => {
65+
r = 2;
66+
break 'switch;
67+
}
68+
_ => {}
69+
}
70+
};
71+
return r;
72+
}
73+
pub unsafe fn only_default_3(mut x: i32) -> i32 {
74+
let mut r: i32 = 0;
75+
'switch: {
76+
let __match_cond = x;
77+
match __match_cond {
78+
_ => {
79+
r = 42;
80+
break 'switch;
81+
}
82+
}
83+
};
84+
return r;
85+
}
86+
pub unsafe fn default_middle_4(mut x: i32) -> i32 {
87+
let mut r: i32 = 0;
88+
'switch: {
89+
let __match_cond = x;
90+
match __match_cond {
91+
v if v == 1 => {
92+
r = 1;
93+
break 'switch;
94+
}
95+
v if v == 2 => {
96+
r = 2;
97+
break 'switch;
98+
}
99+
_ => {
100+
r = 99;
101+
break 'switch;
102+
}
103+
}
104+
};
105+
return r;
106+
}
107+
pub fn main() {
108+
unsafe {
109+
std::process::exit(main_0() as i32);
110+
}
111+
}
112+
unsafe fn main_0() -> i32 {
113+
assert!(
114+
((unsafe {
115+
let _x: i32 = 0;
116+
basic_0(_x)
117+
}) == (10))
118+
);
119+
assert!(
120+
((unsafe {
121+
let _x: i32 = 2;
122+
basic_0(_x)
123+
}) == (30))
124+
);
125+
assert!(
126+
((unsafe {
127+
let _x: i32 = 99;
128+
basic_0(_x)
129+
}) == (40))
130+
);
131+
assert!(
132+
((unsafe {
133+
let _x: i32 = 1;
134+
stacked_1(_x)
135+
}) == (100))
136+
);
137+
assert!(
138+
((unsafe {
139+
let _x: i32 = 3;
140+
stacked_1(_x)
141+
}) == (100))
142+
);
143+
assert!(
144+
((unsafe {
145+
let _x: i32 = 5;
146+
stacked_1(_x)
147+
}) == (200))
148+
);
149+
assert!(
150+
((unsafe {
151+
let _x: i32 = 9;
152+
stacked_1(_x)
153+
}) == (300))
154+
);
155+
assert!(
156+
((unsafe {
157+
let _x: i32 = 7;
158+
no_default_2(_x)
159+
}) == (1))
160+
);
161+
assert!(
162+
((unsafe {
163+
let _x: i32 = 42;
164+
no_default_2(_x)
165+
}) == (-1_i32))
166+
);
167+
assert!(
168+
((unsafe {
169+
let _x: i32 = 1;
170+
only_default_3(_x)
171+
}) == (42))
172+
);
173+
assert!(
174+
((unsafe {
175+
let _x: i32 = 1;
176+
default_middle_4(_x)
177+
}) == (1))
178+
);
179+
assert!(
180+
((unsafe {
181+
let _x: i32 = 2;
182+
default_middle_4(_x)
183+
}) == (2))
184+
);
185+
assert!(
186+
((unsafe {
187+
let _x: i32 = 99;
188+
default_middle_4(_x)
189+
}) == (99))
190+
);
191+
return 0;
192+
}

0 commit comments

Comments
 (0)