diff --git a/.github/workflows/cargo-test.yml b/.github/workflows/cargo-test.yml index 515ef47b8..78e347457 100644 --- a/.github/workflows/cargo-test.yml +++ b/.github/workflows/cargo-test.yml @@ -58,4 +58,5 @@ jobs: cargo nextest run --workspace --no-fail-fast -P ci env: KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}} + RUST_MIN_STACK: 10485760000 diff --git a/src/wasm-lib/kcl/benches/compiler_benchmark.rs b/src/wasm-lib/kcl/benches/compiler_benchmark.rs index cc0ffa452..fa5ac2416 100644 --- a/src/wasm-lib/kcl/benches/compiler_benchmark.rs +++ b/src/wasm-lib/kcl/benches/compiler_benchmark.rs @@ -1,12 +1,22 @@ use criterion::{criterion_group, criterion_main, Criterion}; pub fn criterion_benchmark(c: &mut Criterion) { - c.bench_function("parse + lex cube program", |b| b.iter(lex_and_parse_cube)); + c.bench_function("parse + lex cube", |b| b.iter(|| lex_and_parse(CUBE_PROGRAM))); + c.bench_function("parse + lex big kitt", |b| { + b.iter(|| lex_and_parse(include_str!("../../tests/executor/inputs/kittycad_svg.kcl"))) + }); } -fn lex_and_parse_cube() { - let program = r#" -fn cube = (pos, scale) => { +fn lex_and_parse(program: &str) { + let tokens = kcl_lib::tokeniser::lexer(program); + let parser = kcl_lib::parser::Parser::new(tokens); + parser.ast().unwrap(); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); + +const CUBE_PROGRAM: &str = r#"fn cube = (pos, scale) => { const sg = startSketchAt(pos) |> line([0, scale], %) |> line([scale, 0], %) @@ -18,10 +28,3 @@ fn cube = (pos, scale) => { const b1 = cube([0,0], 10) const pt1 = b1[0] show(b1)"#; - let tokens = kcl_lib::tokeniser::lexer(program); - let parser = kcl_lib::parser::Parser::new(tokens); - parser.ast().unwrap(); -} - -criterion_group!(benches, criterion_benchmark); -criterion_main!(benches); diff --git a/src/wasm-lib/kcl/clippy.toml b/src/wasm-lib/kcl/clippy.toml new file mode 100644 index 000000000..e582b1741 --- /dev/null +++ b/src/wasm-lib/kcl/clippy.toml @@ -0,0 +1 @@ +enum-variant-size-threshold = 24 diff --git a/src/wasm-lib/kcl/src/ast/types.rs b/src/wasm-lib/kcl/src/ast/types.rs index 4eebcb748..eb9150e63 100644 --- a/src/wasm-lib/kcl/src/ast/types.rs +++ b/src/wasm-lib/kcl/src/ast/types.rs @@ -879,11 +879,6 @@ impl CallExpression { match &self.function { Function::StdLib { func } => { - /* let source_range: SourceRange = self.into(); - println!( - "Calling stdlib function: {}, source_range: {:?}, args: {:?}", - fn_name, source_range, fn_args - );*/ // Attempt to call the function. let args = crate::std::Args::new(fn_args, self.into(), engine.clone()); let result = func.std_lib_fn()(args).await?; diff --git a/src/wasm-lib/kcl/src/engine/conn.rs b/src/wasm-lib/kcl/src/engine/conn.rs index baca66b9c..41a15c3f8 100644 --- a/src/wasm-lib/kcl/src/engine/conn.rs +++ b/src/wasm-lib/kcl/src/engine/conn.rs @@ -88,7 +88,11 @@ impl EngineConnection { let ws_stream = tokio_tungstenite::WebSocketStream::from_raw_socket( ws, tokio_tungstenite::tungstenite::protocol::Role::Client, - None, + Some(tokio_tungstenite::tungstenite::protocol::WebSocketConfig { + write_buffer_size: 1024 * 128, + max_write_buffer_size: 1024 * 256, + ..Default::default() + }), ) .await; diff --git a/src/wasm-lib/tests/executor/inputs/kittycad_svg.kcl b/src/wasm-lib/tests/executor/inputs/kittycad_svg.kcl new file mode 100644 index 000000000..0b8ac0516 --- /dev/null +++ b/src/wasm-lib/tests/executor/inputs/kittycad_svg.kcl @@ -0,0 +1,310 @@ +const svg = startSketchAt([0, 0]) + +|> lineTo([2.52, -26.04], %) // MoveAbsolute +|> lineTo([2.52, -25.2], %) // VerticalLineAbsolute +|> lineTo([0.84, -25.2], %) // HorizontalLineAbsolute +|> lineTo([0.84, -24.36], %) // VerticalLineAbsolute +|> lineTo([0, -24.36], %) // HorizontalLineAbsolute +|> lineTo([0, -6.72], %) // VerticalLineAbsolute +|> lineTo([0.84, -6.72], %) // HorizontalLineAbsolute +|> lineTo([0.84, -5.88], %) // VerticalLineAbsolute +|> lineTo([1.68, -5.88], %) // HorizontalLineAbsolute +|> lineTo([1.68, -5.04], %) // VerticalLineAbsolute +|> lineTo([2.52, -5.04], %) // HorizontalLineAbsolute +|> lineTo([2.52, -4.2], %) // VerticalLineAbsolute +|> lineTo([3.36, -4.2], %) // HorizontalLineAbsolute +|> lineTo([3.36, -3.36], %) // VerticalLineAbsolute +|> lineTo([17.64, -3.36], %) // HorizontalLineAbsolute +|> lineTo([17.64, -4.2], %) // VerticalLineAbsolute +|> lineTo([18.48, -4.2], %) // HorizontalLineRelative +|> lineTo([18.48, -5.04], %) // VerticalLineHorizonal +|> lineTo([19.32, -5.04], %) // HorizontalLineRelative +|> lineTo([19.32, -5.88], %) // VerticalLineHorizonal +|> lineTo([20.16, -5.88], %) // HorizontalLineRelative +|> lineTo([20.16, -6.72], %) // VerticalLineAbsolute +|> lineTo([21, -6.72], %) // HorizontalLineAbsolute +|> lineTo([21, -24.36], %) // VerticalLineHorizonal +|> lineTo([20.16, -24.36], %) // HorizontalLineRelative +|> lineTo([20.16, -25.2], %) // VerticalLineHorizonal +|> lineTo([18.48, -25.2], %) // HorizontalLineRelative +|> lineTo([18.48, -26.04], %) // VerticalLineHorizonal +|> lineTo([15.96, -26.04], %) // HorizontalLineRelative +|> lineTo([15.96, -26.88], %) // VerticalLineHorizonal +|> lineTo([16.8, -26.88], %) // HorizontalLineRelative +|> lineTo([16.8, -28.56], %) // VerticalLineHorizonal +|> lineTo([11.76, -28.56], %) // HorizontalLineAbsolute +|> lineTo([11.76, -26.88], %) // VerticalLineAbsolute +|> lineTo([12.6, -26.88], %) // HorizontalLineAbsolute +|> lineTo([12.6, -26.04], %) // VerticalLineAbsolute +|> lineTo([8.4, -26.04], %) // HorizontalLineAbsolute +|> lineTo([8.4, -26.88], %) // VerticalLineHorizonal +|> lineTo([9.24, -26.88], %) // HorizontalLineRelative +|> lineTo([9.24, -28.56], %) // VerticalLineHorizonal +|> lineTo([4.2, -28.56], %) // HorizontalLineAbsolute +|> lineTo([4.2, -26.88], %) // VerticalLineHorizonal +|> lineTo([5.04, -26.88], %) // HorizontalLineRelative +|> lineTo([5.04, -26.04], %) // VerticalLineHorizonal + +|> lineTo([0.839996, -20.58], %) // MoveRelative +|> lineTo([0.839996, -24.36], %) // VerticalLineHorizonal +|> lineTo([2.52, -24.36], %) // HorizontalLineAbsolute +|> lineTo([2.52, -25.2], %) // VerticalLineHorizonal +|> lineTo([18.48, -25.2], %) // HorizontalLineRelative +|> lineTo([18.48, -24.36], %) // VerticalLineHorizonal +|> lineTo([20.16, -24.36], %) // HorizontalLineRelative +|> lineTo([20.16, -20.58], %) // VerticalLineAbsolute + // StopAbsolute +|> lineTo([7.56, -24.36], %) // MoveAbsolute +|> lineTo([7.56, -22.68], %) // VerticalLineHorizonal +|> lineTo([13.44, -22.68], %) // HorizontalLineRelative +|> lineTo([13.44, -24.36], %) // VerticalLineHorizonal + +|> lineTo([1.68, -22.68], %) // MoveRelative +|> lineTo([1.68, -21.84], %) // VerticalLineHorizonal +|> lineTo([5.88, -21.84], %) // HorizontalLineRelative +|> lineTo([5.88, -22.68], %) // VerticalLineHorizonal + +|> lineTo([3.36, -24.36], %) // MoveRelative +|> lineTo([3.36, -23.52], %) // VerticalLineHorizonal +|> lineTo([5.88, -23.52], %) // HorizontalLineRelative +|> lineTo([5.88, -24.36], %) // VerticalLineHorizonal + +|> lineTo([15.12, -22.68], %) // MoveRelative +|> lineTo([15.12, -21.84], %) // VerticalLineHorizonal +|> lineTo([15.959999999999999, -21.84], %) // HorizontalLineRelative +|> lineTo([15.959999999999999, -22.68], %) // VerticalLineHorizonal + +|> lineTo([16.8, -22.68], %) // MoveRelative +|> lineTo([16.8, -21.84], %) // VerticalLineHorizonal +|> lineTo([17.64, -21.84], %) // HorizontalLineRelative +|> lineTo([17.64, -22.68], %) // VerticalLineHorizonal + +|> lineTo([18.48, -22.68], %) // MoveRelative +|> lineTo([18.48, -21.84], %) // VerticalLineHorizonal +|> lineTo([19.32, -21.84], %) // HorizontalLineRelative +|> lineTo([19.32, -22.68], %) // VerticalLineHorizonal + +|> lineTo([15.12, -24.36], %) // MoveRelative +|> lineTo([15.12, -23.52], %) // VerticalLineHorizonal +|> lineTo([17.64, -23.52], %) // HorizontalLineRelative +|> lineTo([17.64, -24.36], %) // VerticalLineHorizonal + +|> lineTo([18.48, -5.88], %) // MoveAbsolute +|> lineTo([18.48, -5.04], %) // VerticalLineAbsolute +|> lineTo([17.64, -5.04], %) // HorizontalLineAbsolute +|> lineTo([17.64, -4.2], %) // VerticalLineAbsolute +|> lineTo([3.36, -4.2], %) // HorizontalLineAbsolute +|> lineTo([3.36, -5.04], %) // VerticalLineAbsolute +|> lineTo([2.52, -5.04], %) // HorizontalLineAbsolute +|> lineTo([2.52, -5.88], %) // VerticalLineAbsolute +|> lineTo([1.68, -5.88], %) // HorizontalLineAbsolute +|> lineTo([1.68, -6.72], %) // VerticalLineAbsolute +|> lineTo([0.839996, -6.72], %) // HorizontalLineAbsolute +|> lineTo([0.839996, -8.4], %) // VerticalLineAbsolute +|> lineTo([20.16, -8.4], %) // HorizontalLineAbsolute +|> lineTo([20.16, -6.72], %) // VerticalLineAbsolute +|> lineTo([19.32, -6.72], %) // HorizontalLineAbsolute +|> lineTo([19.32, -5.88], %) // VerticalLineAbsolute + +|> lineTo([20.16, -7.56], %) // MoveAbsolute +|> lineTo([0.839996, -7.56], %) // HorizontalLineAbsolute +|> lineTo([0.839996, -19.32], %) // VerticalLineAbsolute +|> lineTo([20.16, -19.32], %) // HorizontalLineAbsolute + +|> lineTo([3.36, -10.08], %) // MoveAbsolute +|> lineTo([3.36, -9.24001], %) // VerticalLineAbsolute +|> lineTo([17.64, -9.24001], %) // HorizontalLineAbsolute +|> lineTo([17.64, -10.08], %) // VerticalLineAbsolute +|> lineTo([18.48, -10.08], %) // HorizontalLineRelative +|> lineTo([18.48, -16.8], %) // VerticalLineHorizonal +|> lineTo([17.64, -16.8], %) // HorizontalLineRelative +|> lineTo([17.64, -17.64], %) // VerticalLineHorizonal +|> lineTo([3.36, -17.64], %) // HorizontalLineAbsolute +|> lineTo([3.36, -16.8], %) // VerticalLineAbsolute +|> lineTo([2.52, -16.8], %) // HorizontalLineAbsolute +|> lineTo([2.52, -10.080000000000002], %) // VerticalLineHorizonal + +|> lineTo([13.44, -10.92], %) // MoveRelative +|> lineTo([13.44, -10.08], %) // VerticalLineHorizonal +|> lineTo([15.12, -10.08], %) // HorizontalLineRelative +|> lineTo([15.12, -13.44], %) // VerticalLineHorizonal +|> lineTo([14.28, -13.44], %) // HorizontalLineRelative + +|> lineTo([9.24, -13.44], %) // MoveRelative +|> lineTo([11.76, -13.44], %) // HorizontalLineRelative +|> lineTo([11.76, -14.28], %) // VerticalLineHorizonal +|> lineTo([10.92, -14.28], %) // HorizontalLineRelative here +|> lineTo([10.92, -15.959999999999999], %) // VerticalLineHorizonal +|> lineTo([13.44, -15.959999999999999], %) // HorizontalLineRelative +|> lineTo([13.44, -15.12], %) // VerticalLineHorizonal +|> lineTo([14.28, -15.12], %) // HorizontalLineRelative +|> lineTo([14.28, -15.959999999999999], %) // VerticalLineHorizonal +|> lineTo([13.44, -15.959999999999999], %) // HorizontalLineAbsolute +|> lineTo([13.44, -16.8], %) // VerticalLineAbsolute +|> lineTo([7.56, -16.8], %) // HorizontalLineAbsolute +|> lineTo([7.56, -15.96], %) // VerticalLineAbsolute +|> lineTo([6.72, -15.96], %) // HorizontalLineAbsolute +|> lineTo([6.72, -15.120000000000001], %) // VerticalLineHorizonal +|> lineTo([7.56, -15.120000000000001], %) // HorizontalLineRelative +|> lineTo([7.56, -15.96], %) // VerticalLineHorizonal +|> lineTo([10.08, -15.96], %) // HorizontalLineRelative +|> lineTo([10.08, -14.28], %) // VerticalLineAbsolute +|> lineTo([9.24, -14.28], %) // HorizontalLineAbsolute + +|> lineTo([7.56, -12.6], %) // MoveAbsolute +|> lineTo([7.56, -11.76], %) // VerticalLineAbsolute +|> lineTo([5.04, -11.76], %) // HorizontalLineAbsolute +|> lineTo([5.04, -12.6], %) // VerticalLineAbsolute +|> lineTo([4.2, -12.6], %) // HorizontalLineAbsolute +|> lineTo([4.2, -11.76], %) // VerticalLineHorizonal +|> lineTo([5.04, -11.76], %) // HorizontalLineRelative +|> lineTo([5.04, -10.92], %) // VerticalLineHorizonal +|> lineTo([7.5600000000000005, -10.92], %) // HorizontalLineRelative +|> lineTo([7.5600000000000005, -11.76], %) // VerticalLineHorizonal +|> lineTo([8.4, -11.76], %) // HorizontalLineAbsolute +|> lineTo([8.4, -12.6], %) // VerticalLineHorizonal + +|> lineTo([3.36, -5.88], %) // MoveAbsolute +|> lineTo([3.36, -5.04], %) // VerticalLineAbsolute +|> lineTo([4.2, -5.04], %) // HorizontalLineAbsolute +|> lineTo([4.2, -3.36], %) // VerticalLineAbsolute +|> lineTo([5.04, -3.36], %) // HorizontalLineAbsolute +|> lineTo([5.04, -1.68], %) // VerticalLineAbsolute +|> lineTo([5.88, -1.68], %) // HorizontalLineAbsolute +|> lineTo([5.88, -0.83999599], %) // VerticalLineAbsolute +|> lineTo([6.72, -0.83999599], %) // HorizontalLineAbsolute +|> lineTo([6.72, -1.68], %) // VerticalLineAbsolute +|> lineTo([7.56, -1.68], %) // HorizontalLineAbsolute +|> lineTo([7.56, -3.36], %) // VerticalLineAbsolute +|> lineTo([8.4, -3.36], %) // HorizontalLineAbsolute +|> lineTo([8.4, -5.04], %) // VerticalLineHorizonal +|> lineTo([9.24, -5.04], %) // HorizontalLineRelative +|> lineTo([9.24, -5.88], %) // VerticalLineHorizonal + +|> lineTo([17.64, -5.04], %) // MoveAbsolute +|> lineTo([17.64, -5.88], %) // VerticalLineAbsolute +|> lineTo([11.76, -5.88], %) // HorizontalLineAbsolute +|> lineTo([11.76, -5.04], %) // VerticalLineAbsolute +|> lineTo([12.6, -5.04], %) // HorizontalLineAbsolute +|> lineTo([12.6, -3.36], %) // VerticalLineAbsolute +|> lineTo([13.44, -3.36], %) // HorizontalLineRelative +|> lineTo([13.44, -1.68], %) // VerticalLineAbsolute +|> lineTo([14.28, -1.68], %) // HorizontalLineRelative +|> lineTo([14.28, -0.83999599], %) // VerticalLineAbsolute +|> lineTo([15.12, -0.83999599], %) // HorizontalLineRelative +|> lineTo([15.12, -1.68], %) // VerticalLineAbsolute +|> lineTo([15.959999999999999, -1.68], %) // HorizontalLineRelative +|> lineTo([15.959999999999999, -3.36], %) // VerticalLineHorizonal +|> lineTo([16.8, -3.36], %) // HorizontalLineRelative +|> lineTo([16.8, -5.04], %) // VerticalLineHorizonal + +|> lineTo([13.44, -1.68], %) // MoveAbsolute +|> lineTo([13.44, -0], %) // VerticalLineAbsolute +|> lineTo([15.959999999999999, -0], %) // HorizontalLineRelative +|> lineTo([15.959999999999999, -1.68], %) // VerticalLineHorizonal +|> lineTo([16.8, -1.68], %) // HorizontalLineRelative +|> lineTo([16.8, -3.36], %) // VerticalLineHorizonal +|> lineTo([17.64, -3.36], %) // HorizontalLineRelative +|> lineTo([17.64, -4.62], %) // VerticalLineAbsolute +|> lineTo([16.8, -4.62], %) // HorizontalLineAbsolute +|> lineTo([16.8, -3.36], %) // VerticalLineAbsolute +|> lineTo([15.96, -3.36], %) // HorizontalLineAbsolute +|> lineTo([15.96, -1.68], %) // VerticalLineAbsolute +|> lineTo([15.12, -1.68], %) // HorizontalLineAbsolute +|> lineTo([15.12, -0.83999999], %) // VerticalLineAbsolute +|> lineTo([14.28, -0.83999999], %) // HorizontalLineAbsolute +|> lineTo([14.28, -1.68], %) // VerticalLineAbsolute +|> lineTo([13.44, -1.68], %) // HorizontalLineAbsolute +|> lineTo([13.44, -3.36], %) // VerticalLineAbsolute +|> lineTo([12.6, -3.36], %) // HorizontalLineAbsolute +|> lineTo([12.6, -4.62], %) // VerticalLineAbsolute +|> lineTo([11.76, -4.62], %) // HorizontalLineAbsolute +|> lineTo([11.76, -3.36], %) // VerticalLineAbsolute +|> lineTo([12.6, -3.36], %) // HorizontalLineAbsolute +|> lineTo([12.6, -1.68], %) // VerticalLineAbsolute + +|> lineTo([5.04, -1.68], %) // MoveAbsolute +|> lineTo([5.04, -0], %) // VerticalLineAbsolute +|> lineTo([7.56, -0], %) // HorizontalLineAbsolute +|> lineTo([7.56, -1.68], %) // VerticalLineAbsolute +|> lineTo([8.4, -1.68], %) // HorizontalLineAbsolute +|> lineTo([8.4, -3.36], %) // VerticalLineAbsolute +|> lineTo([9.24, -3.36], %) // HorizontalLineAbsolute +|> lineTo([9.24, -4.62], %) // VerticalLineAbsolute +|> lineTo([8.4, -4.62], %) // HorizontalLineAbsolute +|> lineTo([8.4, -3.36], %) // VerticalLineAbsolute +|> lineTo([7.56, -3.36], %) // HorizontalLineAbsolute +|> lineTo([7.56, -1.68], %) // VerticalLineAbsolute +|> lineTo([6.72, -1.68], %) // HorizontalLineAbsolute +|> lineTo([6.72, -0.83999999], %) // VerticalLineAbsolute +|> lineTo([5.88, -0.83999999], %) // HorizontalLineAbsolute +|> lineTo([5.88, -1.68], %) // VerticalLineAbsolute +|> lineTo([5.04, -1.68], %) // HorizontalLineAbsolute +|> lineTo([5.04, -3.36], %) // VerticalLineAbsolute +|> lineTo([4.2, -3.36], %) // HorizontalLineAbsolute +|> lineTo([4.2, -4.62], %) // VerticalLineAbsolute +|> lineTo([3.36, -4.62], %) // HorizontalLineAbsolute +|> lineTo([3.36, -3.36], %) // VerticalLineAbsolute +|> lineTo([4.2, -3.36], %) // HorizontalLineAbsolute +|> lineTo([4.2, -1.68], %) // VerticalLineAbsolute + +|> lineTo([13.44, -5.88], %) // MoveAbsolute +|> lineTo([13.44, -5.04], %) // VerticalLineAbsolute +|> lineTo([14.28, -5.04], %) // HorizontalLineRelative +|> lineTo([14.28, -4.2], %) // VerticalLineAbsolute +|> lineTo([15.12, -4.2], %) // HorizontalLineRelative +|> lineTo([15.12, -5.04], %) // VerticalLineHorizonal +|> lineTo([15.959999999999999, -5.04], %) // HorizontalLineRelative +|> lineTo([15.959999999999999, -5.88], %) // VerticalLineHorizonal + +|> lineTo([5.88, -5.04], %) // MoveAbsolute +|> lineTo([5.88, -4.2], %) // VerticalLineAbsolute +|> lineTo([6.72, -4.2], %) // HorizontalLineAbsolute +|> lineTo([6.72, -5.04], %) // VerticalLineAbsolute +|> lineTo([7.56, -5.04], %) // HorizontalLineAbsolute +|> lineTo([7.56, -5.88], %) // VerticalLineAbsolute +|> lineTo([5.04, -5.88], %) // HorizontalLineAbsolute +|> lineTo([5.04, -5.04], %) // VerticalLineAbsolute + +|> lineTo([17.64, -5.88], %) // MoveAbsolute +|> lineTo([17.64, -5.04], %) // VerticalLineAbsolute +|> lineTo([16.8, -5.04], %) // HorizontalLineAbsolute +|> lineTo([16.8, -4.2], %) // VerticalLineAbsolute +|> lineTo([17.64, -4.2], %) // HorizontalLineRelative +|> lineTo([17.64, -5.04], %) // VerticalLineHorizonal +|> lineTo([18.48, -5.04], %) // HorizontalLineRelative +|> lineTo([18.48, -5.88], %) // VerticalLineHorizonal + +|> lineTo([3.36, -5.04], %) // MoveAbsolute +|> lineTo([3.36, -5.88], %) // VerticalLineAbsolute +|> lineTo([2.52, -5.88], %) // HorizontalLineAbsolute +|> lineTo([2.52, -5.04], %) // VerticalLineAbsolute +|> lineTo([3.36, -5.04], %) // HorizontalLineAbsolute +|> lineTo([3.36, -4.2], %) // VerticalLineAbsolute +|> lineTo([4.2, -4.2], %) // HorizontalLineAbsolute +|> lineTo([4.2, -5.04], %) // VerticalLineHorizonal + +|> lineTo([8.4, -4.2], %) // MoveRelative +|> lineTo([9.24, -4.2], %) // HorizontalLineRelative +|> lineTo([9.24, -5.04], %) // VerticalLineHorizonal +|> lineTo([10.08, -5.04], %) // HorizontalLineRelative +|> lineTo([10.08, -5.88], %) // VerticalLineAbsolute +|> lineTo([9.24, -5.88], %) // HorizontalLineAbsolute +|> lineTo([9.24, -5.04], %) // VerticalLineAbsolute +|> lineTo([8.4, -5.04], %) // HorizontalLineAbsolute + +|> lineTo([11.76, -4.2], %) // MoveAbsolute +|> lineTo([12.6, -4.2], %) // HorizontalLineAbsolute +|> lineTo([12.6, -5.04], %) // VerticalLineAbsolute +|> lineTo([11.76, -5.04], %) // HorizontalLineAbsolute +|> lineTo([11.76, -5.88], %) // VerticalLineAbsolute +|> lineTo([10.92, -5.88], %) // HorizontalLineAbsolute +|> lineTo([10.92, -5.04], %) // VerticalLineAbsolute +|> lineTo([11.76, -5.04], %) // HorizontalLineRelative + +|> lineTo([14.28, -10.92], %) // MoveRelative +|> lineTo([13.44, -10.92], %) // HorizontalLineRelative +|> lineTo([13.44, -13.44], %) // VerticalLineHorizonal +|> lineTo([14.28, -13.44], %) // HorizontalLineRelative +|> close(%); +show(svg); diff --git a/src/wasm-lib/tests/executor/main.rs b/src/wasm-lib/tests/executor/main.rs index 8777740d3..8e93cf70a 100644 --- a/src/wasm-lib/tests/executor/main.rs +++ b/src/wasm-lib/tests/executor/main.rs @@ -15,6 +15,7 @@ async fn execute_and_snapshot(code: &str) -> Result { // For file conversions we need this to be long. .timeout(std::time::Duration::from_secs(600)) .connect_timeout(std::time::Duration::from_secs(60)) + .connection_verbose(true) .tcp_keepalive(std::time::Duration::from_secs(600)) .http1_only(); @@ -174,6 +175,14 @@ async fn serial_test_execute_pipes_on_pipes() { twenty_twenty::assert_image("tests/executor/outputs/pipes_on_pipes.png", &result, 1.0); } +#[tokio::test(flavor = "multi_thread")] +async fn serial_test_execute_kittycad_svg() { + let code = include_str!("inputs/kittycad_svg.kcl"); + + let result = execute_and_snapshot(code).await.unwrap(); + twenty_twenty::assert_image("tests/executor/outputs/kittycad_svg.png", &result, 1.0); +} + #[tokio::test(flavor = "multi_thread")] async fn test_member_expression_sketch_group() { let code = r#"fn cube = (pos, scale) => { diff --git a/src/wasm-lib/tests/executor/outputs/kittycad_svg.png b/src/wasm-lib/tests/executor/outputs/kittycad_svg.png new file mode 100644 index 000000000..8b5850629 Binary files /dev/null and b/src/wasm-lib/tests/executor/outputs/kittycad_svg.png differ