diff --git a/crates/nu-command/src/default_context.rs b/crates/nu-command/src/default_context.rs index e8afbf5f08..29bea52935 100644 --- a/crates/nu-command/src/default_context.rs +++ b/crates/nu-command/src/default_context.rs @@ -419,6 +419,7 @@ pub fn create_default_context() -> EngineState { MathArcCosH, MathArcTanH, MathPi, + MathTau, MathEuler, MathLn, }; diff --git a/crates/nu-command/src/math/mod.rs b/crates/nu-command/src/math/mod.rs index ed999b634d..ec7e76b557 100644 --- a/crates/nu-command/src/math/mod.rs +++ b/crates/nu-command/src/math/mod.rs @@ -29,6 +29,7 @@ mod stddev; mod sum; mod tan; mod tanh; +mod tau; mod utils; mod variance; @@ -65,5 +66,6 @@ pub use arctanh::SubCommand as MathArcTanH; pub use euler::SubCommand as MathEuler; pub use pi::SubCommand as MathPi; +pub use tau::SubCommand as MathTau; pub use ln::SubCommand as MathLn; diff --git a/crates/nu-command/src/math/tau.rs b/crates/nu-command/src/math/tau.rs new file mode 100644 index 0000000000..9f351b3720 --- /dev/null +++ b/crates/nu-command/src/math/tau.rs @@ -0,0 +1,61 @@ +use nu_protocol::ast::Call; +use nu_protocol::engine::{Command, EngineState, Stack}; +use nu_protocol::{Category, Example, IntoPipelineData, PipelineData, Signature, Type, Value}; + +#[derive(Clone)] +pub struct SubCommand; + +impl Command for SubCommand { + fn name(&self) -> &str { + "math tau" + } + + fn signature(&self) -> Signature { + Signature::build("math tau") + .input_output_types(vec![(Type::Any, Type::Float)]) + .category(Category::Math) + } + + fn usage(&self) -> &str { + "Returns the mathematical constant τ." + } + + fn search_terms(&self) -> Vec<&str> { + vec!["trigonometry", "constant"] + } + + #[allow(clippy::approx_constant)] + fn examples(&self) -> Vec { + vec![Example { + example: "(math tau) / 2", + description: "Compare π and τ", + result: Some(Value::test_float(std::f64::consts::PI)), + }] + } + + fn run( + &self, + _engine_state: &EngineState, + _stack: &mut Stack, + call: &Call, + _input: PipelineData, + ) -> Result { + Ok(Value::Float { + val: std::f64::consts::TAU, + span: call.head, + } + .into_pipeline_data()) + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_examples() { + use crate::test_examples; + + test_examples(SubCommand {}) + } +}