use std::any::Any;
use std::panic::AssertUnwindSafe;
use std::panic::catch_unwind;
use std::path::Path;
use std::path::PathBuf;
use indexmap::IndexMap;
use kittycad_modeling_cmds::ModelingCmd;
use kittycad_modeling_cmds::each_cmd as mcmd;
use kittycad_modeling_cmds::ok_response::OkModelingCmdResponse;
use kittycad_modeling_cmds::units::UnitArea;
use kittycad_modeling_cmds::units::UnitDensity;
use kittycad_modeling_cmds::units::UnitLength;
use kittycad_modeling_cmds::units::UnitMass;
use kittycad_modeling_cmds::websocket::OkWebSocketResponseData;
use kittycad_modeling_cmds::websocket::WebSocketResponse;
use serde::Deserialize;
use serde::Serialize;
use uuid::Uuid;
use crate::ExecOutcome;
use crate::ExecState;
use crate::ExecutorContext;
use crate::ModuleId;
use crate::errors::KclError;
use crate::errors::Tag;
use crate::execution::AbstractSegment;
use crate::execution::ArtifactGraph;
use crate::execution::ArtifactGraphMermaidExt;
use crate::execution::CameraView;
use crate::execution::EnvironmentRef;
use crate::execution::KclValue;
use crate::execution::KclValueView;
use crate::execution::ModuleArtifactState;
use crate::execution::NamedViewValue;
use crate::execution::SketchConstraint;
use crate::modules::ModulePath;
use crate::modules::ModuleRepr;
use crate::tooling::render_artifacts::RENDERED_MODEL_NAME;
use crate::util::RetryConfig;
use crate::util::execute_with_retries;
use crate::walk::Node;
use crate::walk::walk;
mod kcl_samples;
mod region_liveness_engine_contract;
#[derive(Serialize)]
#[serde(untagged)]
enum ProgramMemoryValueSnapshot {
Runtime(RuntimeProgramMemoryValueSnapshot),
View(KclValueView),
}
#[derive(Serialize)]
#[serde(tag = "type")]
enum RuntimeProgramMemoryValueSnapshot {
SketchConstraint {
value: Box<SketchConstraint>,
},
CameraView {
value: Box<CameraView>,
},
NamedView {
value: Box<NamedViewValue>,
},
Segment {
value: Box<AbstractSegment>,
},
Tuple {
value: Vec<ProgramMemoryValueSnapshot>,
},
HomArray {
value: Vec<ProgramMemoryValueSnapshot>,
},
Object {
value: Box<IndexMap<String, ProgramMemoryValueSnapshot>>,
constrainable: bool,
},
}
impl From<KclValue> for ProgramMemoryValueSnapshot {
fn from(value: KclValue) -> Self {
let runtime = match value {
KclValue::SketchConstraint { value } => RuntimeProgramMemoryValueSnapshot::SketchConstraint { value },
KclValue::CameraView { value } => RuntimeProgramMemoryValueSnapshot::CameraView { value },
KclValue::NamedView { value } => RuntimeProgramMemoryValueSnapshot::NamedView { value },
KclValue::Segment { value } => RuntimeProgramMemoryValueSnapshot::Segment { value },
KclValue::Tuple { value, .. } => RuntimeProgramMemoryValueSnapshot::Tuple {
value: value.into_iter().map(Self::from).collect(),
},
KclValue::HomArray { value, .. } => RuntimeProgramMemoryValueSnapshot::HomArray {
value: value.into_iter().map(Self::from).collect(),
},
KclValue::Object {
value, constrainable, ..
} => RuntimeProgramMemoryValueSnapshot::Object {
value: Box::new(
value
.into_iter()
.map(|(name, value)| (name, Self::from(value)))
.collect(),
),
constrainable,
},
value => return Self::View(KclValueView::from(value)),
};
Self::Runtime(runtime)
}
}
#[derive(Debug, Clone)]
struct Test {
name: String,
entry_point: PathBuf,
input_dir: PathBuf,
output_dir: PathBuf,
skip_assert_artifact_graph: bool,
snapshot_physical_properties: bool,
expected_deprecation_warnings: Option<usize>,
#[cfg_attr(feature = "snapshot-engine-responses", expect(dead_code))]
redact_uuids: bool,
}
const REPO_ROOT: &str = "../..";
const KCL_SAMPLE_DEPRECATION_VERSION: &str = "2.0";
const MATERIAL_DENSITY_KG_PER_CUBIC_METER: f64 = 1000.0;
const PHYSICAL_PROPERTIES_ABSOLUTE_TOLERANCE: f64 = 1e-9;
const PHYSICAL_PROPERTIES_RELATIVE_TOLERANCE: f64 = 1e-12;
fn is_writing() -> bool {
matches!(std::env::var("ZOO_SIM_UPDATE").as_deref(), Ok("always"))
}
#[derive(Deserialize, Clone, Debug)]
#[serde(deny_unknown_fields)]
struct TestConfig {
#[serde(default = "default_redact_uuids")]
redact_uuids: bool,
}
impl Default for TestConfig {
fn default() -> Self {
Self {
redact_uuids: default_redact_uuids(),
}
}
}
fn default_redact_uuids() -> bool {
true
}
impl TestConfig {
fn from_file(test_dir: &Path) -> Option<Self> {
let test_config_path = test_dir.join("config.toml");
let config_str_res = std::fs::read_to_string(test_config_path);
let config_str = match config_str_res {
Ok(config_str) => config_str,
Err(e) => {
if e.kind() == std::io::ErrorKind::NotFound {
return None;
}
panic!("Could not read file: {e}")
}
};
let config: TestConfig = toml::from_str(&config_str).unwrap();
Some(config)
}
}
impl Test {
fn new(name: &str) -> Self {
let test_dir = Path::new("tests").join(name);
let test_config = TestConfig::from_file(&test_dir).unwrap_or_default();
let TestConfig { redact_uuids } = test_config;
Self {
name: name.to_owned(),
entry_point: test_dir.clone().join("input.kcl"),
input_dir: test_dir.clone(),
output_dir: test_dir,
skip_assert_artifact_graph: false,
snapshot_physical_properties: true,
expected_deprecation_warnings: None,
redact_uuids,
}
}
pub fn read(&self) -> String {
std::fs::read_to_string(&self.entry_point)
.unwrap_or_else(|e| panic!("Failed to read file: {:?} due to {e}", self.entry_point))
}
}
impl ExecState {
async fn into_test_exec_outcome(
self,
main_ref: EnvironmentRef,
ctx: &ExecutorContext,
project_directory: &Path,
) -> (
ExecOutcome,
IndexMap<String, ProgramMemoryValueSnapshot>,
IndexMap<String, ModuleArtifactState>,
Option<IndexMap<Uuid, WebSocketResponse>>,
) {
let program_memory = self
.program_memory_for_tests(main_ref)
.expect("simulation test execution outcome should collect variables")
.into_iter()
.map(|(name, value)| (name, ProgramMemoryValueSnapshot::from(value)))
.collect();
let module_state = self.to_module_state(project_directory);
#[cfg(feature = "snapshot-engine-responses")]
let (outcome, responses) = {
let mut exec_state = self;
let responses = Some(exec_state.take_root_module_responses());
let outcome = exec_state
.into_exec_outcome(main_ref, ctx)
.await
.expect("simulation test execution outcome should collect variables");
(outcome, responses)
};
#[cfg(not(feature = "snapshot-engine-responses"))]
let (outcome, responses) = {
let responses = None;
let outcome = self
.into_exec_outcome(main_ref, ctx)
.await
.expect("simulation test execution outcome should collect variables");
(outcome, responses)
};
(outcome, program_memory, module_state, responses)
}
fn to_module_state(&self, _project_directory: &Path) -> IndexMap<String, ModuleArtifactState> {
let project_directory = std::path::Path::new(REPO_ROOT)
.canonicalize()
.unwrap_or_else(|_| panic!("Failed to canonicalize project directory: {REPO_ROOT}"));
let mut module_state = IndexMap::new();
for info in self.modules().values() {
let relative_path = relative_module_path(&info.path, &project_directory).unwrap_or_else(|err| {
panic!(
"Failed to get relative module path for {:?} in {:?}; caused by {err:?}",
info.path, project_directory
)
});
match &info.repr {
ModuleRepr::Root => {
module_state.insert(relative_path, self.root_module_artifact_state().clone());
}
ModuleRepr::Kcl(_, None) => {
module_state.insert(relative_path, Default::default());
}
ModuleRepr::Kcl(_, Some(outcome)) => {
module_state.insert(relative_path, outcome.artifacts.clone());
}
ModuleRepr::Foreign(_, Some((_, module_artifacts))) => {
module_state.insert(relative_path, module_artifacts.clone());
}
ModuleRepr::Foreign(_, None) | ModuleRepr::Dummy => {}
}
}
module_state
}
}
fn relative_module_path(module_path: &ModulePath, abs_project_directory: &Path) -> Result<String, std::io::Error> {
match module_path {
ModulePath::Main => Ok("main".to_owned()),
ModulePath::Local { value: path, .. } => {
let abs_path = path.canonicalize()?;
abs_path
.strip_prefix(abs_project_directory)
.map(|p| p.to_string_lossy())
.map_err(|_| std::io::Error::other(format!("Failed to strip prefix from module path {abs_path:?}")))
}
ModulePath::Std { value } => Ok(format!("std::{value}")),
}
}
fn assert_snapshot<F, R>(test: &Test, operation: &str, f: F)
where
F: FnOnce() -> R,
{
let mut settings = insta::Settings::clone_current();
settings.set_omit_expression(true);
settings.set_snapshot_path(Path::new("..").join(&test.output_dir));
settings.set_prepend_module_to_snapshot(false);
settings.set_description(format!("{operation} {}.kcl", test.name));
if operation != "Artifact graph flowchart" {
settings.set_sort_maps(true);
}
#[cfg(not(feature = "snapshot-engine-responses"))]
{
if test.redact_uuids {
settings.add_filter(
r"\b[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}\b",
"[uuid]",
);
settings.add_filter(
r"\bface_id_[[:xdigit:]]{8}_[[:xdigit:]]{4}_[[:xdigit:]]{4}_[[:xdigit:]]{4}_[[:xdigit:]]{12}\b",
"face_id_[uuid]",
);
}
}
settings.bind(f);
}
fn physical_property_values_match(expected: f64, actual: f64) -> bool {
approx::relative_eq!(
expected,
actual,
epsilon = PHYSICAL_PROPERTIES_ABSOLUTE_TOLERANCE,
max_relative = PHYSICAL_PROPERTIES_RELATIVE_TOLERANCE
)
}
fn physical_properties_mismatch(
expected: &serde_json::Value,
actual: &serde_json::Value,
path: &str,
) -> Option<String> {
match (expected, actual) {
(serde_json::Value::Number(expected), serde_json::Value::Number(actual)) => {
let (Some(expected), Some(actual)) = (expected.as_f64(), actual.as_f64()) else {
return (expected != actual).then(|| format!("{path}: expected {expected}, got {actual}"));
};
(!physical_property_values_match(expected, actual)).then(|| {
format!(
"{path}: expected {expected}, got {actual} (absolute tolerance {}, relative tolerance {})",
PHYSICAL_PROPERTIES_ABSOLUTE_TOLERANCE, PHYSICAL_PROPERTIES_RELATIVE_TOLERANCE
)
})
}
(serde_json::Value::Object(expected), serde_json::Value::Object(actual)) => {
for (key, expected_value) in expected {
let child_path = format!("{path}.{key}");
let Some(actual_value) = actual.get(key) else {
return Some(format!("{child_path}: missing from actual physical properties"));
};
if let Some(mismatch) = physical_properties_mismatch(expected_value, actual_value, &child_path) {
return Some(mismatch);
}
}
actual
.keys()
.find(|key| !expected.contains_key(*key))
.map(|key| format!("{path}.{key}: unexpected physical property"))
}
(serde_json::Value::Array(expected), serde_json::Value::Array(actual)) => {
if expected.len() != actual.len() {
return Some(format!(
"{path}: expected an array of length {}, got {}",
expected.len(),
actual.len()
));
}
expected
.iter()
.zip(actual)
.enumerate()
.find_map(|(index, (expected, actual))| {
physical_properties_mismatch(expected, actual, &format!("{path}[{index}]"))
})
}
_ => (expected != actual).then(|| format!("{path}: expected {expected}, got {actual}")),
}
}
fn assert_physical_properties_snapshot(test: &Test, actual: serde_json::Value) {
if !is_writing()
&& let Ok(snapshot) = insta::Snapshot::from_file(&test.output_dir.join("physical_properties.snap"))
&& let Some(text) = snapshot.as_text()
&& let Ok(expected) = serde_json::from_str(&text.to_string())
&& physical_properties_mismatch(&expected, &actual, "physical_properties").is_none()
{
assert_snapshot(test, "Physical properties", || {
insta::assert_snapshot!("physical_properties", text.to_string())
});
return;
}
assert_snapshot(test, "Physical properties", || {
insta::assert_json_snapshot!("physical_properties", actual)
});
}
#[test]
fn physical_property_values_allow_numeric_noise_but_reject_wrong_results() {
let expected = serde_json::json!({
"surface_area": {
"unit": "mm2",
"value": 138_485.213_581_107_76,
},
});
let observed_numeric_noise = serde_json::json!({
"surface_area": {
"unit": "mm2",
"value": 138_485.213_581_107_73,
},
});
let materially_wrong_surface_area = serde_json::json!({
"surface_area": {
"unit": "mm2",
"value": 138_486.213_581_107_76,
},
});
assert_eq!(
physical_properties_mismatch(&expected, &observed_numeric_noise, "physical_properties"),
None
);
assert!(physical_properties_mismatch(&expected, &materially_wrong_surface_area, "physical_properties").is_some());
}
#[test]
fn physical_properties_snapshot_preserves_insta_workflow() {
const CHILD_MODE: &str = "KCL_PHYSICAL_PROPERTIES_SNAPSHOT_TEST_MODE";
let Ok(mode) = std::env::var(CHILD_MODE) else {
for mode in ["new", "always", "no", "force"] {
let output = std::process::Command::new(std::env::current_exe().unwrap())
.args([
"--exact",
"simulation_tests::physical_properties_snapshot_preserves_insta_workflow",
"--nocapture",
])
.env(CHILD_MODE, mode)
.env("INSTA_UPDATE", if mode == "force" { "always" } else { mode })
.env("ZOO_SIM_UPDATE", if mode == "force" { "always" } else { "" })
.env("INSTA_FORCE_PASS", "0")
.env_remove("INSTA_SNAPSHOT_REFERENCES_FILE")
.output()
.unwrap();
assert!(
output.status.success(),
"{mode}:\n{}\n{}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
}
return;
};
for (stored, value, within_tolerance) in [
(None, 2.0, false),
(Some(1.0), 2.0, false),
(Some(1.0), 1.0 + 5e-13, true),
] {
let directory = tempfile::tempdir().unwrap();
let mut test = Test::new("physical_properties_snapshot_workflow");
test.output_dir = directory.path().to_owned();
let snapshot_path = test.output_dir.join("physical_properties.snap");
let properties = |value| serde_json::json!({"surface_area": {"unit": "mm2", "value": value}});
let original = stored.map(|value| {
format!(
"---\nsource: simulation_tests.rs\n---\n{}\n",
serde_json::to_string_pretty(&properties(value)).unwrap()
)
});
if let Some(original) = &original {
std::fs::write(&snapshot_path, original).unwrap();
}
let actual = properties(value);
let result = catch_unwind(|| assert_physical_properties_snapshot(&test, actual.clone()));
let updates = matches!(mode.as_str(), "always" | "force");
assert_eq!(result.is_ok(), within_tolerance || updates);
assert_eq!(
test.output_dir.join("physical_properties.snap.new").exists(),
mode == "new" && !within_tolerance
);
if updates {
let snapshot = insta::Snapshot::from_file(&snapshot_path).unwrap();
let updated: serde_json::Value = serde_json::from_str(&snapshot.as_text().unwrap().to_string()).unwrap();
let expected = if within_tolerance && mode != "force" {
properties(stored.unwrap())
} else {
actual
};
assert_eq!(updated, expected);
} else {
assert_eq!(std::fs::read_to_string(&snapshot_path).ok(), original);
}
}
}
#[test]
fn physical_properties_snapshot_preserves_stored_decimal_text() {
let directory = tempfile::tempdir().unwrap();
let mut test = Test::new("holes_cube");
test.output_dir = directory.path().to_owned();
let snapshot_path = test.output_dir.join("physical_properties.snap");
let original = include_str!("../tests/holes_cube/physical_properties.snap");
std::fs::write(&snapshot_path, original).unwrap();
let snapshot = insta::Snapshot::from_file(&snapshot_path).unwrap();
let actual = serde_json::from_str(&snapshot.as_text().unwrap().to_string()).unwrap();
assert_physical_properties_snapshot(&test, actual);
assert_eq!(std::fs::read_to_string(&snapshot_path).unwrap(), original);
assert!(!test.output_dir.join("physical_properties.snap.new").exists());
}
fn parse(test_name: &str) {
parse_test(&Test::new(test_name));
}
fn parse_test(test: &Test) {
let input = test.read();
let parse_res = Result::<_, KclError>::Ok(crate::parsing::parse_str(&input, ModuleId::default()).unwrap());
assert_snapshot(test, "Result of parsing", || {
insta::assert_json_snapshot!("ast", parse_res, {
".**.start" => 0,
".**.end" => 0,
".**.commentStart" => 0,
});
});
if let Ok(program) = parse_res {
let input = input.as_bytes();
walk(&program, |node| {
match node {
Node::Program(node) => assert!(node.non_code_meta.comment_start_is_accurate(input)),
Node::PipeExpression(node) => assert!(node.non_code_meta.comment_start_is_accurate(input)),
Node::SketchBlock(node) => assert!(node.non_code_meta.comment_start_is_accurate(input)),
Node::Block(node) => assert!(node.non_code_meta.comment_start_is_accurate(input)),
Node::CallExpressionKw(node) => assert!(node.non_code_meta.comment_start_is_accurate(input)),
Node::ArrayExpression(node) => assert!(node.non_code_meta.comment_start_is_accurate(input)),
Node::ObjectExpression(node) => assert!(node.non_code_meta.comment_start_is_accurate(input)),
_ => {}
}
Ok::<_, anyhow::Error>(true)
})
.unwrap();
}
}
async fn unparse(test_name: &str) {
unparse_test(&Test::new(test_name)).await;
}
async fn unparse_test(test: &Test) {
let input = test.read();
let ast = crate::parsing::parse_str(&input, ModuleId::default()).unwrap();
let actual = ast.recast_top(&Default::default(), 0);
let input_result = catch_unwind(AssertUnwindSafe(|| {
assert_snapshot(test, "Result of unparsing", || {
insta::assert_snapshot!("unparsed", actual);
})
}));
let kcl_files = crate::unparser::walk_dir(&test.input_dir).await.unwrap();
let kcl_files = kcl_files.into_iter().filter(|f| f != &test.entry_point);
let futures = kcl_files
.into_iter()
.filter(|file| file.extension().is_some_and(|ext| ext == "kcl")) .map(|file| {
let snap_path = Path::new("..").join(&test.output_dir);
tokio::spawn(async move {
let contents = tokio::fs::read_to_string(&file).await.unwrap();
let program = crate::Program::parse_no_errs(&contents).unwrap();
let recast = program.recast_with_options(&Default::default());
catch_unwind(AssertUnwindSafe(|| {
let mut settings = insta::Settings::clone_current();
settings.set_omit_expression(true);
settings.set_snapshot_path(snap_path);
settings.set_prepend_module_to_snapshot(false);
settings.set_snapshot_suffix(file.file_name().unwrap().to_str().unwrap());
settings.set_description(format!("Result of unparsing {}", file.display()));
settings.bind(|| {
insta::assert_snapshot!("unparsed", recast);
})
}))
})
})
.collect::<Vec<_>>();
for future in futures {
future.await.unwrap().unwrap();
}
input_result.unwrap();
}
async fn execute(test_name: &str, render_to_png: bool) {
execute_test(&Test::new(test_name), render_to_png).await
}
async fn physical_properties(ctx: &ExecutorContext) -> Option<serde_json::Value> {
let mass_response = match ctx
.engine
.send_modeling_cmd(
&ctx.engine_batch,
Uuid::new_v4(),
crate::SourceRange::default(),
&ModelingCmd::from(
mcmd::Mass::builder()
.material_density(MATERIAL_DENSITY_KG_PER_CUBIC_METER)
.material_density_unit(UnitDensity::KilogramsPerCubicMeter)
.output_unit(UnitMass::Grams)
.build(),
),
)
.await
{
Ok(response) => response,
Err(err)
if err.message() == "Nothing to export"
|| err.message() == "internal error: unknown" =>
{
return None;
}
Err(err) => panic!("simulation test should measure the model mass: {err}"),
};
let OkWebSocketResponseData::Modeling {
modeling_response: OkModelingCmdResponse::Mass(mass),
} = mass_response
else {
panic!("Expected a mass response, got {mass_response:?}");
};
let bounding_box_response = ctx
.engine
.send_modeling_cmd(
&ctx.engine_batch,
Uuid::new_v4(),
crate::SourceRange::default(),
&ModelingCmd::from(
mcmd::BoundingBox::builder()
.output_unit(UnitLength::Millimeters)
.build(),
),
)
.await
.expect("simulation test should measure the model bounding box");
let OkWebSocketResponseData::Modeling {
modeling_response: OkModelingCmdResponse::BoundingBox(bounding_box),
} = bounding_box_response
else {
panic!("Expected a bounding box response, got {bounding_box_response:?}");
};
let surface_area_response = ctx
.engine
.send_modeling_cmd(
&ctx.engine_batch,
Uuid::new_v4(),
crate::SourceRange::default(),
&ModelingCmd::from(
mcmd::SurfaceArea::builder()
.output_unit(UnitArea::SquareMillimeters)
.build(),
),
)
.await
.expect("simulation test should measure the model surface area");
let OkWebSocketResponseData::Modeling {
modeling_response: OkModelingCmdResponse::SurfaceArea(surface_area),
} = surface_area_response
else {
panic!("Expected a surface area response, got {surface_area_response:?}");
};
Some(serde_json::json!({
"bounding_box": {
"center": bounding_box.center,
"dimensions": bounding_box.dimensions,
"unit": UnitLength::Millimeters,
},
"weight": {
"value": mass.mass,
"unit": mass.output_unit,
"material_density": MATERIAL_DENSITY_KG_PER_CUBIC_METER,
"material_density_unit": UnitDensity::KilogramsPerCubicMeter,
},
"surface_area": {
"value": surface_area.surface_area,
"unit": surface_area.output_unit,
},
}))
}
async fn execute_test(test: &Test, render_to_png: bool) {
crate::set_kcl_runtime_flags(crate::KclRuntimeFlags {
enable_z0006_lint: crate::RuntimeFlag::On,
..Default::default()
});
let input = test.read();
let ast = crate::Program::parse_no_errs(&input).unwrap();
let program_to_lint = ast.clone();
eprintln!("=========");
eprintln!("Running test {}", test.name);
if test.input_dir != test.output_dir {
eprintln!("\tInput dir: {}", test.input_dir.display());
eprintln!("\tOutput dir: {}", test.output_dir.display());
} else {
eprintln!("\t Test dir: {}", test.output_dir.display());
}
eprintln!(
"\t To accept changes to snapshots, run `just overwrite-sim-test {}`",
test.name
);
eprintln!("=========");
let exec_res = execute_with_retries(&RetryConfig::default(), || {
crate::test_server::execute_and_snapshot_ast_no_close(
ast.clone(),
Some(test.entry_point.clone()),
test.expected_deprecation_warnings
.map(|_| KCL_SAMPLE_DEPRECATION_VERSION),
)
})
.await;
match exec_res {
Ok((exec_state, ctx, env_ref, image)) => {
if let Some(expected_deprecation_warnings) = test.expected_deprecation_warnings {
let deprecation_warnings = exec_state
.issues()
.iter()
.filter(|issue| issue.tag == Tag::Deprecated)
.collect::<Vec<_>>();
assert_eq!(
deprecation_warnings.len(),
expected_deprecation_warnings,
"KCL sample `{}` expected {expected_deprecation_warnings} deprecation warnings, got: {deprecation_warnings:#?}",
test.name,
);
}
if let Ok(path) = std::env::var("KCL_DEPTH_HIGH_WATER_FILE") {
use std::io::Write;
if let Ok(mut f) = std::fs::OpenOptions::new().create(true).append(true).open(path) {
let _ = writeln!(f, "{}\t{}", exec_state.machine_depth_high_water(), test.name);
}
}
let fail_path = test.output_dir.join("execution_error.snap");
if std::fs::exists(&fail_path).unwrap() {
panic!(
"This test case is expected to fail, but it passed. If this is intended, and the test should actually be passing now, please delete kcl-lib/{}",
fail_path.to_string_lossy()
)
}
if render_to_png
&& let Err(err) =
twenty_twenty::try_assert_image(test.output_dir.join(RENDERED_MODEL_NAME), &image, 0.99)
{
panic!(
"Image assertion failed: {err}; input KCL file: {}",
test.entry_point.display()
);
}
let ok_snap = catch_unwind(AssertUnwindSafe(|| {
assert_snapshot(test, "Execution success", || {
insta::assert_json_snapshot!("execution_success", ())
})
}));
let mut lint_findings = program_to_lint
.lint_all_with_options(crate::lint::LintOptions::default().with_z0006(true))
.expect("failed to lint program");
lint_findings.extend(
exec_state
.modules()
.values()
.filter_map(|module| {
if matches!(module.path, ModulePath::Std { .. }) {
return None;
}
match &module.repr {
ModuleRepr::Root | ModuleRepr::Foreign(..) | ModuleRepr::Dummy => None,
ModuleRepr::Kcl(node, _exec_result) => Some(
node.lint_all_with_options(crate::lint::LintOptions::default().with_z0006(true))
.expect("failed to lint program"),
),
}
})
.flatten(),
);
lint_findings.retain(|finding| finding.finding.code != "Z0005");
let (outcome, program_memory, module_state, responses) =
exec_state.into_test_exec_outcome(env_ref, &ctx, &test.input_dir).await;
let physical_properties = if test.snapshot_physical_properties {
physical_properties(&ctx).await
} else {
None
};
ctx.close().await;
let mut snapshot_results = common_snapshots(test, program_memory, responses);
if let Some(physical_properties) = physical_properties {
snapshot_results.push(catch_unwind(AssertUnwindSafe(|| {
assert_physical_properties_snapshot(test, physical_properties)
})));
} else {
let physical_properties_snap_path = test.output_dir.join("physical_properties.snap");
if is_writing() {
let _ = std::fs::remove_file(&physical_properties_snap_path);
} else if physical_properties_snap_path.exists() {
panic!(
"This test case produced no physical model, but it previously did. If this is intended, delete kcl-lib/{}.",
physical_properties_snap_path.to_string_lossy()
);
}
}
assert_artifact_snapshots(test, module_state, outcome.artifact_graph);
let lint_snap_path = test.output_dir.join("lints.snap");
if lint_findings.is_empty() {
if is_writing() {
let _ = std::fs::remove_file(&lint_snap_path);
} else if lint_snap_path.exists() {
eprintln!(
"This test case produced no lints, but it previously did. If this is intended, and the test should actually be lint-free now, please delete kcl-lib/{}.",
lint_snap_path.to_string_lossy()
);
panic!("Missing lints");
}
} else {
assert_snapshot(test, "Lints", || insta::assert_json_snapshot!("lints", lint_findings));
}
for result in snapshot_results {
result.unwrap();
}
ok_snap.unwrap();
}
Err(e) => {
let ok_path = test.output_dir.join("execution_success.snap");
let previously_passed = std::fs::exists(&ok_path).unwrap();
match e.error {
crate::errors::ExecError::Kcl(error) => {
miette::set_hook(Box::new(|_| {
Box::new(miette::MietteHandlerOpts::new().show_related_errors_as_nested().build())
}))
.unwrap();
let report = error.clone().into_miette_report_with_outputs(&input).unwrap();
let report = miette::Report::new(report);
if previously_passed {
eprintln!(
"This test case failed, but it previously passed. If this is intended, and the test should actually be failing now, please delete kcl-lib/{} and other associated passing artifacts",
ok_path.to_string_lossy()
);
panic!("{report:?}");
}
let report = format!("{report:?}");
let err_result = catch_unwind(AssertUnwindSafe(|| {
assert_snapshot(test, "Error from executing", || {
insta::assert_snapshot!("execution_error", report);
})
}));
let responses = {
#[cfg(feature = "snapshot-engine-responses")]
{
e.responses
}
#[cfg(not(feature = "snapshot-engine-responses"))]
None
};
let program_memory = error
.variables
.into_iter()
.map(|(name, value)| (name, ProgramMemoryValueSnapshot::View(value)))
.collect();
let snapshot_results = common_snapshots(test, program_memory, responses);
{
let module_state = e
.exec_state
.map(|e| e.to_module_state(&test.input_dir))
.unwrap_or_default();
assert_artifact_snapshots(test, module_state, error.artifact_graph);
}
for result in snapshot_results {
result.unwrap();
}
err_result.unwrap();
}
e => {
panic!("{e}")
}
};
}
}
}
#[must_use]
fn common_snapshots(
test: &Test,
variables: IndexMap<String, ProgramMemoryValueSnapshot>,
#[cfg_attr(not(feature = "snapshot-engine-responses"), expect(unused_variables))] responses: Option<
IndexMap<Uuid, WebSocketResponse>,
>,
) -> Vec<Result<(), Box<dyn Any + Send>>> {
let mem_result = catch_unwind(AssertUnwindSafe(|| {
assert_snapshot(test, "Variables in memory after executing", || {
insta::assert_json_snapshot!("program_memory", variables, {
".**.sourceRange" => Vec::new(),
})
})
}));
#[cfg(feature = "snapshot-engine-responses")]
let responses_result_option = responses.map(|responses| {
catch_unwind(AssertUnwindSafe(|| {
assert_snapshot(test, "Root module engine responses", || {
insta::assert_json_snapshot!("root_module_engine_responses", responses)
})
}))
});
let results = vec![mem_result];
#[cfg(feature = "snapshot-engine-responses")]
{
if let Some(responses_result) = responses_result_option {
let mut results = results;
results.push(responses_result);
return results;
}
}
results
}
fn assert_artifact_snapshots(
test: &Test,
module_state: IndexMap<String, ModuleArtifactState>,
artifact_graph: ArtifactGraph,
) {
let module_operations = module_state
.iter()
.map(|(path, s)| (path, &s.operations))
.filter(|(_path, s)| !s.is_empty())
.collect::<IndexMap<_, _>>();
let result1 = catch_unwind(AssertUnwindSafe(|| {
assert_snapshot(test, "Operations executed", || {
insta::assert_json_snapshot!("ops", module_operations, {
".**.sourceRange" => Vec::new(),
".**.functionSourceRange" => Vec::new(),
".**.moduleId" => 0,
});
})
}));
let module_commands = module_state
.iter()
.map(|(path, s)| (path, &s.commands))
.filter(|(_path, s)| !s.is_empty())
.collect::<IndexMap<_, _>>();
let result2 = catch_unwind(AssertUnwindSafe(|| {
assert_snapshot(test, "Artifact commands", || {
insta::assert_json_snapshot!("artifact_commands", module_commands, {
".**.range" => Vec::new(),
});
})
}));
let result3 = catch_unwind(AssertUnwindSafe(|| {
let is_writing = is_writing();
if !test.skip_assert_artifact_graph || is_writing {
assert_snapshot(test, "Artifact graph flowchart", || {
let flowchart = artifact_graph
.to_mermaid_flowchart()
.unwrap_or_else(|e| format!("Failed to convert artifact graph to flowchart: {e}"));
insta::assert_binary_snapshot!("artifact_graph_flowchart.md", flowchart.as_bytes().to_owned());
})
}
}));
result1.unwrap();
result2.unwrap();
result3.unwrap();
}
mod cube {
const TEST_NAME: &str = "cube";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod cube_with_error {
const TEST_NAME: &str = "cube_with_error";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod any_type {
const TEST_NAME: &str = "any_type";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod coerce_from_trig_to_point {
const TEST_NAME: &str = "coerce_from_trig_to_point";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod artifact_graph_example_code1 {
const TEST_NAME: &str = "artifact_graph_example_code1";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod artifact_graph_example_code_no_3d {
const TEST_NAME: &str = "artifact_graph_example_code_no_3d";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod artifact_graph_example_code_offset_planes {
const TEST_NAME: &str = "artifact_graph_example_code_offset_planes";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod artifact_graph_sketch_on_face_etc {
const TEST_NAME: &str = "artifact_graph_sketch_on_face_etc";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod helix_ccw {
const TEST_NAME: &str = "helix_ccw";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod double_map_fn {
const TEST_NAME: &str = "double_map_fn";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod blend_with_edge_specifier_objects {
const TEST_NAME: &str = "blend_with_edge_specifier_objects";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod extrude_to_edge_specifier {
const TEST_NAME: &str = "extrude_to_edge_specifier";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod revolve_axis_edge_ref {
const TEST_NAME: &str = "revolve_axis_edge_ref";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod index_of_array {
const TEST_NAME: &str = "index_of_array";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod comparisons {
const TEST_NAME: &str = "comparisons";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_range_expr {
const TEST_NAME: &str = "array_range_expr";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_range_negative_expr {
const TEST_NAME: &str = "array_range_negative_expr";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_range_with_units {
const TEST_NAME: &str = "array_range_with_units";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_range_mismatch_units {
const TEST_NAME: &str = "array_range_mismatch_units";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_range_units_default_count {
const TEST_NAME: &str = "array_range_units_default_count";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod sketch_in_object {
const TEST_NAME: &str = "sketch_in_object";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod if_else {
const TEST_NAME: &str = "if_else";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod add_lots {
const TEST_NAME: &str = "add_lots";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod add_arrays {
const TEST_NAME: &str = "add_arrays";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod argument_error {
const TEST_NAME: &str = "argument_error";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_elem_push {
const TEST_NAME: &str = "array_elem_push";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_concat_non_array {
const TEST_NAME: &str = "array_concat_non_array";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod invalid_index_str {
const TEST_NAME: &str = "invalid_index_str";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod invalid_index_negative {
const TEST_NAME: &str = "invalid_index_negative";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod invalid_index_fractional {
const TEST_NAME: &str = "invalid_index_fractional";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod property_access_not_found_on_solid {
const TEST_NAME: &str = "property_access_not_found_on_solid";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod invalid_member_object {
const TEST_NAME: &str = "invalid_member_object";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod invalid_member_object_prop {
const TEST_NAME: &str = "invalid_member_object_prop";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod invalid_member_object_using_string {
const TEST_NAME: &str = "invalid_member_object_using_string";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod non_string_key_of_object {
const TEST_NAME: &str = "non_string_key_of_object";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_index_oob {
const TEST_NAME: &str = "array_index_oob";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod object_prop_not_found {
const TEST_NAME: &str = "object_prop_not_found";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod pipe_substitution_inside_function_called_from_pipeline {
const TEST_NAME: &str = "pipe_substitution_inside_function_called_from_pipeline";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod comparisons_multiple {
const TEST_NAME: &str = "comparisons_multiple";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_cycle1 {
const TEST_NAME: &str = "import_cycle1";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_only_at_top_level {
const TEST_NAME: &str = "import_only_at_top_level";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_function_not_sketch {
const TEST_NAME: &str = "import_function_not_sketch";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod import_constant {
const TEST_NAME: &str = "import_constant";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_export {
const TEST_NAME: &str = "import_export";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_glob {
const TEST_NAME: &str = "import_glob";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_whole_simple {
const TEST_NAME: &str = "import_whole_simple";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_whole_transitive_import {
const TEST_NAME: &str = "import_whole_transitive_import";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_side_effect {
const TEST_NAME: &str = "import_side_effect";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_foreign {
const TEST_NAME: &str = "import_foreign";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod export_var_only_at_top_level {
const TEST_NAME: &str = "export_var_only_at_top_level";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_nested_runtime_error {
const TEST_NAME: &str = "import_nested_runtime_error";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod assembly_non_default_units {
const TEST_NAME: &str = "assembly_non_default_units";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod array_elem_push_fail {
const TEST_NAME: &str = "array_elem_push_fail";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_push_item_wrong_type {
const TEST_NAME: &str = "array_push_item_wrong_type";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod sketch_on_face {
const TEST_NAME: &str = "sketch_on_face";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod revolve_about_edge {
const TEST_NAME: &str = "revolve_about_edge";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod poop_chute {
const TEST_NAME: &str = "poop_chute";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod neg_xz_plane {
const TEST_NAME: &str = "neg_xz_plane";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod xz_plane {
const TEST_NAME: &str = "xz_plane";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_after_fillets_referencing_face {
const TEST_NAME: &str = "sketch_on_face_after_fillets_referencing_face";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod circular_pattern3d_a_pattern {
const TEST_NAME: &str = "circular_pattern3d_a_pattern";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod linear_pattern3d_a_pattern {
const TEST_NAME: &str = "linear_pattern3d_a_pattern";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod pattern_circular_in_module {
const TEST_NAME: &str = "pattern_circular_in_module";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod pattern_linear_in_module {
const TEST_NAME: &str = "pattern_linear_in_module";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod tangential_arc {
const TEST_NAME: &str = "tangential_arc";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_circle_tagged {
const TEST_NAME: &str = "sketch_on_face_circle_tagged";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod basic_fillet_cube_start {
const TEST_NAME: &str = "basic_fillet_cube_start";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod basic_fillet_cube_next_adjacent {
const TEST_NAME: &str = "basic_fillet_cube_next_adjacent";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod basic_fillet_cube_previous_adjacent {
const TEST_NAME: &str = "basic_fillet_cube_previous_adjacent";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod basic_fillet_cube_end {
const TEST_NAME: &str = "basic_fillet_cube_end";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod basic_fillet_cube_close_opposite {
const TEST_NAME: &str = "basic_fillet_cube_close_opposite";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_end {
const TEST_NAME: &str = "sketch_on_face_end";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_start {
const TEST_NAME: &str = "sketch_on_face_start";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_end_negative_extrude {
const TEST_NAME: &str = "sketch_on_face_end_negative_extrude";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod pentagon_fillet_sugar {
const TEST_NAME: &str = "pentagon_fillet_sugar";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod pipe_as_arg {
const TEST_NAME: &str = "pipe_as_arg";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod computed_var {
const TEST_NAME: &str = "computed_var";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod riddle_small {
const TEST_NAME: &str = "riddle_small";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod tan_arc_x_line {
const TEST_NAME: &str = "tan_arc_x_line";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod fillet_and_shell {
const TEST_NAME: &str = "fillet-and-shell";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_chamfer_two_times {
const TEST_NAME: &str = "sketch-on-chamfer-two-times";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_chamfer_two_times_different_order {
const TEST_NAME: &str = "sketch-on-chamfer-two-times-different-order";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod parametric_with_tan_arc {
const TEST_NAME: &str = "parametric_with_tan_arc";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod parametric {
const TEST_NAME: &str = "parametric";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod ssi_pattern {
const TEST_NAME: &str = "ssi_pattern";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod angled_line {
const TEST_NAME: &str = "angled_line";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod function_sketch_with_position {
const TEST_NAME: &str = "function_sketch_with_position";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod function_sketch {
const TEST_NAME: &str = "function_sketch";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod i_shape {
const TEST_NAME: &str = "i_shape";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod kittycad_svg {
const TEST_NAME: &str = "kittycad_svg";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod kw_fn {
const TEST_NAME: &str = "kw_fn";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod kw_fn_too_few_args {
const TEST_NAME: &str = "kw_fn_too_few_args";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod kw_fn_unlabeled_but_has_label {
const TEST_NAME: &str = "kw_fn_unlabeled_but_has_label";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod kw_fn_with_defaults {
const TEST_NAME: &str = "kw_fn_with_defaults";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod function_expr_with_name {
const TEST_NAME: &str = "function_expr_with_name";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod recursive_function_factorial {
const TEST_NAME: &str = "recursive_function_factorial";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod boolean_logical_and {
const TEST_NAME: &str = "boolean_logical_and";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod boolean_logical_or {
const TEST_NAME: &str = "boolean_logical_or";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod boolean_logical_multiple {
const TEST_NAME: &str = "boolean_logical_multiple";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod circle_three_point {
const TEST_NAME: &str = "circle_three_point";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod array_elem_pop {
const TEST_NAME: &str = "array_elem_pop";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_elem_pop_empty_fail {
const TEST_NAME: &str = "array_elem_pop_empty_fail";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod array_elem_pop_fail {
const TEST_NAME: &str = "array_elem_pop_fail";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod helix_simple {
const TEST_NAME: &str = "helix_simple";
#[test]
fn parse() {
super::parse(TEST_NAME);
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod helix_axis_edge_ref {
const TEST_NAME: &str = "helix_axis_edge_ref";
#[test]
fn parse() {
super::parse(TEST_NAME);
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod import_file_not_exist_error {
const TEST_NAME: &str = "import_file_not_exist_error";
#[test]
fn parse() {
super::parse(TEST_NAME);
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod import_file_parse_error {
const TEST_NAME: &str = "import_file_parse_error";
#[test]
fn parse() {
super::parse(TEST_NAME);
}
#[test]
fn unparse() {
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod flush_batch_on_end {
const TEST_NAME: &str = "flush_batch_on_end";
#[test]
fn parse() {
super::parse(TEST_NAME);
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod multi_transform {
const TEST_NAME: &str = "multi_transform";
#[test]
fn parse() {
super::parse(TEST_NAME);
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod module_return_using_var {
const TEST_NAME: &str = "module_return_using_var";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod import_transform {
const TEST_NAME: &str = "import_transform";
#[test]
fn parse() {
super::parse(TEST_NAME);
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod out_of_band_sketches {
const TEST_NAME: &str = "out_of_band_sketches";
#[test]
fn parse() {
super::parse(TEST_NAME);
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod crazy_multi_profile {
const TEST_NAME: &str = "crazy_multi_profile";
#[test]
fn parse() {
super::parse(TEST_NAME);
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod assembly_mixed_units_cubes {
const TEST_NAME: &str = "assembly_mixed_units_cubes";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod bad_units_in_annotation {
const TEST_NAME: &str = "bad_units_in_annotation";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod translate_after_fillet {
const TEST_NAME: &str = "translate_after_fillet";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod scale_after_fillet {
const TEST_NAME: &str = "scale_after_fillet";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod rotate_after_fillet {
const TEST_NAME: &str = "rotate_after_fillet";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod union_cubes {
const TEST_NAME: &str = "union_cubes";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_cylinder_from_cube {
const TEST_NAME: &str = "subtract_cylinder_from_cube";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod intersect_cubes {
const TEST_NAME: &str = "intersect_cubes";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod csg_subtract_multi_target_result_reuse {
const TEST_NAME: &str = "csg_subtract_multi_target_result_reuse";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod csg_subtract_self_empty_result {
const TEST_NAME: &str = "csg_subtract_self_empty_result";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod pattern_into_union {
const TEST_NAME: &str = "pattern_into_union";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_doesnt_need_brackets {
const TEST_NAME: &str = "subtract_doesnt_need_brackets";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod tangent_to_3_point_arc {
const TEST_NAME: &str = "tangent_to_3_point_arc";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod import_async {
const TEST_NAME: &str = "import_async";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod loop_tag {
const TEST_NAME: &str = "loop_tag";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod multiple_foreign_imports_all_render {
const TEST_NAME: &str = "multiple-foreign-imports-all-render";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod import_mesh_clone {
const TEST_NAME: &str = "import_mesh_clone";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod clone_w_fillets {
const TEST_NAME: &str = "clone_w_fillets";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
#[ignore] async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod clone_w_shell {
const TEST_NAME: &str = "clone_w_shell";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod involute_circular_units {
const TEST_NAME: &str = "involute_circular_units";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod panic_repro_cube {
const TEST_NAME: &str = "panic_repro_cube";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression00 {
const TEST_NAME: &str = "subtract_regression00";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression01 {
const TEST_NAME: &str = "subtract_regression01";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression02 {
const TEST_NAME: &str = "subtract_regression02";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression03 {
const TEST_NAME: &str = "subtract_regression03";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression04 {
const TEST_NAME: &str = "subtract_regression04";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression05 {
const TEST_NAME: &str = "subtract_regression05";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression06 {
const TEST_NAME: &str = "subtract_regression06";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod fillet_duplicate_tags {
const TEST_NAME: &str = "fillet_duplicate_tags";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod execute_engine_error_return {
const TEST_NAME: &str = "execute_engine_error_return";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod basic_revolve_circle {
const TEST_NAME: &str = "basic_revolve_circle";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod error_inside_fn_also_has_source_range_of_call_site_recursive {
const TEST_NAME: &str = "error_inside_fn_also_has_source_range_of_call_site_recursive";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod revolve_on_edge_get_edge {
const TEST_NAME: &str = "revolve_on_edge_get_edge";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_with_pattern {
const TEST_NAME: &str = "subtract_with_pattern";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_with_pattern_cut_thru {
const TEST_NAME: &str = "subtract_with_pattern_cut_thru";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_union {
const TEST_NAME: &str = "sketch_on_face_union";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod multi_target_csg {
const TEST_NAME: &str = "multi_target_csg";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod revolve_colinear {
const TEST_NAME: &str = "revolve-colinear";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression07 {
const TEST_NAME: &str = "subtract_regression07";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression08 {
const TEST_NAME: &str = "subtract_regression08";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression09 {
const TEST_NAME: &str = "subtract_regression09";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression10 {
const TEST_NAME: &str = "subtract_regression10";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod nested_main_kcl {
const TEST_NAME: &str = "nested_main_kcl";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod nested_windows_main_kcl {
const TEST_NAME: &str = "nested_windows_main_kcl";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod nested_assembly {
const TEST_NAME: &str = "nested_assembly";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression11 {
const TEST_NAME: &str = "subtract_regression11";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_regression12 {
const TEST_NAME: &str = "subtract_regression12";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod spheres {
const TEST_NAME: &str = "spheres";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod var_ref_in_own_def {
const TEST_NAME: &str = "var_ref_in_own_def";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod ascription_unknown_type {
const TEST_NAME: &str = "ascription_unknown_type";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod var_ref_in_own_def_decl {
const TEST_NAME: &str = "var_ref_in_own_def_decl";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod user_reported_union_2_bug {
const TEST_NAME: &str = "user_reported_union_2_bug";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod non_english_identifiers {
const TEST_NAME: &str = "non_english_identifiers";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod rect {
const TEST_NAME: &str = "rect";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod rect_helper {
const TEST_NAME: &str = "rect_helper";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod plane_of {
const TEST_NAME: &str = "plane_of";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod complex_expr_as_array_index {
const TEST_NAME: &str = "complex_expr_as_array_index";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod elliptic_curve_inches_regression {
const TEST_NAME: &str = "elliptic_curve_inches_regression";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod tag_inner_face {
const TEST_NAME: &str = "tag_inner_face";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod double_close {
const TEST_NAME: &str = "double_close";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod revolve_on_face {
const TEST_NAME: &str = "revolve_on_face";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_self {
const TEST_NAME: &str = "subtract_self";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod subtract_self_multiple_tools {
const TEST_NAME: &str = "subtract_self_multiple_tools";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod union_self {
const TEST_NAME: &str = "union_self";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod plane_of_chamfer {
const TEST_NAME: &str = "plane_of_chamfer";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_basic_fixed_constraints {
const TEST_NAME: &str = "sketch_block_basic_fixed_constraints";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod sketch_block_failed_unit_conversion {
const TEST_NAME: &str = "sketch_block_failed_unit_conversion";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod sketch_block_unexpected_argument {
const TEST_NAME: &str = "sketch_block_unexpected_argument";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod sketch_block_unexpected_shorthand_arg {
const TEST_NAME: &str = "sketch_block_unexpected_shorthand_arg";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod sketch_block_vars_equal {
const TEST_NAME: &str = "sketch_block_vars_equal";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod sketch_block_coincident_constraint {
const TEST_NAME: &str = "sketch_block_coincident_constraint";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod sketch_block_coincident_point2d {
const TEST_NAME: &str = "sketch_block_coincident_point2d";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_arc_using_center_simple {
const TEST_NAME: &str = "sketch_block_arc_using_center_simple";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_arc_using_center_coincident {
const TEST_NAME: &str = "sketch_block_arc_using_center_coincident";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_circle_simple {
const TEST_NAME: &str = "sketch_block_circle_simple";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_modeling_command_is_error {
const TEST_NAME: &str = "sketch_block_modeling_command_is_error";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod holes_cube {
const TEST_NAME: &str = "holes_cube";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod multi_body_multi_tool_subtract {
const TEST_NAME: &str = "multi_body_multi_tool_subtract";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_line_simple {
const TEST_NAME: &str = "sketch_block_line_simple";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_points_coincident_simple {
const TEST_NAME: &str = "sketch_block_points_coincident_simple";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_lines_coincident_simple {
const TEST_NAME: &str = "sketch_block_lines_coincident_simple";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_on_face {
const TEST_NAME: &str = "sketch_block_on_face";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_on_plane_of {
const TEST_NAME: &str = "sketch_block_on_plane_of";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_on_offset_plane {
const TEST_NAME: &str = "sketch_block_on_offset_plane";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_region_triangle {
const TEST_NAME: &str = "sketch_block_region_triangle";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_region_from_point_in_triangle {
const TEST_NAME: &str = "sketch_block_region_from_point_in_triangle";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_region_from_point2d_in_triangle {
const TEST_NAME: &str = "sketch_block_region_from_point2d_in_triangle";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_on_negative_plane {
const TEST_NAME: &str = "sketch_block_on_negative_plane";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_normal {
const TEST_NAME: &str = "sketch_on_face_normal";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_normal_inches {
const TEST_NAME: &str = "sketch_on_face_normal_inches";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_of_region_extrude_one_to_one {
const TEST_NAME: &str = "sketch_on_face_of_region_extrude_one_to_one";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_of_region_extrude_one_to_many {
const TEST_NAME: &str = "sketch_on_face_of_region_extrude_one_to_many";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_tags_do_not_leak_to_parent_from_region {
const TEST_NAME: &str = "sketch_block_tags_do_not_leak_to_parent_from_region";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_tags_do_not_leak_to_parent_from_extrude {
const TEST_NAME: &str = "sketch_block_tags_do_not_leak_to_parent_from_extrude";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_import_multiple {
const TEST_NAME: &str = "sketch_block_import_multiple";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_get_common_edge_fillet {
const TEST_NAME: &str = "sketch_block_get_common_edge_fillet";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod crab_mirror_region {
const TEST_NAME: &str = "crab_mirror_region";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_loft_subtract {
const TEST_NAME: &str = "sketch_on_face_loft_subtract";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod get_common_edge_of_segment_edge_tag {
const TEST_NAME: &str = "get_common_edge_of_segment_edge_tag";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod pos_literals {
const TEST_NAME: &str = "pos_literals";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod runtime_exit {
const TEST_NAME: &str = "runtime_exit";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod extrude_closes {
const TEST_NAME: &str = "extrude_closes";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod implicit_close {
const TEST_NAME: &str = "implicit_close";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod extrude_face {
const TEST_NAME: &str = "extrude_face";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_lines_coincident_collinear {
const TEST_NAME: &str = "sketch_block_lines_coincident_collinear";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod face_api_fillet_edge_refs_variant_1 {
const TEST_NAME: &str = "face_api_fillet_edge_refs_variant_1";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod face_api_fillet_edge_refs_variant_2 {
const TEST_NAME: &str = "face_api_fillet_edge_refs_variant_2";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod face_api_fillet_edge_refs_variant_3 {
const TEST_NAME: &str = "face_api_fillet_edge_refs_variant_3";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod face_api_fillet_edge_refs_variant_4 {
const TEST_NAME: &str = "face_api_fillet_edge_refs_variant_4";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod face_api_fillet_edge_refs_variant_5 {
const TEST_NAME: &str = "face_api_fillet_edge_refs_variant_5";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod face_api_fillet_edge_refs_variant_6 {
const TEST_NAME: &str = "face_api_fillet_edge_refs_variant_6";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod face_api_fillet_edge_refs_variant_7 {
const TEST_NAME: &str = "face_api_fillet_edge_refs_variant_7";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod face_api_fillet_chamfer_tags_and_edge_refs {
const TEST_NAME: &str = "face_api_fillet_chamfer_tags_and_edge_refs";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_face_index {
const TEST_NAME: &str = "sketch_on_face_index";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod delete_face_by_index {
const TEST_NAME: &str = "delete_face_by_index";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod delete_face_by_id {
const TEST_NAME: &str = "delete_face_by_id";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_angle_constraint {
const TEST_NAME: &str = "sketch_block_angle_constraint";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod tangent_line_arc {
const TEST_NAME: &str = "tangent_line_arc";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod tangent_line_circle {
const TEST_NAME: &str = "tangent_line_circle";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod tangent_line_arc_reversed_line {
const TEST_NAME: &str = "tangent_line_arc_reversed_line";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod tangent_arc_arc {
const TEST_NAME: &str = "tangent_arc_arc";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod tangent_line_line_error {
const TEST_NAME: &str = "tangent_line_line_error";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod tangent_circle_circle {
const TEST_NAME: &str = "tangent_circle_circle";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod tangent_circle_circle_native {
const TEST_NAME: &str = "tangent_circle_circle_native";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod equal_radius_circle_circle_native {
const TEST_NAME: &str = "equal_radius_circle_circle_native";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod equal_radius_arc_arc_native {
const TEST_NAME: &str = "equal_radius_arc_arc_native";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod equal_radius_arc_circle_native {
const TEST_NAME: &str = "equal_radius_arc_circle_native";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod tangent_arc_arc_math_only {
const TEST_NAME: &str = "tangent_arc_arc_math_only";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod endless_impeller {
const TEST_NAME: &str = "endless_impeller";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod consumed_solid_subtract_reuse_target {
const TEST_NAME: &str = "consumed_solid_subtract_reuse_target";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod consumed_solid_subtract_use_result_success {
const TEST_NAME: &str = "consumed_solid_subtract_use_result_success";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod consumed_solid_join_surfaces_reuse_input {
const TEST_NAME: &str = "consumed_solid_join_surfaces_reuse_input";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod consumed_solid_join_surfaces_consumed_input {
const TEST_NAME: &str = "consumed_solid_join_surfaces_consumed_input";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod consumed_solid_clone {
const TEST_NAME: &str = "consumed_solid_clone";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod consumed_solid_appearance {
const TEST_NAME: &str = "consumed_solid_appearance";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod consumed_solid_binary_add {
const TEST_NAME: &str = "consumed_solid_binary_add";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod consumed_solid_binary_subtract {
const TEST_NAME: &str = "consumed_solid_binary_subtract";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod join_surfaces_single_input_does_not_consume {
const TEST_NAME: &str = "join_surfaces_single_input_does_not_consume";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod kcl_v2 {
const TEST_NAME: &str = "kcl_v2";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod inconsistent_sketch {
const TEST_NAME: &str = "inconsistent_sketch";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod inconsistent_sketch_converge {
const TEST_NAME: &str = "inconsistent_sketch_converge";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod consumed_solid_original_issue {
const TEST_NAME: &str = "consumed_solid_original_issue";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod zds_extrude_fillet_top_edge {
const TEST_NAME: &str = "zds_extrude_fillet_top_edge";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod regression_test_hide_flatten_consumed {
const TEST_NAME: &str = "regression_test_hide_flatten_consumed";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod christmas_tree_mirror3d_union {
const TEST_NAME: &str = "christmas_tree_mirror3d_union";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod delete_body {
const TEST_NAME: &str = "delete_body";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod solid_edge_cut_using_edge_ref_csg {
const TEST_NAME: &str = "solid_edge_cut_using_edge_ref_csg";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod extrude_split {
const TEST_NAME: &str = "extrude_split";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod loft_arc_subtract {
const TEST_NAME: &str = "loft_arc_subtract";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod hide_offset_plane {
const TEST_NAME: &str = "hide_offset_plane";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod clone_a_mirror3d {
const TEST_NAME: &str = "clone_a_mirror3d";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod surface_extrude_edge_from_solid {
const TEST_NAME: &str = "surface_extrude_edge_from_solid";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_circle_constants {
const TEST_NAME: &str = "sketch_block_circle_constants";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod surface_extrude_edge_from_surface {
const TEST_NAME: &str = "surface_extrude_edge_from_surface";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod radius_circle_native {
const TEST_NAME: &str = "radius_circle_native";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod surface_extrude_edge_direction {
const TEST_NAME: &str = "surface_extrude_edge_direction";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod surface_extrude_edge_symmetric {
const TEST_NAME: &str = "surface_extrude_edge_symmetric";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod surface_extrude_edge_bidirectional {
const TEST_NAME: &str = "surface_extrude_edge_bidirectional";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod surface_extrude_edge_to {
const TEST_NAME: &str = "surface_extrude_edge_to";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod surface_extrude_edge_merge_error {
const TEST_NAME: &str = "surface_extrude_edge_merge_error";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod sweep_mirror {
const TEST_NAME: &str = "sweep_mirror";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod beam_sweeps {
const TEST_NAME: &str = "beam_sweeps";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod truss_bridge {
const TEST_NAME: &str = "truss_bridge";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod fillet_ambiguous_region_edge_specifier {
const TEST_NAME: &str = "fillet_ambiguous_region_edge_specifier";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod fillet_ambiguous_region_edge_specifier_broad {
const TEST_NAME: &str = "fillet_ambiguous_region_edge_specifier_broad";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod chamfer_multiple_auto_hole_region_face_api {
const TEST_NAME: &str = "chamfer_multiple_auto_hole_region_face_api";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod gdt_face_api_edge_specifier {
const TEST_NAME: &str = "gdt_face_api_edge_specifier";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod error_large_fillet_radius {
const TEST_NAME: &str = "error_large_fillet_radius";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod clone_w_face_tags {
const TEST_NAME: &str = "clone_w_face_tags";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod surface_extrude_edge_specifier_input {
const TEST_NAME: &str = "surface_extrude_edge_specifier_input";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_exit {
const TEST_NAME: &str = "sketch_block_exit";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod surface_extrude_edge_specifier_direction {
const TEST_NAME: &str = "surface_extrude_edge_specifier_direction";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod mirror3d_edge_specifier {
const TEST_NAME: &str = "mirror3d_edge_specifier";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod mirror3d_edge_specifier_after_subtract {
const TEST_NAME: &str = "mirror3d_edge_specifier_after_subtract";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod fail_user_defined_error {
const TEST_NAME: &str = "fail_user_defined_error";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod runtime_exit_in_map {
const TEST_NAME: &str = "runtime_exit_in_map";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod runtime_exit_in_reduce {
const TEST_NAME: &str = "runtime_exit_in_reduce";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod runtime_exit_in_pattern_transform {
const TEST_NAME: &str = "runtime_exit_in_pattern_transform";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod runtime_exit_in_imported_module {
const TEST_NAME: &str = "runtime_exit_in_imported_module";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod runtime_exit_in_index {
const TEST_NAME: &str = "runtime_exit_in_index";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod scale_helix {
const TEST_NAME: &str = "scale_helix";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod translate_helix {
const TEST_NAME: &str = "translate_helix";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod rotate_helix {
const TEST_NAME: &str = "rotate_helix";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_block_arc_direction_cw {
const TEST_NAME: &str = "sketch_block_arc_direction_cw";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod clone_a_pattern {
const TEST_NAME: &str = "clone_a_pattern";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod rolling_ball_chamfer_interacting_edges {
const TEST_NAME: &str = "rolling_ball_chamfer_interacting_edges";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod sketch_block_arc_direction_invalid {
const TEST_NAME: &str = "sketch_block_arc_direction_invalid";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod clone_an_import {
const TEST_NAME: &str = "clone_an_import";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_extrude_v1 {
const TEST_NAME: &str = "named_views_hide_extrude_v1";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_sweep_v1 {
const TEST_NAME: &str = "named_views_hide_sweep_v1";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_sketch_v1 {
const TEST_NAME: &str = "named_views_hide_sketch_v1";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_helix {
const TEST_NAME: &str = "named_views_hide_helix";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_imported {
const TEST_NAME: &str = "named_views_hide_imported";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_plane {
const TEST_NAME: &str = "named_views_hide_plane";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_extrude {
const TEST_NAME: &str = "named_views_hide_extrude";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_revolve {
const TEST_NAME: &str = "named_views_hide_revolve";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_sweep {
const TEST_NAME: &str = "named_views_hide_sweep";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_loft {
const TEST_NAME: &str = "named_views_hide_loft";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_sketch {
const TEST_NAME: &str = "named_views_hide_sketch";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_pattern {
const TEST_NAME: &str = "named_views_hide_pattern";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_hide_gdt {
const TEST_NAME: &str = "named_views_hide_gdt";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod named_views_module_explicit_import {
const TEST_NAME: &str = "named_views_module_explicit_import";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_module_prelude {
const TEST_NAME: &str = "named_views_module_prelude";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_module_requires_opt_in {
const TEST_NAME: &str = "named_views_module_requires_opt_in";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_oriented {
const TEST_NAME: &str = "named_views_oriented";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_directed {
const TEST_NAME: &str = "named_views_directed";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_directed_zero_direction {
const TEST_NAME: &str = "named_views_directed_zero_direction";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_units_are_millimeters {
const TEST_NAME: &str = "named_views_units_are_millimeters";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_units_in_inch_default_file {
const TEST_NAME: &str = "named_views_units_in_inch_default_file";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_negative_distance {
const TEST_NAME: &str = "named_views_negative_distance";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_baseline_show {
const TEST_NAME: &str = "named_views_baseline_show";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_baseline_hide {
const TEST_NAME: &str = "named_views_baseline_hide";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_duplicate_name {
const TEST_NAME: &str = "named_views_duplicate_name";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_duplicate_across_modules {
const TEST_NAME: &str = "named_views_duplicate_across_modules";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_duplicate_from_a_function {
const TEST_NAME: &str = "named_views_duplicate_from_a_function";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod named_views_except_a_sketch_block {
const TEST_NAME: &str = "named_views_except_a_sketch_block";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod clone_dodecahedron {
const TEST_NAME: &str = "clone_dodecahedron";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod mirror3d_and_boolean {
const TEST_NAME: &str = "mirror3d_and_boolean";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod use_point_from_other_sketch {
const TEST_NAME: &str = "use_point_from_other_sketch";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod import_nested_foreign_error {
const TEST_NAME: &str = "import_nested_foreign_error";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod import_error_in_other_module_with_overflow {
const TEST_NAME: &str = "import_error_in_other_module_with_overflow";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod early_return_v3 {
const TEST_NAME: &str = "early_return_v3";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod early_return_cross_module {
const TEST_NAME: &str = "early_return_cross_module";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod early_return_geometry {
const TEST_NAME: &str = "early_return_geometry";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod if_else_scoped {
const TEST_NAME: &str = "if_else_scoped";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod if_arm_scoped_geometry {
const TEST_NAME: &str = "if_arm_scoped_geometry";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod clone_a_blend {
const TEST_NAME: &str = "clone_a_blend";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod chamfer_multiple_tags_v3 {
const TEST_NAME: &str = "chamfer_multiple_tags_v3";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_chamfer_two_times_v3 {
const TEST_NAME: &str = "sketch_on_chamfer_two_times_v3";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sketch_on_chamfer_two_times_different_order_v3 {
const TEST_NAME: &str = "sketch_on_chamfer_two_times_different_order_v3";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod get_opposite_edge_after_fillet_v3 {
const TEST_NAME: &str = "get_opposite_edge_after_fillet_v3";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod sweep_profile_defaults_v3 {
const TEST_NAME: &str = "sweep_profile_defaults_v3";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod member_expression_order_v3 {
const TEST_NAME: &str = "member_expression_order_v3";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, true).await
}
}
mod import_kcl_version_mismatch_v3 {
const TEST_NAME: &str = "import_kcl_version_mismatch_v3";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}
mod import_kcl_version_mismatch_undeclared_entry_point {
const TEST_NAME: &str = "import_kcl_version_mismatch_undeclared_entry_point";
#[test]
fn parse() {
super::parse(TEST_NAME)
}
#[tokio::test(flavor = "multi_thread")]
async fn unparse() {
super::unparse(TEST_NAME).await
}
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_execute() {
super::execute(TEST_NAME, false).await
}
}