Add support for float numbers in rem() arguments (#4858)

* Add support for float numbers in rem() arguments

* Update docs

* Rename to prevent name collision in docs

* Update docs after rename to NumberArg

* Fix parameter types to follow naming convention

* Change doc comment description to not refer to floating point

* Update docs after NumberArg doc change

* Change function to be more condensed

* Change to not try to preserve ints

* Update docs to use f64

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-macos-8-cores)

* Trigger CI

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
Jonathan Tran
2025-01-02 16:52:01 -05:00
committed by GitHub
parent d478d81156
commit ac7bd28c5a
4 changed files with 27 additions and 30 deletions

File diff suppressed because one or more lines are too long

View File

@ -153550,12 +153550,12 @@
"args": [ "args": [
{ {
"name": "num", "name": "num",
"type": "i64", "type": "number",
"schema": { "schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "int64", "title": "double",
"type": "integer", "type": "number",
"format": "int64" "format": "double"
}, },
"required": true, "required": true,
"description": "The number which will be divided by `divisor`.", "description": "The number which will be divided by `divisor`.",
@ -153563,12 +153563,12 @@
}, },
{ {
"name": "divisor", "name": "divisor",
"type": "i64", "type": "number",
"schema": { "schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "int64", "title": "double",
"type": "integer", "type": "number",
"format": "int64" "format": "double"
}, },
"required": true, "required": true,
"description": "The number which will divide `num`.", "description": "The number which will divide `num`.",
@ -153577,12 +153577,12 @@
], ],
"returnValue": { "returnValue": {
"name": "", "name": "",
"type": "i64", "type": "number",
"schema": { "schema": {
"$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema",
"title": "int64", "title": "double",
"type": "integer", "type": "number",
"format": "int64" "format": "double"
}, },
"required": true, "required": true,
"labelRequired": true "labelRequired": true
@ -153590,7 +153590,7 @@
"unpublished": false, "unpublished": false,
"deprecated": false, "deprecated": false,
"examples": [ "examples": [
"assertEqual(rem(7, divisor = 4), 3, 0.01, \"remainder is 3\")\nassertEqual(rem(-7, divisor = 4), -3, 0.01, \"remainder is -3\")\nassertEqual(rem(7, divisor = -4), 3, 0.01, \"remainder is 3\")" "assertEqual(rem(7, divisor = 4), 3, 0.01, \"remainder is 3\")\nassertEqual(rem(-7, divisor = 4), -3, 0.01, \"remainder is -3\")\nassertEqual(rem(7, divisor = -4), 3, 0.01, \"remainder is 3\")\nassertEqual(rem(6, divisor = 2.5), 1, 0.01, \"remainder is 1\")\nassertEqual(rem(6.5, divisor = 2.5), 1.5, 0.01, \"remainder is 1.5\")\nassertEqual(rem(6.5, divisor = 2), 0.5, 0.01, \"remainder is 0.5\")"
] ]
}, },
{ {

View File

@ -322,15 +322,6 @@ impl Args {
) )
} }
pub(crate) fn make_user_val_from_i64(&self, n: i64) -> KclValue {
KclValue::Int {
value: n,
meta: vec![Metadata {
source_range: self.source_range,
}],
}
}
pub(crate) fn make_user_val_from_f64_array(&self, f: Vec<f64>) -> Result<KclValue, KclError> { pub(crate) fn make_user_val_from_f64_array(&self, f: Vec<f64>) -> Result<KclValue, KclError> {
let array = f let array = f
.into_iter() .into_iter()

View File

@ -16,9 +16,9 @@ use super::args::FromArgs;
pub async fn rem(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> { pub async fn rem(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let n = args.get_unlabeled_kw_arg("number to divide")?; let n = args.get_unlabeled_kw_arg("number to divide")?;
let d = args.get_kw_arg("divisor")?; let d = args.get_kw_arg("divisor")?;
let result = inner_rem(n, d)?; let remainder = inner_rem(n, d);
Ok(args.make_user_val_from_i64(result)) Ok(args.make_user_val_from_f64(remainder))
} }
/// Compute the remainder after dividing `num` by `div`. /// Compute the remainder after dividing `num` by `div`.
@ -28,6 +28,9 @@ pub async fn rem(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kc
/// assertEqual(rem( 7, divisor = 4), 3, 0.01, "remainder is 3" ) /// assertEqual(rem( 7, divisor = 4), 3, 0.01, "remainder is 3" )
/// assertEqual(rem(-7, divisor = 4), -3, 0.01, "remainder is -3") /// assertEqual(rem(-7, divisor = 4), -3, 0.01, "remainder is -3")
/// assertEqual(rem( 7, divisor = -4), 3, 0.01, "remainder is 3" ) /// assertEqual(rem( 7, divisor = -4), 3, 0.01, "remainder is 3" )
/// assertEqual(rem( 6, divisor = 2.5), 1, 0.01, "remainder is 1" )
/// assertEqual(rem( 6.5, divisor = 2.5), 1.5, 0.01, "remainder is 1.5" )
/// assertEqual(rem( 6.5, divisor = 2), 0.5, 0.01, "remainder is 0.5" )
/// ``` /// ```
#[stdlib { #[stdlib {
name = "rem", name = "rem",
@ -39,8 +42,8 @@ pub async fn rem(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kc
divisor = "The number which will divide `num`.", divisor = "The number which will divide `num`.",
} }
}] }]
fn inner_rem(num: i64, divisor: i64) -> Result<i64, KclError> { fn inner_rem(num: f64, divisor: f64) -> f64 {
Ok(num % divisor) num % divisor
} }
/// Compute the cosine of a number (in radians). /// Compute the cosine of a number (in radians).