mirror of
https://github.com/nushell/nushell.git
synced 2025-05-05 15:32:56 +00:00
Add insert benchmarks (#15166)
# Description Adds some benchmarks for inserting into records and tables as part of #12624.
This commit is contained in:
parent
be508cbd7f
commit
252155bdb9
@ -1,7 +1,6 @@
|
|||||||
use nu_cli::{eval_source, evaluate_commands};
|
use nu_cli::{eval_source, evaluate_commands};
|
||||||
use nu_plugin_core::{Encoder, EncodingType};
|
use nu_plugin_core::{Encoder, EncodingType};
|
||||||
use nu_plugin_protocol::{PluginCallResponse, PluginOutput};
|
use nu_plugin_protocol::{PluginCallResponse, PluginOutput};
|
||||||
|
|
||||||
use nu_protocol::{
|
use nu_protocol::{
|
||||||
engine::{EngineState, Stack},
|
engine::{EngineState, Stack},
|
||||||
PipelineData, Signals, Span, Spanned, Value,
|
PipelineData, Signals, Span, Spanned, Value,
|
||||||
@ -9,12 +8,11 @@ use nu_protocol::{
|
|||||||
use nu_std::load_standard_library;
|
use nu_std::load_standard_library;
|
||||||
use nu_utils::{get_default_config, get_default_env};
|
use nu_utils::{get_default_config, get_default_env};
|
||||||
use std::{
|
use std::{
|
||||||
|
fmt::Write,
|
||||||
|
hint::black_box,
|
||||||
rc::Rc,
|
rc::Rc,
|
||||||
sync::{atomic::AtomicBool, Arc},
|
sync::{atomic::AtomicBool, Arc},
|
||||||
};
|
};
|
||||||
|
|
||||||
use std::hint::black_box;
|
|
||||||
|
|
||||||
use tango_bench::{benchmark_fn, tango_benchmarks, tango_main, IntoBenchmarks};
|
use tango_bench::{benchmark_fn, tango_benchmarks, tango_main, IntoBenchmarks};
|
||||||
|
|
||||||
fn load_bench_commands() -> EngineState {
|
fn load_bench_commands() -> EngineState {
|
||||||
@ -141,19 +139,16 @@ fn bench_load_standard_lib() -> impl IntoBenchmarks {
|
|||||||
})]
|
})]
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_flat_record_string(n: i32) -> String {
|
fn create_flat_record_string(n: usize) -> String {
|
||||||
let mut s = String::from("let record = {");
|
let mut s = String::from("let record = { ");
|
||||||
for i in 0..n {
|
for i in 0..n {
|
||||||
s.push_str(&format!("col_{}: {}", i, i));
|
write!(s, "col_{i}: {i}, ").unwrap();
|
||||||
if i < n - 1 {
|
|
||||||
s.push_str(", ");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
s.push('}');
|
s.push('}');
|
||||||
s
|
s
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_nested_record_string(depth: i32) -> String {
|
fn create_nested_record_string(depth: usize) -> String {
|
||||||
let mut s = String::from("let record = {");
|
let mut s = String::from("let record = {");
|
||||||
for _ in 0..depth {
|
for _ in 0..depth {
|
||||||
s.push_str("col: {");
|
s.push_str("col: {");
|
||||||
@ -166,7 +161,7 @@ fn create_nested_record_string(depth: i32) -> String {
|
|||||||
s
|
s
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_example_table_nrows(n: i32) -> String {
|
fn create_example_table_nrows(n: usize) -> String {
|
||||||
let mut s = String::from("let table = [[foo bar baz]; ");
|
let mut s = String::from("let table = [[foo bar baz]; ");
|
||||||
for i in 0..n {
|
for i in 0..n {
|
||||||
s.push_str(&format!("[0, 1, {i}]"));
|
s.push_str(&format!("[0, 1, {i}]"));
|
||||||
@ -178,7 +173,7 @@ fn create_example_table_nrows(n: i32) -> String {
|
|||||||
s
|
s
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_record_create(n: i32) -> impl IntoBenchmarks {
|
fn bench_record_create(n: usize) -> impl IntoBenchmarks {
|
||||||
bench_command(
|
bench_command(
|
||||||
&format!("record_create_{n}"),
|
&format!("record_create_{n}"),
|
||||||
&create_flat_record_string(n),
|
&create_flat_record_string(n),
|
||||||
@ -187,7 +182,7 @@ fn bench_record_create(n: i32) -> impl IntoBenchmarks {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_record_flat_access(n: i32) -> impl IntoBenchmarks {
|
fn bench_record_flat_access(n: usize) -> impl IntoBenchmarks {
|
||||||
let setup_command = create_flat_record_string(n);
|
let setup_command = create_flat_record_string(n);
|
||||||
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
||||||
bench_command(
|
bench_command(
|
||||||
@ -198,10 +193,10 @@ fn bench_record_flat_access(n: i32) -> impl IntoBenchmarks {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_record_nested_access(n: i32) -> impl IntoBenchmarks {
|
fn bench_record_nested_access(n: usize) -> impl IntoBenchmarks {
|
||||||
let setup_command = create_nested_record_string(n);
|
let setup_command = create_nested_record_string(n);
|
||||||
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
||||||
let nested_access = ".col".repeat(n as usize);
|
let nested_access = ".col".repeat(n);
|
||||||
bench_command(
|
bench_command(
|
||||||
&format!("record_nested_access_{n}"),
|
&format!("record_nested_access_{n}"),
|
||||||
&format!("$record{} | ignore", nested_access),
|
&format!("$record{} | ignore", nested_access),
|
||||||
@ -210,7 +205,18 @@ fn bench_record_nested_access(n: i32) -> impl IntoBenchmarks {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_table_create(n: i32) -> impl IntoBenchmarks {
|
fn bench_record_insert(n: usize, m: usize) -> impl IntoBenchmarks {
|
||||||
|
let setup_command = create_flat_record_string(n);
|
||||||
|
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
||||||
|
let mut insert = String::from("$record");
|
||||||
|
for i in n..(n + m) {
|
||||||
|
write!(insert, " | insert col_{i} {i}").unwrap();
|
||||||
|
}
|
||||||
|
insert.push_str(" | ignore");
|
||||||
|
bench_command(&format!("record_insert_{n}_{m}"), &insert, stack, engine)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bench_table_create(n: usize) -> impl IntoBenchmarks {
|
||||||
bench_command(
|
bench_command(
|
||||||
&format!("table_create_{n}"),
|
&format!("table_create_{n}"),
|
||||||
&create_example_table_nrows(n),
|
&create_example_table_nrows(n),
|
||||||
@ -219,7 +225,7 @@ fn bench_table_create(n: i32) -> impl IntoBenchmarks {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_table_get(n: i32) -> impl IntoBenchmarks {
|
fn bench_table_get(n: usize) -> impl IntoBenchmarks {
|
||||||
let setup_command = create_example_table_nrows(n);
|
let setup_command = create_example_table_nrows(n);
|
||||||
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
||||||
bench_command(
|
bench_command(
|
||||||
@ -230,7 +236,7 @@ fn bench_table_get(n: i32) -> impl IntoBenchmarks {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_table_select(n: i32) -> impl IntoBenchmarks {
|
fn bench_table_select(n: usize) -> impl IntoBenchmarks {
|
||||||
let setup_command = create_example_table_nrows(n);
|
let setup_command = create_example_table_nrows(n);
|
||||||
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
||||||
bench_command(
|
bench_command(
|
||||||
@ -241,7 +247,29 @@ fn bench_table_select(n: i32) -> impl IntoBenchmarks {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_eval_interleave(n: i32) -> impl IntoBenchmarks {
|
fn bench_table_insert_row(n: usize, m: usize) -> impl IntoBenchmarks {
|
||||||
|
let setup_command = create_example_table_nrows(n);
|
||||||
|
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
||||||
|
let mut insert = String::from("$table");
|
||||||
|
for i in n..(n + m) {
|
||||||
|
write!(insert, " | insert {i} {{ foo: 0, bar: 1, baz: {i} }}").unwrap();
|
||||||
|
}
|
||||||
|
insert.push_str(" | ignore");
|
||||||
|
bench_command(&format!("table_insert_row_{n}_{m}"), &insert, stack, engine)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bench_table_insert_col(n: usize, m: usize) -> impl IntoBenchmarks {
|
||||||
|
let setup_command = create_example_table_nrows(n);
|
||||||
|
let (stack, engine) = setup_stack_and_engine_from_command(&setup_command);
|
||||||
|
let mut insert = String::from("$table");
|
||||||
|
for i in 0..m {
|
||||||
|
write!(insert, " | insert col_{i} {i}").unwrap();
|
||||||
|
}
|
||||||
|
insert.push_str(" | ignore");
|
||||||
|
bench_command(&format!("table_insert_col_{n}_{m}"), &insert, stack, engine)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bench_eval_interleave(n: usize) -> impl IntoBenchmarks {
|
||||||
let engine = setup_engine();
|
let engine = setup_engine();
|
||||||
let stack = Stack::new();
|
let stack = Stack::new();
|
||||||
bench_command(
|
bench_command(
|
||||||
@ -252,7 +280,7 @@ fn bench_eval_interleave(n: i32) -> impl IntoBenchmarks {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_eval_interleave_with_interrupt(n: i32) -> impl IntoBenchmarks {
|
fn bench_eval_interleave_with_interrupt(n: usize) -> impl IntoBenchmarks {
|
||||||
let mut engine = setup_engine();
|
let mut engine = setup_engine();
|
||||||
engine.set_signals(Signals::new(Arc::new(AtomicBool::new(false))));
|
engine.set_signals(Signals::new(Arc::new(AtomicBool::new(false))));
|
||||||
let stack = Stack::new();
|
let stack = Stack::new();
|
||||||
@ -264,7 +292,7 @@ fn bench_eval_interleave_with_interrupt(n: i32) -> impl IntoBenchmarks {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_eval_for(n: i32) -> impl IntoBenchmarks {
|
fn bench_eval_for(n: usize) -> impl IntoBenchmarks {
|
||||||
let engine = setup_engine();
|
let engine = setup_engine();
|
||||||
let stack = Stack::new();
|
let stack = Stack::new();
|
||||||
bench_command(
|
bench_command(
|
||||||
@ -275,7 +303,7 @@ fn bench_eval_for(n: i32) -> impl IntoBenchmarks {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_eval_each(n: i32) -> impl IntoBenchmarks {
|
fn bench_eval_each(n: usize) -> impl IntoBenchmarks {
|
||||||
let engine = setup_engine();
|
let engine = setup_engine();
|
||||||
let stack = Stack::new();
|
let stack = Stack::new();
|
||||||
bench_command(
|
bench_command(
|
||||||
@ -286,7 +314,7 @@ fn bench_eval_each(n: i32) -> impl IntoBenchmarks {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bench_eval_par_each(n: i32) -> impl IntoBenchmarks {
|
fn bench_eval_par_each(n: usize) -> impl IntoBenchmarks {
|
||||||
let engine = setup_engine();
|
let engine = setup_engine();
|
||||||
let stack = Stack::new();
|
let stack = Stack::new();
|
||||||
bench_command(
|
bench_command(
|
||||||
@ -427,6 +455,14 @@ tango_benchmarks!(
|
|||||||
bench_record_nested_access(32),
|
bench_record_nested_access(32),
|
||||||
bench_record_nested_access(64),
|
bench_record_nested_access(64),
|
||||||
bench_record_nested_access(128),
|
bench_record_nested_access(128),
|
||||||
|
bench_record_insert(1, 1),
|
||||||
|
bench_record_insert(10, 1),
|
||||||
|
bench_record_insert(100, 1),
|
||||||
|
bench_record_insert(1000, 1),
|
||||||
|
bench_record_insert(1, 10),
|
||||||
|
bench_record_insert(10, 10),
|
||||||
|
bench_record_insert(100, 10),
|
||||||
|
bench_record_insert(1000, 10),
|
||||||
// Table
|
// Table
|
||||||
bench_table_create(1),
|
bench_table_create(1),
|
||||||
bench_table_create(10),
|
bench_table_create(10),
|
||||||
@ -440,6 +476,22 @@ tango_benchmarks!(
|
|||||||
bench_table_select(10),
|
bench_table_select(10),
|
||||||
bench_table_select(100),
|
bench_table_select(100),
|
||||||
bench_table_select(1_000),
|
bench_table_select(1_000),
|
||||||
|
bench_table_insert_row(1, 1),
|
||||||
|
bench_table_insert_row(10, 1),
|
||||||
|
bench_table_insert_row(100, 1),
|
||||||
|
bench_table_insert_row(1000, 1),
|
||||||
|
bench_table_insert_row(1, 10),
|
||||||
|
bench_table_insert_row(10, 10),
|
||||||
|
bench_table_insert_row(100, 10),
|
||||||
|
bench_table_insert_row(1000, 10),
|
||||||
|
bench_table_insert_col(1, 1),
|
||||||
|
bench_table_insert_col(10, 1),
|
||||||
|
bench_table_insert_col(100, 1),
|
||||||
|
bench_table_insert_col(1000, 1),
|
||||||
|
bench_table_insert_col(1, 10),
|
||||||
|
bench_table_insert_col(10, 10),
|
||||||
|
bench_table_insert_col(100, 10),
|
||||||
|
bench_table_insert_col(1000, 10),
|
||||||
// Eval
|
// Eval
|
||||||
// Interleave
|
// Interleave
|
||||||
bench_eval_interleave(100),
|
bench_eval_interleave(100),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user