继续推进:用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}
|
manifest=${1:-linuxcnc-kinematics-source-files.txt}
|
||||||
|
|
||||||
generated_table=$(mktemp "${TMPDIR:-/tmp}/linuxcnc_switchkins_remap_table.XXXXXX.inc")
|
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"
|
LINUXCNC_ROOT="$linuxcnc_root" ./generate-linuxcnc-switchkins-remap-table.sh "$manifest" > "$generated_table"
|
||||||
diff -u core/src/linuxcnc_switchkins_remap_table.inc "$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;
|
int m430_type;
|
||||||
};
|
};
|
||||||
const SourceBackedConfigCase source_cases[] = {
|
const SourceBackedConfigCase source_cases[] = {
|
||||||
{"config", "configs/sim/axis/vismach/5axis/bridgemill/5axis.ini", 0, 1, 2},
|
#include "linuxcnc_switchkins_remap_config_cases.inc"
|
||||||
{"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},
|
|
||||||
};
|
};
|
||||||
for (const SourceBackedConfigCase &source_case : source_cases) {
|
for (const SourceBackedConfigCase &source_case : source_cases) {
|
||||||
const std::string json = std::string("{\"backend\":\"smoke\",\"") +
|
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")"
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
linuxcnc_root=${LINUXCNC_ROOT:-../linuxcnc}
|
linuxcnc_root=${LINUXCNC_ROOT:-../linuxcnc}
|
||||||
|
mode=table
|
||||||
|
if [[ "${1:-}" == "--config-cases" ]]; then
|
||||||
|
mode=config-cases
|
||||||
|
shift
|
||||||
|
fi
|
||||||
manifest=${1:-linuxcnc-kinematics-source-files.txt}
|
manifest=${1:-linuxcnc-kinematics-source-files.txt}
|
||||||
|
|
||||||
if [[ ! -d "$linuxcnc_root" ]]; then
|
if [[ ! -d "$linuxcnc_root" ]]; then
|
||||||
@@ -117,8 +122,15 @@ json_compact_string() {
|
|||||||
printf '%s' "$value" | normalize_alias | sed 's/\\/\\\\/g; s/"/\\"/g'
|
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_aliases=()
|
||||||
|
declare -A seen_cases=()
|
||||||
entries=()
|
entries=()
|
||||||
|
case_entries=()
|
||||||
|
|
||||||
add_alias() {
|
add_alias() {
|
||||||
local alias=$1
|
local alias=$1
|
||||||
@@ -141,6 +153,24 @@ add_alias() {
|
|||||||
entries+=(" {\"$alias\", $m428, $m429, $m430},")
|
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() {
|
add_machine_aliases() {
|
||||||
local machine=$1
|
local machine=$1
|
||||||
local m428=$2
|
local m428=$2
|
||||||
@@ -181,6 +211,24 @@ add_halfile_aliases() {
|
|||||||
add_alias "${hal_base%.hal}" "$m428" "$m429" "$m430"
|
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
|
while IFS=: read -r group path _note; do
|
||||||
[[ "$group" == "config" && "$path" == *.ini ]] || continue
|
[[ "$group" == "config" && "$path" == *.ini ]] || continue
|
||||||
|
|
||||||
@@ -207,6 +255,10 @@ while IFS=: read -r group path _note; do
|
|||||||
config_base=${path##*/}
|
config_base=${path##*/}
|
||||||
config_stem=${config_base%.ini}
|
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 "$path" "$m428" "$m429" "$m430"
|
||||||
add_alias "$config_dir" "$m428" "$m429" "$m430"
|
add_alias "$config_dir" "$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_machine_aliases "$machine" "$m428" "$m429" "$m430"
|
||||||
add_kinematics_aliases "$kinematics" "$m428" "$m429" "$m430"
|
add_kinematics_aliases "$kinematics" "$m428" "$m429" "$m430"
|
||||||
while IFS= read -r halfile; do
|
while IFS= read -r halfile; do
|
||||||
|
add_halfile_cases "$halfile" "$m428" "$m429" "$m430"
|
||||||
add_halfile_aliases "$halfile" "$m428" "$m429" "$m430"
|
add_halfile_aliases "$halfile" "$m428" "$m429" "$m430"
|
||||||
done <<<"$halfiles"
|
done <<<"$halfiles"
|
||||||
|
|
||||||
@@ -229,10 +282,23 @@ while IFS=: read -r group path _note; do
|
|||||||
done
|
done
|
||||||
done <"$manifest"
|
done <"$manifest"
|
||||||
|
|
||||||
cat <<'EOF'
|
if [[ "$mode" == table ]]; then
|
||||||
|
cat <<'EOF'
|
||||||
// Generated by ./generate-linuxcnc-switchkins-remap-table.sh.
|
// Generated by ./generate-linuxcnc-switchkins-remap-table.sh.
|
||||||
// Source: LinuxCNC INI MACHINE/KINEMATICS/HALFILE/SUBROUTINE_PATH/REMAP entries and
|
// Source: LinuxCNC INI MACHINE/KINEMATICS/HALFILE/SUBROUTINE_PATH/REMAP entries and
|
||||||
// adjacent remap_subs/{428,429,430}remap.ngc #<kinstype> assignments.
|
// adjacent remap_subs/{428,429,430}remap.ngc #<kinstype> assignments.
|
||||||
EOF
|
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