Skip to content

Commit 452ed0c

Browse files
Merge pull request #266 from RalfJung/ctfe-stress
add CTFE stress test
2 parents bf4ab64 + 573c975 commit 452ed0c

File tree

21 files changed

+358
-0
lines changed

21 files changed

+358
-0
lines changed

collector/benchmarks/ctfe-stress-cast/Cargo.lock

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[package]
2+
name = "ctfe-stress"
3+
version = "0.1.0"
4+
authors = ["Ralf Jung <[email protected]>"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#![feature(const_fn, const_let)]
2+
#![allow(unused_must_use)]
3+
4+
// Try to make CTFE actually do a lot of computation, without producing a big result.
5+
// And without support for loops.
6+
7+
macro_rules! const_repeat {
8+
// Base case: Use 16 at the end to avoid function calls at the leaves as much as possibele.
9+
([16] $e: expr, $T: ty) => {{
10+
$e; $e; $e; $e;
11+
$e; $e; $e; $e;
12+
$e; $e; $e; $e;
13+
$e; $e; $e; $e
14+
}};
15+
([1] $e: expr, $T: ty) => {{
16+
$e
17+
}};
18+
// Recursive case: Take a 16
19+
([16 $($n: tt)*] $e: expr, $T: ty) => {{
20+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
21+
e(); e(); e(); e();
22+
e(); e(); e(); e();
23+
e(); e(); e(); e();
24+
e(); e(); e(); e()
25+
}};
26+
// Recursive case: Take a 4
27+
([4 $($n: tt)*] $e: expr, $T: ty) => {{
28+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
29+
e(); e(); e(); e()
30+
}};
31+
// Recursive case: Take a 2
32+
([2 $($n: tt)*] $e: expr, $T: ty) => {{
33+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
34+
e(); e()
35+
}};
36+
}
37+
macro_rules! expensive_static {
38+
($name: ident : $T: ty = $e : expr) =>
39+
(pub static $name : $T = const_repeat!([2 16 16 16 16 16] $e, $T);)
40+
}
41+
42+
expensive_static!(CHAIN: usize = 42i32 as u8 as u64 as i8 as isize as usize);

collector/benchmarks/ctfe-stress-const-fn/Cargo.lock

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[package]
2+
name = "ctfe-stress"
3+
version = "0.1.0"
4+
authors = ["Ralf Jung <[email protected]>"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#![feature(const_fn, const_let)]
2+
#![allow(unused_must_use)]
3+
4+
// Try to make CTFE actually do a lot of computation, without producing a big result.
5+
// And without support for loops.
6+
7+
macro_rules! const_repeat {
8+
// Base case: Use 16 at the end to avoid function calls at the leaves as much as possibele.
9+
([16] $e: expr, $T: ty) => {{
10+
$e; $e; $e; $e;
11+
$e; $e; $e; $e;
12+
$e; $e; $e; $e;
13+
$e; $e; $e; $e
14+
}};
15+
([1] $e: expr, $T: ty) => {{
16+
$e
17+
}};
18+
// Recursive case: Take a 16
19+
([16 $($n: tt)*] $e: expr, $T: ty) => {{
20+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
21+
e(); e(); e(); e();
22+
e(); e(); e(); e();
23+
e(); e(); e(); e();
24+
e(); e(); e(); e()
25+
}};
26+
// Recursive case: Take a 4
27+
([4 $($n: tt)*] $e: expr, $T: ty) => {{
28+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
29+
e(); e(); e(); e()
30+
}};
31+
// Recursive case: Take a 2
32+
([2 $($n: tt)*] $e: expr, $T: ty) => {{
33+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
34+
e(); e()
35+
}};
36+
}
37+
macro_rules! expensive_static {
38+
($name: ident : $T: ty = $e : expr) =>
39+
(pub static $name : $T = const_repeat!([2 16 16 16 16 16] $e, $T);)
40+
}
41+
42+
const fn inc(i: i32) -> i32 { i + 1 }
43+
44+
expensive_static!(CONST_FN_SIMPLE: i32 = inc(42));

collector/benchmarks/ctfe-stress-force-alloc/Cargo.lock

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[package]
2+
name = "ctfe-stress"
3+
version = "0.1.0"
4+
authors = ["Ralf Jung <[email protected]>"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#![feature(const_fn, const_let)]
2+
#![allow(unused_must_use)]
3+
4+
// Try to make CTFE actually do a lot of computation, without producing a big result.
5+
// And without support for loops.
6+
7+
macro_rules! const_repeat {
8+
// Base case: Use 16 at the end to avoid function calls at the leaves as much as possibele.
9+
([16] $e: expr, $T: ty) => {{
10+
$e; $e; $e; $e;
11+
$e; $e; $e; $e;
12+
$e; $e; $e; $e;
13+
$e; $e; $e; $e
14+
}};
15+
([1] $e: expr, $T: ty) => {{
16+
$e
17+
}};
18+
// Recursive case: Take a 16
19+
([16 $($n: tt)*] $e: expr, $T: ty) => {{
20+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
21+
e(); e(); e(); e();
22+
e(); e(); e(); e();
23+
e(); e(); e(); e();
24+
e(); e(); e(); e()
25+
}};
26+
// Recursive case: Take a 4
27+
([4 $($n: tt)*] $e: expr, $T: ty) => {{
28+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
29+
e(); e(); e(); e()
30+
}};
31+
// Recursive case: Take a 2
32+
([2 $($n: tt)*] $e: expr, $T: ty) => {{
33+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
34+
e(); e()
35+
}};
36+
}
37+
macro_rules! expensive_static {
38+
($name: ident : $T: ty = $e : expr) =>
39+
(pub static $name : $T = const_repeat!([2 16 16 16 16 16] $e, $T);)
40+
}
41+
42+
expensive_static!(FORCE_ALLOC: i32 = *****(&&&&&5));

collector/benchmarks/ctfe-stress-index-check/Cargo.lock

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[package]
2+
name = "ctfe-stress"
3+
version = "0.1.0"
4+
authors = ["Ralf Jung <[email protected]>"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#![feature(const_fn, const_let)]
2+
#![allow(unused_must_use)]
3+
4+
// Try to make CTFE actually do a lot of computation, without producing a big result.
5+
// And without support for loops.
6+
7+
macro_rules! const_repeat {
8+
// Base case: Use 16 at the end to avoid function calls at the leaves as much as possibele.
9+
([16] $e: expr, $T: ty) => {{
10+
$e; $e; $e; $e;
11+
$e; $e; $e; $e;
12+
$e; $e; $e; $e;
13+
$e; $e; $e; $e
14+
}};
15+
([1] $e: expr, $T: ty) => {{
16+
$e
17+
}};
18+
// Recursive case: Take a 16
19+
([16 $($n: tt)*] $e: expr, $T: ty) => {{
20+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
21+
e(); e(); e(); e();
22+
e(); e(); e(); e();
23+
e(); e(); e(); e();
24+
e(); e(); e(); e()
25+
}};
26+
// Recursive case: Take a 4
27+
([4 $($n: tt)*] $e: expr, $T: ty) => {{
28+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
29+
e(); e(); e(); e()
30+
}};
31+
// Recursive case: Take a 2
32+
([2 $($n: tt)*] $e: expr, $T: ty) => {{
33+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
34+
e(); e()
35+
}};
36+
}
37+
macro_rules! expensive_static {
38+
($name: ident : $T: ty = $e : expr) =>
39+
(pub static $name : $T = const_repeat!([2 16 16 16 16 16] $e, $T);)
40+
}
41+
42+
expensive_static!(CHECKED_INDEX: u8 = b"foomp"[3]);

collector/benchmarks/ctfe-stress-ops/Cargo.lock

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[package]
2+
name = "ctfe-stress"
3+
version = "0.1.0"
4+
authors = ["Ralf Jung <[email protected]>"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#![feature(const_fn, const_let)]
2+
#![allow(unused_must_use)]
3+
4+
// Try to make CTFE actually do a lot of computation, without producing a big result.
5+
// And without support for loops.
6+
7+
macro_rules! const_repeat {
8+
// Base case: Use 16 at the end to avoid function calls at the leaves as much as possibele.
9+
([16] $e: expr, $T: ty) => {{
10+
$e; $e; $e; $e;
11+
$e; $e; $e; $e;
12+
$e; $e; $e; $e;
13+
$e; $e; $e; $e
14+
}};
15+
([1] $e: expr, $T: ty) => {{
16+
$e
17+
}};
18+
// Recursive case: Take a 16
19+
([16 $($n: tt)*] $e: expr, $T: ty) => {{
20+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
21+
e(); e(); e(); e();
22+
e(); e(); e(); e();
23+
e(); e(); e(); e();
24+
e(); e(); e(); e()
25+
}};
26+
// Recursive case: Take a 4
27+
([4 $($n: tt)*] $e: expr, $T: ty) => {{
28+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
29+
e(); e(); e(); e()
30+
}};
31+
// Recursive case: Take a 2
32+
([2 $($n: tt)*] $e: expr, $T: ty) => {{
33+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
34+
e(); e()
35+
}};
36+
}
37+
macro_rules! expensive_static {
38+
($name: ident : $T: ty = $e : expr) =>
39+
(pub static $name : $T = const_repeat!([16 16 16 16 16] $e, $T);)
40+
}
41+
42+
expensive_static!(OPS: i32 = ((((10 >> 1) + 3) * 7) / 2 - 12) << 4);

collector/benchmarks/ctfe-stress-reloc/Cargo.lock

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[package]
2+
name = "ctfe-stress"
3+
version = "0.1.0"
4+
authors = ["Ralf Jung <[email protected]>"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#![feature(const_fn, const_let)]
2+
#![allow(unused_must_use)]
3+
4+
// Try to make CTFE actually do a lot of computation, without producing a big result.
5+
// And without support for loops.
6+
7+
macro_rules! const_repeat {
8+
// Base case: Use 16 at the end to avoid function calls at the leaves as much as possibele.
9+
([16] $e: expr, $T: ty) => {{
10+
$e; $e; $e; $e;
11+
$e; $e; $e; $e;
12+
$e; $e; $e; $e;
13+
$e; $e; $e; $e
14+
}};
15+
([1] $e: expr, $T: ty) => {{
16+
$e
17+
}};
18+
// Recursive case: Take a 16
19+
([16 $($n: tt)*] $e: expr, $T: ty) => {{
20+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
21+
e(); e(); e(); e();
22+
e(); e(); e(); e();
23+
e(); e(); e(); e();
24+
e(); e(); e(); e()
25+
}};
26+
// Recursive case: Take a 4
27+
([4 $($n: tt)*] $e: expr, $T: ty) => {{
28+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
29+
e(); e(); e(); e()
30+
}};
31+
// Recursive case: Take a 2
32+
([2 $($n: tt)*] $e: expr, $T: ty) => {{
33+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
34+
e(); e()
35+
}};
36+
}
37+
macro_rules! expensive_static {
38+
($name: ident : $T: ty = $e : expr) =>
39+
(pub static $name : $T = const_repeat!([2 16 16 16 16 16 16] $e, $T);)
40+
}
41+
42+
expensive_static!(RELOCATIONS : &'static str = "hello");

collector/benchmarks/ctfe-stress-unsize-slice/Cargo.lock

+4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
[package]
2+
name = "ctfe-stress"
3+
version = "0.1.0"
4+
authors = ["Ralf Jung <[email protected]>"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#![feature(const_fn, const_let)]
2+
#![allow(unused_must_use)]
3+
4+
// Try to make CTFE actually do a lot of computation, without producing a big result.
5+
// And without support for loops.
6+
7+
macro_rules! const_repeat {
8+
// Base case: Use 16 at the end to avoid function calls at the leaves as much as possibele.
9+
([16] $e: expr, $T: ty) => {{
10+
$e; $e; $e; $e;
11+
$e; $e; $e; $e;
12+
$e; $e; $e; $e;
13+
$e; $e; $e; $e
14+
}};
15+
([1] $e: expr, $T: ty) => {{
16+
$e
17+
}};
18+
// Recursive case: Take a 16
19+
([16 $($n: tt)*] $e: expr, $T: ty) => {{
20+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
21+
e(); e(); e(); e();
22+
e(); e(); e(); e();
23+
e(); e(); e(); e();
24+
e(); e(); e(); e()
25+
}};
26+
// Recursive case: Take a 8
27+
([8 $($n: tt)*] $e: expr, $T: ty) => {{
28+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
29+
e(); e(); e(); e();
30+
e(); e(); e(); e()
31+
}};
32+
// Recursive case: Take a 4
33+
([4 $($n: tt)*] $e: expr, $T: ty) => {{
34+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
35+
e(); e(); e(); e()
36+
}};
37+
// Recursive case: Take a 2
38+
([2 $($n: tt)*] $e: expr, $T: ty) => {{
39+
const fn e() -> $T { const_repeat!([$($n)*] $e, $T) }
40+
e(); e()
41+
}};
42+
}
43+
macro_rules! expensive_static {
44+
($name: ident : $T: ty = $e : expr) =>
45+
(pub static $name : $T = const_repeat!([16 16 16 16 16 16] $e, $T);)
46+
}
47+
48+
expensive_static!(UNSIZING: &'static [u8] = b"foo");

0 commit comments

Comments
 (0)