Skip to content

Commit eb62fa2

Browse files
authored
Handwritten test expansion (#257)
* basic tests * Refactored handwritten tests * Enumerated all binary operations, creating individual tests for failing. * `String`, `str`, `char` tests * Added tests for aggregate and slice types. Slice, tuples, array, struct, enum * Added float test * Added tests for closures * added test for generics * added tests for traits * added test for Box
1 parent e7d64ba commit eb62fa2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+1737
-141
lines changed
Original file line numberDiff line numberDiff line change
@@ -1 +1,21 @@
1-
handwritten-rust/fibonacci.mir 134
1+
handwritten-rust/traits/derive-copy-struct.mir 4
2+
handwritten-rust/traits/defined-trait.mir 4
3+
handwritten-rust/structs/struct.mir 4
4+
handwritten-rust/arrays/array.mir 4
5+
handwritten-rust/enums/enum.mir 113
6+
handwritten-rust/generics/generic.mir 4
7+
handwritten-rust/integers/div.mir 113
8+
handwritten-rust/integers/shl_min.mir 2
9+
handwritten-rust/integers/modulo.mir 113
10+
handwritten-rust/floats/float.mir 113
11+
handwritten-rust/strings-chars/std-to-string.mir 4
12+
handwritten-rust/strings-chars/char-trivial.mir 113
13+
handwritten-rust/strings-chars/std-string-empty.mir 113
14+
handwritten-rust/strings-chars/str-empty.mir 4
15+
handwritten-rust/strings-chars/str-trivial.mir 4
16+
handwritten-rust/closures/closure-no-args.mir 1
17+
handwritten-rust/closures/closure-args.mir 1
18+
handwritten-rust/memory/box.mir 113
19+
handwritten-rust/slices/slice.mir 4
20+
handwritten-rust/recursion/fibonacci.mir 134
21+
handwritten-rust/tuples/tuple-eq.mir 4
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
default: mir executables
1+
default: mir
22

3-
all: mir executables
3+
all: mir exe
44

55
clean:
6-
rm -f *.mir
7-
rm -f *.out
6+
find . -name "*.mir" -type f -delete
7+
find . -name "*.out" -type f -delete
88

99
RUSTC:=rustc
10-
RUST_SOURCES=$(wildcard *.rs)
10+
RUST_SOURCES=$(shell find . -name '*.rs')
1111
RUSTC_OPTIONS=-C overflow-checks=off -Zmir-enable-passes=-ConstDebugInfo,-PromoteTemps
1212

13-
mir: $(RUST_SOURCES:%.rs=%.mir)
14-
%.mir : %.rs
15-
$(RUSTC) --emit mir $(RUSTC_OPTIONS) $< -o $@
13+
mir: $(patsubst %.rs,%.mir,${RUST_SOURCES})
14+
%.mir: %.rs
15+
$(RUSTC) --emit mir $(RUSTC_OPTIONS) -o $@ $*.rs
1616

17-
executables: $(RUST_SOURCES:%.rs=%.out)
18-
%.out : %.rs
19-
$(RUSTC) $(RUSTC_OPTIONS) $< -o $@
17+
exe: $(patsubst %.rs,%.out,${RUST_SOURCES})
18+
%.out: %.rs
19+
$(RUSTC) $(RUSTC_OPTIONS) -o $@ $*.rs
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// WARNING: This output format is intended for human consumers only
2+
// and is subject to change without notice. Knock yourself out.
3+
fn main() -> () {
4+
let mut _0: ();
5+
let _1: [i32; 4];
6+
let mut _2: bool;
7+
let mut _3: bool;
8+
let mut _4: &[i32; 4];
9+
let mut _5: &[i32; 4];
10+
let _6: [i32; 4];
11+
let mut _7: !;
12+
scope 1 {
13+
debug a => _1;
14+
}
15+
16+
bb0: {
17+
_1 = [const 1_i32, const 2_i32, const 3_i32, const 4_i32];
18+
_4 = &_1;
19+
_6 = [const 1_i32, const 2_i32, const 3_i32, const 4_i32];
20+
_5 = &_6;
21+
_3 = <[i32; 4] as PartialEq>::eq(move _4, move _5) -> bb1;
22+
}
23+
24+
bb1: {
25+
_2 = Not(move _3);
26+
switchInt(move _2) -> [0: bb3, otherwise: bb2];
27+
}
28+
29+
bb2: {
30+
_7 = core::panicking::panic(const "assertion failed: a == [1, 2, 3, 4]");
31+
}
32+
33+
bb3: {
34+
return;
35+
}
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
fn main() {
2+
let a = [1, 2, 3, 4];
3+
4+
assert!(a == [1, 2, 3, 4]);
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// WARNING: This output format is intended for human consumers only
2+
// and is subject to change without notice. Knock yourself out.
3+
fn main() -> () {
4+
let mut _0: ();
5+
let _1: [closure@closures/closure-args.rs:2:15: 2:28];
6+
let mut _2: bool;
7+
let mut _3: bool;
8+
let mut _4: i32;
9+
let mut _5: &[closure@closures/closure-args.rs:2:15: 2:28];
10+
let mut _6: (i32, i32);
11+
let mut _7: !;
12+
scope 1 {
13+
debug sum => const ZeroSized: [closure@closures/closure-args.rs:2:15: 2:28];
14+
}
15+
16+
bb0: {
17+
_5 = &_1;
18+
_6 = (const 20_i32, const 22_i32);
19+
_4 = <[closure@closures/closure-args.rs:2:15: 2:28] as Fn<(i32, i32)>>::call(move _5, move _6) -> bb1;
20+
}
21+
22+
bb1: {
23+
_3 = Eq(move _4, const 42_i32);
24+
_2 = Not(move _3);
25+
switchInt(move _2) -> [0: bb3, otherwise: bb2];
26+
}
27+
28+
bb2: {
29+
_7 = core::panicking::panic(const "assertion failed: sum(20, 22) == 42");
30+
}
31+
32+
bb3: {
33+
return;
34+
}
35+
}
36+
37+
fn main::{closure#0}(_1: &[closure@closures/closure-args.rs:2:15: 2:28], _2: i32, _3: i32) -> i32 {
38+
debug x => _2;
39+
debug y => _3;
40+
let mut _0: i32;
41+
42+
bb0: {
43+
_0 = Add(_2, _3);
44+
return;
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
fn main() {
2+
let sum = |x, y| -> i32 { x + y };
3+
4+
assert!(sum(20, 22) == 42);
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// WARNING: This output format is intended for human consumers only
2+
// and is subject to change without notice. Knock yourself out.
3+
fn main() -> () {
4+
let mut _0: ();
5+
let _1: [closure@closures/closure.rs:2:15: 2:24];
6+
let mut _2: bool;
7+
let mut _3: bool;
8+
let mut _4: u32;
9+
let mut _5: &[closure@closures/closure.rs:2:15: 2:24];
10+
let mut _6: !;
11+
scope 1 {
12+
debug sum => const ZeroSized: [closure@closures/closure.rs:2:15: 2:24];
13+
}
14+
15+
bb0: {
16+
_5 = &_1;
17+
_4 = <[closure@closures/closure.rs:2:15: 2:24] as Fn<()>>::call(move _5, const ()) -> bb1;
18+
}
19+
20+
bb1: {
21+
_3 = Eq(move _4, const 42_u32);
22+
_2 = Not(move _3);
23+
switchInt(move _2) -> [0: bb3, otherwise: bb2];
24+
}
25+
26+
bb2: {
27+
_6 = core::panicking::panic(const "assertion failed: sum() == 42");
28+
}
29+
30+
bb3: {
31+
return;
32+
}
33+
}
34+
35+
fn main::{closure#0}(_1: &[closure@closures/closure.rs:2:15: 2:24]) -> u32 {
36+
let mut _0: u32;
37+
38+
bb0: {
39+
_0 = const 42_u32;
40+
return;
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
fn main() {
2+
let sum = || -> u32 { 42 };
3+
4+
assert!(sum() == 42);
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// WARNING: This output format is intended for human consumers only
2+
// and is subject to change without notice. Knock yourself out.
3+
fn main() -> () {
4+
let mut _0: ();
5+
let _1: Letter;
6+
scope 1 {
7+
debug a => _1;
8+
}
9+
10+
bb0: {
11+
_1 = Letter::A;
12+
return;
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
enum Letter {
2+
A,
3+
B,
4+
}
5+
6+
fn main() {
7+
let a = Letter::A;
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// WARNING: This output format is intended for human consumers only
2+
// and is subject to change without notice. Knock yourself out.
3+
fn main() -> () {
4+
let mut _0: ();
5+
let _1: f32;
6+
let mut _3: bool;
7+
let mut _4: bool;
8+
let mut _5: f32;
9+
let mut _6: !;
10+
let mut _9: bool;
11+
let mut _10: bool;
12+
let mut _11: f64;
13+
let mut _12: !;
14+
scope 1 {
15+
debug a => _1;
16+
let _2: f32;
17+
scope 2 {
18+
debug b => _2;
19+
let _7: f64;
20+
scope 3 {
21+
debug c => _7;
22+
let _8: f64;
23+
scope 4 {
24+
debug d => _8;
25+
}
26+
}
27+
}
28+
}
29+
30+
bb0: {
31+
_1 = const 3.5f32;
32+
_2 = const 1.20000005f32;
33+
_5 = Add(_1, _2);
34+
_4 = Eq(move _5, const 4.69999981f32);
35+
_3 = Not(move _4);
36+
switchInt(move _3) -> [0: bb2, otherwise: bb1];
37+
}
38+
39+
bb1: {
40+
_6 = core::panicking::panic(const "assertion failed: a + b == 4.7");
41+
}
42+
43+
bb2: {
44+
_7 = const 3.5f64;
45+
_8 = const 1.2f64;
46+
_11 = Add(_7, _8);
47+
_10 = Eq(move _11, const 4.7000000000000002f64);
48+
_9 = Not(move _10);
49+
switchInt(move _9) -> [0: bb4, otherwise: bb3];
50+
}
51+
52+
bb3: {
53+
_12 = core::panicking::panic(const "assertion failed: c + d == 4.7");
54+
}
55+
56+
bb4: {
57+
return;
58+
}
59+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
fn main() {
2+
let a:f32 = 3.5;
3+
let b:f32 = 1.2;
4+
5+
assert!(a + b == 4.7);
6+
7+
let c:f64 = 3.5;
8+
let d:f64 = 1.2;
9+
10+
assert!(c + d == 4.7);
11+
}

0 commit comments

Comments
 (0)