summaryrefslogtreecommitdiffstats
path: root/vendor/xshell/tests/compile_time.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/xshell/tests/compile_time.rs')
-rw-r--r--vendor/xshell/tests/compile_time.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/vendor/xshell/tests/compile_time.rs b/vendor/xshell/tests/compile_time.rs
new file mode 100644
index 000000000..ca35eefe8
--- /dev/null
+++ b/vendor/xshell/tests/compile_time.rs
@@ -0,0 +1,41 @@
+use std::time::{Duration, Instant};
+
+use xshell::{cmd, Shell};
+
+#[test]
+fn fixed_cost_compile_times() {
+ let sh = Shell::new().unwrap();
+
+ let _p = sh.push_dir("tests/data");
+ let baseline = compile_bench(&sh, "baseline");
+ let _ducted = compile_bench(&sh, "ducted");
+ let xshelled = compile_bench(&sh, "xshelled");
+ let ratio = (xshelled.as_millis() as f64) / (baseline.as_millis() as f64);
+ assert!(1.0 < ratio && ratio < 10.0);
+
+ fn compile_bench(sh: &Shell, name: &str) -> Duration {
+ let _p = sh.push_dir(name);
+ let cargo_build = cmd!(sh, "cargo build -q");
+ cargo_build.read().unwrap();
+
+ let n = 5;
+ let mut times = Vec::new();
+ for _ in 0..n {
+ sh.remove_path("./target").unwrap();
+ let start = Instant::now();
+ cargo_build.read().unwrap();
+ let elapsed = start.elapsed();
+ times.push(elapsed);
+ }
+
+ times.sort();
+ times.remove(0);
+ times.pop();
+ let total = times.iter().sum::<Duration>();
+ let average = total / (times.len() as u32);
+
+ eprintln!("compiling {name}: {average:?}");
+
+ total
+ }
+}