aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-history/benches
diff options
context:
space:
mode:
Diffstat (limited to 'crates/atuin-history/benches')
-rw-r--r--crates/atuin-history/benches/smart_sort.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/crates/atuin-history/benches/smart_sort.rs b/crates/atuin-history/benches/smart_sort.rs
new file mode 100644
index 00000000..a78064de
--- /dev/null
+++ b/crates/atuin-history/benches/smart_sort.rs
@@ -0,0 +1,35 @@
+use atuin_client::history::History;
+use atuin_history::sort::sort;
+
+use rand::Rng;
+
+fn main() {
+ // Run registered benchmarks.
+ divan::main();
+}
+
+// Smart sort usually runs on 200 entries, test on a few sizes
+#[divan::bench(args=[100, 200, 400, 800, 1600, 10000])]
+fn smart_sort(lines: usize) {
+ // benchmark a few different sizes of "history"
+ // first we need to generate some history. This will use a whole bunch of memory, sorry
+ let mut rng = rand::thread_rng();
+ let now = time::OffsetDateTime::now_utc().unix_timestamp();
+
+ let possible_commands = ["echo", "ls", "cd", "grep", "atuin", "curl"];
+ let mut commands = Vec::<History>::with_capacity(lines);
+
+ for _ in 0..lines {
+ let command = possible_commands[rng.gen_range(0..possible_commands.len())];
+
+ let command = History::import()
+ .command(command)
+ .timestamp(time::OffsetDateTime::from_unix_timestamp(rng.gen_range(0..now)).unwrap())
+ .build()
+ .into();
+
+ commands.push(command);
+ }
+
+ let _ = sort("curl", commands);
+}