Compare commits
4 Commits
jtran/fix-
...
guptaarnav
Author | SHA1 | Date | |
---|---|---|---|
8b9580b178 | |||
34032b6cb7 | |||
d4ebddf75f | |||
b7d729a4b4 |
@ -59,6 +59,7 @@ layout: manual
|
|||||||
* [`legAngX`](kcl/legAngX)
|
* [`legAngX`](kcl/legAngX)
|
||||||
* [`legAngY`](kcl/legAngY)
|
* [`legAngY`](kcl/legAngY)
|
||||||
* [`legLen`](kcl/legLen)
|
* [`legLen`](kcl/legLen)
|
||||||
|
* [`len`](kcl/len)
|
||||||
* [`line`](kcl/line)
|
* [`line`](kcl/line)
|
||||||
* [`lineTo`](kcl/lineTo)
|
* [`lineTo`](kcl/lineTo)
|
||||||
* [`ln`](kcl/ln)
|
* [`ln`](kcl/ln)
|
||||||
|
37
docs/kcl/len.md
Normal file
37
docs/kcl/len.md
Normal file
File diff suppressed because one or more lines are too long
4850
docs/kcl/std.json
4850
docs/kcl/std.json
File diff suppressed because it is too large
Load Diff
@ -1755,3 +1755,24 @@ mod array_elem_pop_fail {
|
|||||||
super::execute(TEST_NAME, false).await
|
super::execute(TEST_NAME, false).await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mod array_length {
|
||||||
|
const TEST_NAME: &str = "array_length";
|
||||||
|
|
||||||
|
/// Test parsing KCL.
|
||||||
|
#[test]
|
||||||
|
fn parse() {
|
||||||
|
super::parse(TEST_NAME)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Test that parsing and unparsing KCL produces the original KCL input.
|
||||||
|
#[test]
|
||||||
|
fn unparse() {
|
||||||
|
super::unparse(TEST_NAME)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Test that KCL is executed correctly.
|
||||||
|
#[tokio::test(flavor = "multi_thread")]
|
||||||
|
async fn kcl_test_execute() {
|
||||||
|
super::execute(TEST_NAME, false).await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -308,3 +308,40 @@ pub async fn pop(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, Kc
|
|||||||
|
|
||||||
inner_pop(array, &args).await
|
inner_pop(array, &args).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get the length of an array.
|
||||||
|
///
|
||||||
|
/// Returns the number of elements in an array.
|
||||||
|
///
|
||||||
|
/// ```no_run
|
||||||
|
/// arr = [1, 2, 3]
|
||||||
|
/// length = len(arr)
|
||||||
|
/// assertEqual(length, 3, 0.00001, "The length of the array is 3")
|
||||||
|
/// ```
|
||||||
|
#[stdlib {
|
||||||
|
name = "len",
|
||||||
|
keywords = true,
|
||||||
|
unlabeled_first = true,
|
||||||
|
arg_docs = {
|
||||||
|
array = "The array to get the length of.",
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
async fn inner_len(array: Vec<KclValue>, args: &Args) -> Result<KclValue, KclError> {
|
||||||
|
Ok(KclValue::Number {
|
||||||
|
value: array.len() as f64,
|
||||||
|
meta: vec![args.source_range.into()],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn len(_exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
|
||||||
|
let val = args.get_unlabeled_kw_arg("array")?;
|
||||||
|
let meta = vec![args.source_range];
|
||||||
|
let KclValue::Array { value: array, meta: _ } = val else {
|
||||||
|
let actual_type = val.human_friendly_type();
|
||||||
|
return Err(KclError::Semantic(KclErrorDetails {
|
||||||
|
source_ranges: meta,
|
||||||
|
message: format!("You can't get the length of a value of type {actual_type}, only an array"),
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
inner_len(array, &args).await
|
||||||
|
}
|
||||||
|
@ -108,6 +108,7 @@ lazy_static! {
|
|||||||
Box::new(crate::std::array::Reduce),
|
Box::new(crate::std::array::Reduce),
|
||||||
Box::new(crate::std::array::Map),
|
Box::new(crate::std::array::Map),
|
||||||
Box::new(crate::std::array::Push),
|
Box::new(crate::std::array::Push),
|
||||||
|
Box::new(crate::std::array::Len),
|
||||||
Box::new(crate::std::array::Pop),
|
Box::new(crate::std::array::Pop),
|
||||||
Box::new(crate::std::chamfer::Chamfer),
|
Box::new(crate::std::chamfer::Chamfer),
|
||||||
Box::new(crate::std::fillet::Fillet),
|
Box::new(crate::std::fillet::Fillet),
|
||||||
|
284
src/wasm-lib/kcl/tests/array_length/artifact_commands.snap
Normal file
284
src/wasm-lib/kcl/tests/array_length/artifact_commands.snap
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
---
|
||||||
|
source: kcl/src/simulation_tests.rs
|
||||||
|
description: Artifact commands array_length.kcl
|
||||||
|
---
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "make_plane",
|
||||||
|
"origin": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"x_axis": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"y_axis": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"size": 100.0,
|
||||||
|
"clobber": false,
|
||||||
|
"hide": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "plane_set_color",
|
||||||
|
"plane_id": "[uuid]",
|
||||||
|
"color": {
|
||||||
|
"r": 0.7,
|
||||||
|
"g": 0.28,
|
||||||
|
"b": 0.28,
|
||||||
|
"a": 0.4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "make_plane",
|
||||||
|
"origin": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"x_axis": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"y_axis": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 1.0
|
||||||
|
},
|
||||||
|
"size": 100.0,
|
||||||
|
"clobber": false,
|
||||||
|
"hide": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "plane_set_color",
|
||||||
|
"plane_id": "[uuid]",
|
||||||
|
"color": {
|
||||||
|
"r": 0.28,
|
||||||
|
"g": 0.7,
|
||||||
|
"b": 0.28,
|
||||||
|
"a": 0.4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "make_plane",
|
||||||
|
"origin": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"x_axis": {
|
||||||
|
"x": 1.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"y_axis": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 1.0
|
||||||
|
},
|
||||||
|
"size": 100.0,
|
||||||
|
"clobber": false,
|
||||||
|
"hide": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "plane_set_color",
|
||||||
|
"plane_id": "[uuid]",
|
||||||
|
"color": {
|
||||||
|
"r": 0.28,
|
||||||
|
"g": 0.28,
|
||||||
|
"b": 0.7,
|
||||||
|
"a": 0.4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "make_plane",
|
||||||
|
"origin": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"x_axis": {
|
||||||
|
"x": -1.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"y_axis": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 1.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"size": 100.0,
|
||||||
|
"clobber": false,
|
||||||
|
"hide": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "make_plane",
|
||||||
|
"origin": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"x_axis": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": -1.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"y_axis": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 1.0
|
||||||
|
},
|
||||||
|
"size": 100.0,
|
||||||
|
"clobber": false,
|
||||||
|
"hide": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "make_plane",
|
||||||
|
"origin": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"x_axis": {
|
||||||
|
"x": -1.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 0.0
|
||||||
|
},
|
||||||
|
"y_axis": {
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"z": 1.0
|
||||||
|
},
|
||||||
|
"size": 100.0,
|
||||||
|
"clobber": false,
|
||||||
|
"hide": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "edge_lines_visible",
|
||||||
|
"hidden": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "set_scene_units",
|
||||||
|
"unit": "mm"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "object_visible",
|
||||||
|
"object_id": "[uuid]",
|
||||||
|
"hidden": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cmdId": "[uuid]",
|
||||||
|
"range": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"command": {
|
||||||
|
"type": "object_visible",
|
||||||
|
"object_id": "[uuid]",
|
||||||
|
"hidden": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
282
src/wasm-lib/kcl/tests/array_length/ast.snap
Normal file
282
src/wasm-lib/kcl/tests/array_length/ast.snap
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
---
|
||||||
|
source: kcl/src/simulation_tests.rs
|
||||||
|
description: Result of parsing array_length.kcl
|
||||||
|
---
|
||||||
|
{
|
||||||
|
"Ok": {
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"declaration": {
|
||||||
|
"end": 15,
|
||||||
|
"id": {
|
||||||
|
"end": 3,
|
||||||
|
"name": "arr",
|
||||||
|
"start": 0,
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
"init": {
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"end": 8,
|
||||||
|
"raw": "1",
|
||||||
|
"start": 7,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": 1.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": 11,
|
||||||
|
"raw": "2",
|
||||||
|
"start": 10,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": 2.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": 14,
|
||||||
|
"raw": "3",
|
||||||
|
"start": 13,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": 3.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"end": 15,
|
||||||
|
"start": 6,
|
||||||
|
"type": "ArrayExpression",
|
||||||
|
"type": "ArrayExpression"
|
||||||
|
},
|
||||||
|
"start": 0,
|
||||||
|
"type": "VariableDeclarator"
|
||||||
|
},
|
||||||
|
"end": 15,
|
||||||
|
"kind": "const",
|
||||||
|
"start": 0,
|
||||||
|
"type": "VariableDeclaration",
|
||||||
|
"type": "VariableDeclaration"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"declaration": {
|
||||||
|
"end": 34,
|
||||||
|
"id": {
|
||||||
|
"end": 23,
|
||||||
|
"name": "arr_len",
|
||||||
|
"start": 16,
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
"init": {
|
||||||
|
"arguments": [
|
||||||
|
{
|
||||||
|
"end": 33,
|
||||||
|
"name": "arr",
|
||||||
|
"start": 30,
|
||||||
|
"type": "Identifier",
|
||||||
|
"type": "Identifier"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"callee": {
|
||||||
|
"end": 29,
|
||||||
|
"name": "len",
|
||||||
|
"start": 26,
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
"end": 34,
|
||||||
|
"start": 26,
|
||||||
|
"type": "CallExpression",
|
||||||
|
"type": "CallExpression"
|
||||||
|
},
|
||||||
|
"start": 16,
|
||||||
|
"type": "VariableDeclarator"
|
||||||
|
},
|
||||||
|
"end": 34,
|
||||||
|
"kind": "const",
|
||||||
|
"start": 16,
|
||||||
|
"type": "VariableDeclaration",
|
||||||
|
"type": "VariableDeclaration"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": 99,
|
||||||
|
"expression": {
|
||||||
|
"arguments": [
|
||||||
|
{
|
||||||
|
"end": 54,
|
||||||
|
"name": "arr_len",
|
||||||
|
"start": 47,
|
||||||
|
"type": "Identifier",
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": 57,
|
||||||
|
"raw": "3",
|
||||||
|
"start": 56,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": 3.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": 66,
|
||||||
|
"raw": "0.00001",
|
||||||
|
"start": 59,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": 0.00001
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": 98,
|
||||||
|
"raw": "\"The length of the array is 3\"",
|
||||||
|
"start": 68,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": "The length of the array is 3"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"callee": {
|
||||||
|
"end": 46,
|
||||||
|
"name": "assertEqual",
|
||||||
|
"start": 35,
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
"end": 99,
|
||||||
|
"start": 35,
|
||||||
|
"type": "CallExpression",
|
||||||
|
"type": "CallExpression"
|
||||||
|
},
|
||||||
|
"start": 35,
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"type": "ExpressionStatement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"declaration": {
|
||||||
|
"end": 115,
|
||||||
|
"id": {
|
||||||
|
"end": 110,
|
||||||
|
"name": "arr_empty",
|
||||||
|
"start": 101,
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
"init": {
|
||||||
|
"elements": [],
|
||||||
|
"end": 115,
|
||||||
|
"start": 113,
|
||||||
|
"type": "ArrayExpression",
|
||||||
|
"type": "ArrayExpression"
|
||||||
|
},
|
||||||
|
"start": 101,
|
||||||
|
"type": "VariableDeclarator"
|
||||||
|
},
|
||||||
|
"end": 115,
|
||||||
|
"kind": "const",
|
||||||
|
"start": 101,
|
||||||
|
"type": "VariableDeclaration",
|
||||||
|
"type": "VariableDeclaration"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"declaration": {
|
||||||
|
"end": 142,
|
||||||
|
"id": {
|
||||||
|
"end": 125,
|
||||||
|
"name": "len_empty",
|
||||||
|
"start": 116,
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
"init": {
|
||||||
|
"arguments": [
|
||||||
|
{
|
||||||
|
"end": 141,
|
||||||
|
"name": "arr_empty",
|
||||||
|
"start": 132,
|
||||||
|
"type": "Identifier",
|
||||||
|
"type": "Identifier"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"callee": {
|
||||||
|
"end": 131,
|
||||||
|
"name": "len",
|
||||||
|
"start": 128,
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
"end": 142,
|
||||||
|
"start": 128,
|
||||||
|
"type": "CallExpression",
|
||||||
|
"type": "CallExpression"
|
||||||
|
},
|
||||||
|
"start": 116,
|
||||||
|
"type": "VariableDeclarator"
|
||||||
|
},
|
||||||
|
"end": 142,
|
||||||
|
"kind": "const",
|
||||||
|
"start": 116,
|
||||||
|
"type": "VariableDeclaration",
|
||||||
|
"type": "VariableDeclaration"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": 209,
|
||||||
|
"expression": {
|
||||||
|
"arguments": [
|
||||||
|
{
|
||||||
|
"end": 164,
|
||||||
|
"name": "len_empty",
|
||||||
|
"start": 155,
|
||||||
|
"type": "Identifier",
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": 167,
|
||||||
|
"raw": "0",
|
||||||
|
"start": 166,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": 0.0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": 176,
|
||||||
|
"raw": "0.00001",
|
||||||
|
"start": 169,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": 0.00001
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"end": 208,
|
||||||
|
"raw": "\"The length of the array is 0\"",
|
||||||
|
"start": 178,
|
||||||
|
"type": "Literal",
|
||||||
|
"type": "Literal",
|
||||||
|
"value": "The length of the array is 0"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"callee": {
|
||||||
|
"end": 154,
|
||||||
|
"name": "assertEqual",
|
||||||
|
"start": 143,
|
||||||
|
"type": "Identifier"
|
||||||
|
},
|
||||||
|
"end": 209,
|
||||||
|
"start": 143,
|
||||||
|
"type": "CallExpression",
|
||||||
|
"type": "CallExpression"
|
||||||
|
},
|
||||||
|
"start": 143,
|
||||||
|
"type": "ExpressionStatement",
|
||||||
|
"type": "ExpressionStatement"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"end": 210,
|
||||||
|
"nonCodeMeta": {
|
||||||
|
"nonCodeNodes": {
|
||||||
|
"2": [
|
||||||
|
{
|
||||||
|
"end": 101,
|
||||||
|
"start": 99,
|
||||||
|
"type": "NonCodeNode",
|
||||||
|
"value": {
|
||||||
|
"type": "newLine"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"startNodes": []
|
||||||
|
},
|
||||||
|
"start": 0
|
||||||
|
}
|
||||||
|
}
|
7
src/wasm-lib/kcl/tests/array_length/input.kcl
Normal file
7
src/wasm-lib/kcl/tests/array_length/input.kcl
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
arr = [1, 2, 3]
|
||||||
|
arr_len = len(arr)
|
||||||
|
assertEqual(arr_len, 3, 0.00001, "The length of the array is 3")
|
||||||
|
|
||||||
|
arr_empty = []
|
||||||
|
len_empty = len(arr_empty)
|
||||||
|
assertEqual(len_empty, 0, 0.00001, "The length of the array is 0")
|
5
src/wasm-lib/kcl/tests/array_length/ops.snap
Normal file
5
src/wasm-lib/kcl/tests/array_length/ops.snap
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
source: kcl/src/simulation_tests.rs
|
||||||
|
description: Operations executed array_length.kcl
|
||||||
|
---
|
||||||
|
[]
|
127
src/wasm-lib/kcl/tests/array_length/program_memory.snap
Normal file
127
src/wasm-lib/kcl/tests/array_length/program_memory.snap
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
---
|
||||||
|
source: kcl/src/simulation_tests.rs
|
||||||
|
description: Program memory after executing array_length.kcl
|
||||||
|
---
|
||||||
|
{
|
||||||
|
"environments": [
|
||||||
|
{
|
||||||
|
"bindings": {
|
||||||
|
"HALF_TURN": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 180.0,
|
||||||
|
"__meta": []
|
||||||
|
},
|
||||||
|
"QUARTER_TURN": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 90.0,
|
||||||
|
"__meta": []
|
||||||
|
},
|
||||||
|
"THREE_QUARTER_TURN": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 270.0,
|
||||||
|
"__meta": []
|
||||||
|
},
|
||||||
|
"ZERO": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 0.0,
|
||||||
|
"__meta": []
|
||||||
|
},
|
||||||
|
"arr": {
|
||||||
|
"type": "Array",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"type": "Number",
|
||||||
|
"value": 1.0,
|
||||||
|
"__meta": [
|
||||||
|
{
|
||||||
|
"sourceRange": [
|
||||||
|
7,
|
||||||
|
8,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Number",
|
||||||
|
"value": 2.0,
|
||||||
|
"__meta": [
|
||||||
|
{
|
||||||
|
"sourceRange": [
|
||||||
|
10,
|
||||||
|
11,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Number",
|
||||||
|
"value": 3.0,
|
||||||
|
"__meta": [
|
||||||
|
{
|
||||||
|
"sourceRange": [
|
||||||
|
13,
|
||||||
|
14,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"__meta": [
|
||||||
|
{
|
||||||
|
"sourceRange": [
|
||||||
|
6,
|
||||||
|
15,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"arr_empty": {
|
||||||
|
"type": "Array",
|
||||||
|
"value": [],
|
||||||
|
"__meta": [
|
||||||
|
{
|
||||||
|
"sourceRange": [
|
||||||
|
113,
|
||||||
|
115,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"arr_len": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 3.0,
|
||||||
|
"__meta": [
|
||||||
|
{
|
||||||
|
"sourceRange": [
|
||||||
|
26,
|
||||||
|
34,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"len_empty": {
|
||||||
|
"type": "Number",
|
||||||
|
"value": 0.0,
|
||||||
|
"__meta": [
|
||||||
|
{
|
||||||
|
"sourceRange": [
|
||||||
|
128,
|
||||||
|
142,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parent": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"currentEnv": 0,
|
||||||
|
"return": null
|
||||||
|
}
|
BIN
src/wasm-lib/kcl/tests/outputs/serial_test_example_len0.png
Normal file
BIN
src/wasm-lib/kcl/tests/outputs/serial_test_example_len0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
@ -1169,25 +1169,25 @@ async fn kcl_test_plumbus_fillets() {
|
|||||||
return sg
|
return sg
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pentagon = (len) => {
|
fn pentagon = (sideLen) => {
|
||||||
sg = startSketchOn('XY')
|
sg = startSketchOn('XY')
|
||||||
|> startProfileAt([-len / 2, -len / 2], %)
|
|> startProfileAt([-sideLen / 2, -sideLen / 2], %)
|
||||||
|> angledLine({ angle: 0, length: len }, %, $a)
|
|> angledLine({ angle: 0, length: sideLen }, %, $a)
|
||||||
|> angledLine({
|
|> angledLine({
|
||||||
angle: segAng(a) + 180 - 108,
|
angle: segAng(a) + 180 - 108,
|
||||||
length: len
|
length: sideLen
|
||||||
}, %, $b)
|
}, %, $b)
|
||||||
|> angledLine({
|
|> angledLine({
|
||||||
angle: segAng(b) + 180 - 108,
|
angle: segAng(b) + 180 - 108,
|
||||||
length: len
|
length: sideLen
|
||||||
}, %, $c)
|
}, %, $c)
|
||||||
|> angledLine({
|
|> angledLine({
|
||||||
angle: segAng(c) + 180 - 108,
|
angle: segAng(c) + 180 - 108,
|
||||||
length: len
|
length: sideLen
|
||||||
}, %, $d)
|
}, %, $d)
|
||||||
|> angledLine({
|
|> angledLine({
|
||||||
angle: segAng(d) + 180 - 108,
|
angle: segAng(d) + 180 - 108,
|
||||||
length: len
|
length: sideLen
|
||||||
}, %)
|
}, %)
|
||||||
|
|
||||||
return sg
|
return sg
|
||||||
@ -1653,17 +1653,17 @@ part001 = cube([0,0], 20)
|
|||||||
|
|
||||||
#[tokio::test(flavor = "multi_thread")]
|
#[tokio::test(flavor = "multi_thread")]
|
||||||
async fn kcl_test_duplicate_tags_should_error() {
|
async fn kcl_test_duplicate_tags_should_error() {
|
||||||
let code = r#"fn triangle = (len) => {
|
let code = r#"fn triangle = (sideLen) => {
|
||||||
return startSketchOn('XY')
|
return startSketchOn('XY')
|
||||||
|> startProfileAt([-len / 2, -len / 2], %)
|
|> startProfileAt([-sideLen / 2, -sideLen / 2], %)
|
||||||
|> angledLine({ angle: 0, length: len }, %, $a)
|
|> angledLine({ angle: 0, length: sideLen }, %, $a)
|
||||||
|> angledLine({
|
|> angledLine({
|
||||||
angle: segAng(a) + 120,
|
angle: segAng(a) + 120,
|
||||||
length: len
|
length: sideLen
|
||||||
}, %, $b)
|
}, %, $b)
|
||||||
|> angledLine({
|
|> angledLine({
|
||||||
angle: segAng(b) + 120,
|
angle: segAng(b) + 120,
|
||||||
length: len
|
length: sideLen
|
||||||
}, %, $a)
|
}, %, $a)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1674,7 +1674,7 @@ let p = triangle(200)
|
|||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.err().unwrap().to_string(),
|
result.err().unwrap().to_string(),
|
||||||
r#"value already defined: KclErrorDetails { source_ranges: [SourceRange([311, 313, 0]), SourceRange([326, 339, 0])], message: "Cannot redefine `a`" }"#
|
r#"value already defined: KclErrorDetails { source_ranges: [SourceRange([335, 337, 0]), SourceRange([350, 363, 0])], message: "Cannot redefine `a`" }"#
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user