diff --git a/rust/kcl-lib/src/execution/mod.rs b/rust/kcl-lib/src/execution/mod.rs index e2c5ae86509..ed701d5442f 100644 --- a/rust/kcl-lib/src/execution/mod.rs +++ b/rust/kcl-lib/src/execution/mod.rs @@ -2470,6 +2470,20 @@ sketch2 = startSketchOn(solid, face = tag0) |> line(end = [0, 0]) foo() |> extrude(length = 1) +"#; + parse_execute(ast).await.unwrap(); + } + + #[tokio::test(flavor = "multi_thread")] + async fn vector_module() { + let ast = r#" +cylinder = startSketchOn(XY) + |> circle(center = [0.67, 0.47], radius = 1.06) + |> extrude(length = 5) + +p = planeOf(cylinder, face = END) +q = vector::cross(p.xAxis, v = p.yAxis) +r = vector::cross(p.xAxis, v = q) "#; parse_execute(ast).await.unwrap(); } diff --git a/rust/kcl-lib/std/vector.kcl b/rust/kcl-lib/std/vector.kcl index 78dbdbf9a18..360f749cf4a 100644 --- a/rust/kcl-lib/std/vector.kcl +++ b/rust/kcl-lib/std/vector.kcl @@ -93,12 +93,11 @@ export fn div(@u: [number], v: [number]): [number] { /// assert(vz[1], isEqualTo = 0) /// assert(vz[2], isEqualTo = 1) /// ``` -export fn cross(@u: Point3d, v: Point3d) { - return [ - u[1] * v[2] - (u[2] * v[1]), - u[2] * v[0] - (u[0] * v[2]), - u[0] * v[1] - (u[1] * v[0]) - ] +export fn cross(@u: [number; 3], v: [number; 3]): [number; 3] { + x = (u[1] * v[2] - (u[2] * v[1])) + y = (u[2] * v[0] - (u[0] * v[2])) + z = (u[0] * v[1] - (u[1] * v[0])) + return [x, y, z] } /// Find the dot product of two points or vectors of any dimension.