继续推进:用LinuxCNC配置生成switchkins测试
结论:M428/M429/M430 的配置匹配测试已从手写列表改为由 LinuxCNC INI/MACHINE/KINEMATICS/HALFILE 生成,native 与 source-link 验证通过。
This commit is contained in:
@@ -7,7 +7,11 @@ linuxcnc_root=${LINUXCNC_ROOT:-../linuxcnc}
|
||||
manifest=${1:-linuxcnc-kinematics-source-files.txt}
|
||||
|
||||
generated_table=$(mktemp "${TMPDIR:-/tmp}/linuxcnc_switchkins_remap_table.XXXXXX.inc")
|
||||
trap 'rm -f "$generated_table"' EXIT
|
||||
generated_cases=$(mktemp "${TMPDIR:-/tmp}/linuxcnc_switchkins_remap_config_cases.XXXXXX.inc")
|
||||
trap 'rm -f "$generated_table" "$generated_cases"' EXIT
|
||||
|
||||
LINUXCNC_ROOT="$linuxcnc_root" ./generate-linuxcnc-switchkins-remap-table.sh "$manifest" > "$generated_table"
|
||||
diff -u core/src/linuxcnc_switchkins_remap_table.inc "$generated_table"
|
||||
|
||||
LINUXCNC_ROOT="$linuxcnc_root" ./generate-linuxcnc-switchkins-remap-table.sh --config-cases "$manifest" > "$generated_cases"
|
||||
diff -u core/tests/linuxcnc_switchkins_remap_config_cases.inc "$generated_cases"
|
||||
|
||||
@@ -11321,64 +11321,7 @@ int main() {
|
||||
int m430_type;
|
||||
};
|
||||
const SourceBackedConfigCase source_cases[] = {
|
||||
{"config", "configs/sim/axis/vismach/5axis/bridgemill/5axis.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini", 1, 0, -1},
|
||||
{"config", "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", 1, 0, 2},
|
||||
{"config", "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini", 1, 0, 2},
|
||||
{"config",
|
||||
"configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/xyzacb-trsrn_twp/xyzacb-trsrn.ini",
|
||||
0,
|
||||
1,
|
||||
2},
|
||||
{"config",
|
||||
"configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/xyzbca-trsrn_twp/xyzbca-trsrn.ini",
|
||||
0,
|
||||
1,
|
||||
2},
|
||||
{"config", "configs/sim/axis/vismach/hexapod-sim/hexapod.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/melfa-sim/melfa.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/millturn/millturn.ini", 0, 1, -1},
|
||||
{"config", "configs/sim/axis/vismach/puma/puma.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/puma/puma_cube.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/puma/puma560.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/puma/puma560_uvw.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/scara/scara.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/qtaxis/non-trivial/scara/scara.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/qtvcp_screens/non-trivial/scara/scara.ini", 0, 1, 2},
|
||||
{"machine", "Sim-5Axis Bridge Mill (xyzbcw)", 0, 1, 2},
|
||||
{"machine", "sim-xyzab-tdr-kins (switchkins)", 1, 0, -1},
|
||||
{"machine", "sim-xyzac-trt-kins (switchkins)", 1, 0, 2},
|
||||
{"machine", "sim-xyzbc-trt-kins (switchkins)", 1, 0, 2},
|
||||
{"machine", "xyzacb-trsrn (switchkins)", 0, 1, 2},
|
||||
{"machine", "xyzbca-trsrn (switchkins)", 0, 1, 2},
|
||||
{"machine", "hexapod (switchkins)", 0, 1, 2},
|
||||
{"machine", "melfa (mm)", 0, 1, 2},
|
||||
{"machine", "millturn (mm)", 0, 1, -1},
|
||||
{"machine", "PUMA (pumakins,switchkins)", 0, 1, 2},
|
||||
{"machine", "puma_cube.ini (pumakins)", 0, 1, 2},
|
||||
{"machine", "puma560 (switchkins) (inch)", 0, 1, 2},
|
||||
{"machine", "SCARA (genserkins,switchkins)", 0, 1, 2},
|
||||
{"kinematics", "5axiskins", 0, 1, 2},
|
||||
{"kinematics", "xyzab_tdr_kins", 1, 0, -1},
|
||||
{"kinematics", "xyzac-trt-kins sparm=identityfirst", 1, 0, 2},
|
||||
{"kinematics", "xyzbc-trt-kins sparm=identityfirst", 1, 0, 2},
|
||||
{"kinematics", "xyzacb_trsrn", 0, 1, 2},
|
||||
{"kinematics", "xyzbca_trsrn", 0, 1, 2},
|
||||
{"kinematics", "genhexkins", 0, 1, 2},
|
||||
{"kinematics", "genserkins", 0, 1, 2},
|
||||
{"kinematics", "millturn", 0, 1, -1},
|
||||
{"kinematics", "pumakins", 0, 1, 2},
|
||||
{"kinematics", "scarakins coordinates=xyzcab", 0, 1, 2},
|
||||
{"halfile", "5axisgui.hal", 0, 1, 2},
|
||||
{"halfile", "5axisgui", 0, 1, 2},
|
||||
{"halfile", "kinematics.hal", 0, 1, 2},
|
||||
{"hal_file", "melfa_dh.hal", 0, 1, 2},
|
||||
{"hal_file", "melfa_dh", 0, 1, 2},
|
||||
{"hal_file", "millturn.hal", 0, 1, -1},
|
||||
{"halfile", "puma_dh.hal", 0, 1, 2},
|
||||
{"halfile", "puma_dh", 0, 1, 2},
|
||||
{"halfile", "puma560_dh.hal", 0, 1, 2},
|
||||
{"halfile", "puma560_dh", 0, 1, 2},
|
||||
#include "linuxcnc_switchkins_remap_config_cases.inc"
|
||||
};
|
||||
for (const SourceBackedConfigCase &source_case : source_cases) {
|
||||
const std::string json = std::string("{\"backend\":\"smoke\",\"") +
|
||||
|
||||
67
core/tests/linuxcnc_switchkins_remap_config_cases.inc
Normal file
67
core/tests/linuxcnc_switchkins_remap_config_cases.inc
Normal file
@@ -0,0 +1,67 @@
|
||||
// Generated by ./generate-linuxcnc-switchkins-remap-table.sh --config-cases.
|
||||
// Source: LinuxCNC INI config path, MACHINE, KINEMATICS, and non-LIB HALFILE entries
|
||||
// for M428/M429/M430 remap #<kinstype> assignments.
|
||||
{"config", "configs/sim/axis/vismach/5axis/bridgemill/5axis.ini", 0, 1, 2},
|
||||
{"machine", "Sim-5Axis Bridge Mill (xyzbcw)", 0, 1, 2},
|
||||
{"kinematics", "5axiskins coordinates=xyzbcwy", 0, 1, 2},
|
||||
{"halfile", "5axisgui.hal", 0, 1, 2},
|
||||
{"halfile", "5axisgui", 0, 1, 2},
|
||||
{"hal_file", "5axisgui.hal", 0, 1, 2},
|
||||
{"hal_file", "5axisgui", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/5axis/table-dual-rotary/xyzab-tdr.ini", 1, 0, -1},
|
||||
{"machine", "sim-xyzab-tdr-kins (switchkins)", 1, 0, -1},
|
||||
{"kinematics", "xyzab_tdr_kins", 1, 0, -1},
|
||||
{"config", "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", 1, 0, 2},
|
||||
{"machine", "sim-xyzac-trt-kins (switchkins)", 1, 0, 2},
|
||||
{"kinematics", "xyzac-trt-kins sparm=identityfirst", 1, 0, 2},
|
||||
{"config", "configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini", 1, 0, 2},
|
||||
{"machine", "sim-xyzbc-trt-kins (switchkins)", 1, 0, 2},
|
||||
{"kinematics", "xyzbc-trt-kins sparm=identityfirst", 1, 0, 2},
|
||||
{"config", "configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/xyzacb-trsrn_twp/xyzacb-trsrn.ini", 0, 1, 2},
|
||||
{"machine", "xyzacb-trsrn (switchkins)", 0, 1, 2},
|
||||
{"kinematics", "xyzacb_trsrn", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/5axis/table-rotary_spindle-rotary-nutating/xyzbca-trsrn_twp/xyzbca-trsrn.ini", 0, 1, 2},
|
||||
{"machine", "xyzbca-trsrn (switchkins)", 0, 1, 2},
|
||||
{"kinematics", "xyzbca_trsrn", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/hexapod-sim/hexapod.ini", 0, 1, 2},
|
||||
{"machine", "hexapod (switchkins)", 0, 1, 2},
|
||||
{"kinematics", "genhexkins", 0, 1, 2},
|
||||
{"halfile", "kinematics.hal", 0, 1, 2},
|
||||
{"halfile", "kinematics", 0, 1, 2},
|
||||
{"hal_file", "kinematics.hal", 0, 1, 2},
|
||||
{"hal_file", "kinematics", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/melfa-sim/melfa.ini", 0, 1, 2},
|
||||
{"machine", "melfa (mm)", 0, 1, 2},
|
||||
{"kinematics", "genserkins", 0, 1, 2},
|
||||
{"halfile", "melfa_dh.hal", 0, 1, 2},
|
||||
{"halfile", "melfa_dh", 0, 1, 2},
|
||||
{"hal_file", "melfa_dh.hal", 0, 1, 2},
|
||||
{"hal_file", "melfa_dh", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/millturn/millturn.ini", 0, 1, -1},
|
||||
{"machine", "millturn (mm)", 0, 1, -1},
|
||||
{"kinematics", "millturn", 0, 1, -1},
|
||||
{"halfile", "millturn.hal", 0, 1, -1},
|
||||
{"halfile", "millturn", 0, 1, -1},
|
||||
{"hal_file", "millturn.hal", 0, 1, -1},
|
||||
{"hal_file", "millturn", 0, 1, -1},
|
||||
{"config", "configs/sim/axis/vismach/puma/puma.ini", 0, 1, 2},
|
||||
{"machine", "PUMA (pumakins,switchkins)", 0, 1, 2},
|
||||
{"kinematics", "pumakins", 0, 1, 2},
|
||||
{"halfile", "puma_dh.hal", 0, 1, 2},
|
||||
{"halfile", "puma_dh", 0, 1, 2},
|
||||
{"hal_file", "puma_dh.hal", 0, 1, 2},
|
||||
{"hal_file", "puma_dh", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/puma/puma_cube.ini", 0, 1, 2},
|
||||
{"machine", "puma_cube.ini (pumakins)", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/puma/puma560.ini", 0, 1, 2},
|
||||
{"machine", "puma560 (switchkins) (inch)", 0, 1, 2},
|
||||
{"halfile", "puma560_dh.hal", 0, 1, 2},
|
||||
{"halfile", "puma560_dh", 0, 1, 2},
|
||||
{"hal_file", "puma560_dh.hal", 0, 1, 2},
|
||||
{"hal_file", "puma560_dh", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/puma/puma560_uvw.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/axis/vismach/scara/scara.ini", 0, 1, 2},
|
||||
{"machine", "SCARA (genserkins,switchkins)", 0, 1, 2},
|
||||
{"kinematics", "scarakins coordinates=xyzcab", 0, 1, 2},
|
||||
{"config", "configs/sim/qtaxis/non-trivial/scara/scara.ini", 0, 1, 2},
|
||||
{"config", "configs/sim/qtvcp_screens/non-trivial/scara/scara.ini", 0, 1, 2},
|
||||
@@ -4,6 +4,11 @@ set -euo pipefail
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
linuxcnc_root=${LINUXCNC_ROOT:-../linuxcnc}
|
||||
mode=table
|
||||
if [[ "${1:-}" == "--config-cases" ]]; then
|
||||
mode=config-cases
|
||||
shift
|
||||
fi
|
||||
manifest=${1:-linuxcnc-kinematics-source-files.txt}
|
||||
|
||||
if [[ ! -d "$linuxcnc_root" ]]; then
|
||||
@@ -117,8 +122,15 @@ json_compact_string() {
|
||||
printf '%s' "$value" | normalize_alias | sed 's/\\/\\\\/g; s/"/\\"/g'
|
||||
}
|
||||
|
||||
cpp_string() {
|
||||
local value=$1
|
||||
printf '%s' "$value" | sed 's/\\/\\\\/g; s/"/\\"/g'
|
||||
}
|
||||
|
||||
declare -A seen_aliases=()
|
||||
declare -A seen_cases=()
|
||||
entries=()
|
||||
case_entries=()
|
||||
|
||||
add_alias() {
|
||||
local alias=$1
|
||||
@@ -141,6 +153,24 @@ add_alias() {
|
||||
entries+=(" {\"$alias\", $m428, $m429, $m430},")
|
||||
}
|
||||
|
||||
add_case() {
|
||||
local field=$1
|
||||
local value=$2
|
||||
local m428=$3
|
||||
local m429=$4
|
||||
local m430=$5
|
||||
[[ -n "$value" ]] || return 0
|
||||
|
||||
local types="$m428,$m429,$m430"
|
||||
local key="$field|$value|$types"
|
||||
[[ -z "${seen_cases[$key]:-}" ]] || return 0
|
||||
|
||||
seen_cases[$key]=1
|
||||
field=$(cpp_string "$field")
|
||||
value=$(cpp_string "$value")
|
||||
case_entries+=(" {\"$field\", \"$value\", $m428, $m429, $m430},")
|
||||
}
|
||||
|
||||
add_machine_aliases() {
|
||||
local machine=$1
|
||||
local m428=$2
|
||||
@@ -181,6 +211,24 @@ add_halfile_aliases() {
|
||||
add_alias "${hal_base%.hal}" "$m428" "$m429" "$m430"
|
||||
}
|
||||
|
||||
add_halfile_cases() {
|
||||
local halfile=$1
|
||||
local m428=$2
|
||||
local m429=$3
|
||||
local m430=$4
|
||||
[[ -n "$halfile" ]] || return 0
|
||||
[[ "$halfile" == LIB:* ]] && return 0
|
||||
|
||||
local hal_base=${halfile##*/}
|
||||
local hal_stem=${hal_base%.hal}
|
||||
add_case "halfile" "$halfile" "$m428" "$m429" "$m430"
|
||||
add_case "halfile" "$hal_base" "$m428" "$m429" "$m430"
|
||||
add_case "halfile" "$hal_stem" "$m428" "$m429" "$m430"
|
||||
add_case "hal_file" "$halfile" "$m428" "$m429" "$m430"
|
||||
add_case "hal_file" "$hal_base" "$m428" "$m429" "$m430"
|
||||
add_case "hal_file" "$hal_stem" "$m428" "$m429" "$m430"
|
||||
}
|
||||
|
||||
while IFS=: read -r group path _note; do
|
||||
[[ "$group" == "config" && "$path" == *.ini ]] || continue
|
||||
|
||||
@@ -207,6 +255,10 @@ while IFS=: read -r group path _note; do
|
||||
config_base=${path##*/}
|
||||
config_stem=${config_base%.ini}
|
||||
|
||||
add_case "config" "$path" "$m428" "$m429" "$m430"
|
||||
add_case "machine" "$machine" "$m428" "$m429" "$m430"
|
||||
add_case "kinematics" "$kinematics" "$m428" "$m429" "$m430"
|
||||
|
||||
add_alias "$path" "$m428" "$m429" "$m430"
|
||||
add_alias "$config_dir" "$m428" "$m429" "$m430"
|
||||
add_alias "${config_dir##*/}" "$m428" "$m429" "$m430"
|
||||
@@ -214,6 +266,7 @@ while IFS=: read -r group path _note; do
|
||||
add_machine_aliases "$machine" "$m428" "$m429" "$m430"
|
||||
add_kinematics_aliases "$kinematics" "$m428" "$m429" "$m430"
|
||||
while IFS= read -r halfile; do
|
||||
add_halfile_cases "$halfile" "$m428" "$m429" "$m430"
|
||||
add_halfile_aliases "$halfile" "$m428" "$m429" "$m430"
|
||||
done <<<"$halfiles"
|
||||
|
||||
@@ -229,10 +282,23 @@ while IFS=: read -r group path _note; do
|
||||
done
|
||||
done <"$manifest"
|
||||
|
||||
cat <<'EOF'
|
||||
if [[ "$mode" == table ]]; then
|
||||
cat <<'EOF'
|
||||
// Generated by ./generate-linuxcnc-switchkins-remap-table.sh.
|
||||
// Source: LinuxCNC INI MACHINE/KINEMATICS/HALFILE/SUBROUTINE_PATH/REMAP entries and
|
||||
// adjacent remap_subs/{428,429,430}remap.ngc #<kinstype> assignments.
|
||||
EOF
|
||||
|
||||
printf '%s\n' "${entries[@]}"
|
||||
printf '%s\n' "${entries[@]}"
|
||||
elif [[ "$mode" == config-cases ]]; then
|
||||
cat <<'EOF'
|
||||
// Generated by ./generate-linuxcnc-switchkins-remap-table.sh --config-cases.
|
||||
// Source: LinuxCNC INI config path, MACHINE, KINEMATICS, and non-LIB HALFILE entries
|
||||
// for M428/M429/M430 remap #<kinstype> assignments.
|
||||
EOF
|
||||
|
||||
printf '%s\n' "${case_entries[@]}"
|
||||
else
|
||||
echo "unknown switchkins remap table generator mode: $mode" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user