mirror of
https://github.com/nushell/nushell
synced 2024-12-31 23:39:00 +00:00
456e2a8ee3
# Description we talked about this before in some meetings so i thought, why not? the hope is that these constants do not require Rust code to be implemented and that this move will make the Rust source base a bit smaller 🤞 # User-Facing Changes mathematical constants (e, pi, tau, phi and gamma) are now in `std math` rather than `math` ## what can be done ```nushell > use std; $std.math > use std math; $math > use std *; $math ``` will all give ``` ╭───────┬────────────────────╮ │ GAMMA │ 0.5772156649015329 │ │ E │ 2.718281828459045 │ │ PI │ 3.141592653589793 │ │ TAU │ 6.283185307179586 │ │ PHI │ 1.618033988749895 │ ╰───────┴────────────────────╯ ``` and the following will work too ```nushell > use std math E; $E 2.718281828459045 ``` ```nushell > use std math *; $GAMMA 0.5772156649015329 ``` ## what can NOT be done looks like every export works fine now 😌 # Tests + Formatting # After Submitting
77 lines
2.5 KiB
Rust
77 lines
2.5 KiB
Rust
#[cfg(test)]
|
|
use nu_protocol::engine::Command;
|
|
|
|
#[cfg(test)]
|
|
pub fn test_examples(cmd: impl Command + 'static) {
|
|
test_examples::test_examples(cmd);
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod test_examples {
|
|
|
|
use nu_cmd_lang::example_support::{
|
|
check_all_signature_input_output_types_entries_have_examples,
|
|
check_example_evaluates_to_expected_output,
|
|
check_example_input_and_output_types_match_command_signature,
|
|
};
|
|
|
|
use nu_protocol::{
|
|
engine::{Command, EngineState, StateWorkingSet},
|
|
Type,
|
|
};
|
|
use std::collections::HashSet;
|
|
|
|
pub fn test_examples(cmd: impl Command + 'static) {
|
|
let examples = cmd.examples();
|
|
let signature = cmd.signature();
|
|
let mut engine_state = make_engine_state(cmd.clone_box());
|
|
|
|
let cwd = std::env::current_dir().expect("Could not get current working directory.");
|
|
|
|
let mut witnessed_type_transformations = HashSet::<(Type, Type)>::new();
|
|
|
|
for example in examples {
|
|
if example.result.is_none() {
|
|
continue;
|
|
}
|
|
witnessed_type_transformations.extend(
|
|
check_example_input_and_output_types_match_command_signature(
|
|
&example,
|
|
&cwd,
|
|
&mut make_engine_state(cmd.clone_box()),
|
|
&signature.input_output_types,
|
|
signature.operates_on_cell_paths(),
|
|
),
|
|
);
|
|
check_example_evaluates_to_expected_output(&example, cwd.as_path(), &mut engine_state);
|
|
}
|
|
|
|
check_all_signature_input_output_types_entries_have_examples(
|
|
signature,
|
|
witnessed_type_transformations,
|
|
);
|
|
}
|
|
|
|
fn make_engine_state(cmd: Box<dyn Command>) -> Box<EngineState> {
|
|
let mut engine_state = Box::new(EngineState::new());
|
|
|
|
let delta = {
|
|
// Base functions that are needed for testing
|
|
// Try to keep this working set small to keep tests running as fast as possible
|
|
let mut working_set = StateWorkingSet::new(&engine_state);
|
|
|
|
working_set.add_decl(Box::new(nu_command::Enumerate));
|
|
working_set.add_decl(Box::new(nu_cmd_lang::If));
|
|
working_set.add_decl(Box::new(nu_command::MathRound));
|
|
|
|
// Adding the command that is being tested to the working set
|
|
working_set.add_decl(cmd);
|
|
working_set.render()
|
|
};
|
|
|
|
engine_state
|
|
.merge_delta(delta)
|
|
.expect("Error merging delta");
|
|
engine_state
|
|
}
|
|
}
|