Skip to content

Commit f7662b6

Browse files
committed
transpile: Add enums.c snapshot test
1 parent 8853767 commit f7662b6

4 files changed

Lines changed: 129 additions & 0 deletions

File tree

c2rust-transpile/tests/snapshots.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,11 @@ fn test_empty_init() {
334334
transpile("empty_init.c").run();
335335
}
336336

337+
#[test]
338+
fn test_enums() {
339+
transpile("enums.c").run();
340+
}
341+
337342
#[test]
338343
fn test_exprs() {
339344
transpile("exprs.c").run();
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
typedef enum { Foo0, Foo1 } Foo;
2+
enum Bar { Bar1 = -1, Bar0 };
3+
4+
void test_enums(void) {
5+
Foo foo = Foo0;
6+
enum Bar bar = Bar0;
7+
foo = Foo1;
8+
bar = Bar1;
9+
10+
// Assign enum constant of wrong type
11+
foo = Bar0;
12+
bar = Foo0;
13+
14+
// Assign integer that matches a constant
15+
foo = 1;
16+
bar = 1;
17+
18+
// Assign integer that doesn't match any constant
19+
foo = 3;
20+
bar = 3;
21+
22+
// Arithmetic
23+
foo -= 2;
24+
bar -= 2;
25+
26+
Foo e = Foo1;
27+
28+
// Compare to same type
29+
int enum_enum = e == foo;
30+
int enum_constant = e == Foo0;
31+
32+
// Compare to wrong type
33+
int wrong_enum_enum = e == bar;
34+
int wrong_enum_constant = e == Bar0;
35+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
---
2+
source: c2rust-transpile/tests/snapshots.rs
3+
expression: cat tests/snapshots/enums.2021.rs
4+
---
5+
#![allow(
6+
dead_code,
7+
non_camel_case_types,
8+
non_snake_case,
9+
non_upper_case_globals,
10+
unused_assignments,
11+
unused_mut
12+
)]
13+
pub type Foo = ::core::ffi::c_uint;
14+
pub const Foo1: Foo = 1;
15+
pub const Foo0: Foo = 0;
16+
pub type Bar = ::core::ffi::c_int;
17+
pub const Bar0: Bar = 0;
18+
pub const Bar1: Bar = -1;
19+
#[no_mangle]
20+
pub unsafe extern "C" fn test_enums() {
21+
let mut foo: Foo = Foo0;
22+
let mut bar: Bar = Bar0;
23+
foo = Foo1;
24+
bar = Bar1;
25+
foo = Bar0 as ::core::ffi::c_int as Foo;
26+
bar = Foo0 as ::core::ffi::c_int as Bar;
27+
foo = Foo1;
28+
bar = 1 as Bar;
29+
foo = 3 as Foo;
30+
bar = 3 as Bar;
31+
foo = (foo as ::core::ffi::c_uint).wrapping_sub(2 as ::core::ffi::c_uint) as Foo;
32+
bar = (bar as ::core::ffi::c_int - 2 as ::core::ffi::c_int) as Bar;
33+
let mut e: Foo = Foo1;
34+
let mut enum_enum: ::core::ffi::c_int =
35+
(e as ::core::ffi::c_uint == foo as ::core::ffi::c_uint) as ::core::ffi::c_int;
36+
let mut enum_constant: ::core::ffi::c_int = (e as ::core::ffi::c_uint
37+
== Foo0 as ::core::ffi::c_int as ::core::ffi::c_uint)
38+
as ::core::ffi::c_int;
39+
let mut wrong_enum_enum: ::core::ffi::c_int =
40+
(e as ::core::ffi::c_uint == bar as ::core::ffi::c_uint) as ::core::ffi::c_int;
41+
let mut wrong_enum_constant: ::core::ffi::c_int = (e as ::core::ffi::c_uint
42+
== Bar0 as ::core::ffi::c_int as ::core::ffi::c_uint)
43+
as ::core::ffi::c_int;
44+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
source: c2rust-transpile/tests/snapshots.rs
3+
expression: cat tests/snapshots/enums.2024.rs
4+
---
5+
#![allow(
6+
dead_code,
7+
non_camel_case_types,
8+
non_snake_case,
9+
non_upper_case_globals,
10+
unsafe_op_in_unsafe_fn,
11+
unused_assignments,
12+
unused_mut
13+
)]
14+
pub type Foo = ::core::ffi::c_uint;
15+
pub const Foo1: Foo = 1;
16+
pub const Foo0: Foo = 0;
17+
pub type Bar = ::core::ffi::c_int;
18+
pub const Bar0: Bar = 0;
19+
pub const Bar1: Bar = -1;
20+
#[unsafe(no_mangle)]
21+
pub unsafe extern "C" fn test_enums() {
22+
let mut foo: Foo = Foo0;
23+
let mut bar: Bar = Bar0;
24+
foo = Foo1;
25+
bar = Bar1;
26+
foo = Bar0 as ::core::ffi::c_int as Foo;
27+
bar = Foo0 as ::core::ffi::c_int as Bar;
28+
foo = Foo1;
29+
bar = 1 as Bar;
30+
foo = 3 as Foo;
31+
bar = 3 as Bar;
32+
foo = (foo as ::core::ffi::c_uint).wrapping_sub(2 as ::core::ffi::c_uint) as Foo;
33+
bar = (bar as ::core::ffi::c_int - 2 as ::core::ffi::c_int) as Bar;
34+
let mut e: Foo = Foo1;
35+
let mut enum_enum: ::core::ffi::c_int =
36+
(e as ::core::ffi::c_uint == foo as ::core::ffi::c_uint) as ::core::ffi::c_int;
37+
let mut enum_constant: ::core::ffi::c_int = (e as ::core::ffi::c_uint
38+
== Foo0 as ::core::ffi::c_int as ::core::ffi::c_uint)
39+
as ::core::ffi::c_int;
40+
let mut wrong_enum_enum: ::core::ffi::c_int =
41+
(e as ::core::ffi::c_uint == bar as ::core::ffi::c_uint) as ::core::ffi::c_int;
42+
let mut wrong_enum_constant: ::core::ffi::c_int = (e as ::core::ffi::c_uint
43+
== Bar0 as ::core::ffi::c_int as ::core::ffi::c_uint)
44+
as ::core::ffi::c_int;
45+
}

0 commit comments

Comments
 (0)