231 lines
6.6 KiB
Plaintext
231 lines
6.6 KiB
Plaintext
|
|
# matrix.conf - マトリックステスト定義
|
|||
|
|
# 全組み合わせテスト(full プロファイル用)
|
|||
|
|
|
|||
|
|
# マトリックス軸定義
|
|||
|
|
declare -a MATRIX_BACKENDS=("vm" "llvm")
|
|||
|
|
declare -a MATRIX_PLUGIN_MODES=("dynamic" "static")
|
|||
|
|
declare -a MATRIX_OPTIMIZATION_LEVELS=("debug" "release")
|
|||
|
|
declare -a MATRIX_USING_MODES=("enabled" "disabled")
|
|||
|
|
|
|||
|
|
# 除外組み合わせ(実行不可能な組み合わせ)
|
|||
|
|
MATRIX_EXCLUSIONS=(
|
|||
|
|
"vm:static" # VMバックエンドは静的プラグイン非対応
|
|||
|
|
"llvm:dynamic:debug" # LLVM+動的プラグインのデバッグモードは不安定
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 組み合わせ生成
|
|||
|
|
generate_matrix_combinations() {
|
|||
|
|
local combinations=()
|
|||
|
|
|
|||
|
|
for backend in "${MATRIX_BACKENDS[@]}"; do
|
|||
|
|
for plugin_mode in "${MATRIX_PLUGIN_MODES[@]}"; do
|
|||
|
|
for opt_level in "${MATRIX_OPTIMIZATION_LEVELS[@]}"; do
|
|||
|
|
for using_mode in "${MATRIX_USING_MODES[@]}"; do
|
|||
|
|
local combo="${backend}:${plugin_mode}:${opt_level}:${using_mode}"
|
|||
|
|
|
|||
|
|
# 除外チェック
|
|||
|
|
local excluded=false
|
|||
|
|
for exclusion in "${MATRIX_EXCLUSIONS[@]}"; do
|
|||
|
|
if echo "$combo" | grep -q "^$exclusion"; then
|
|||
|
|
excluded=true
|
|||
|
|
break
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
if [ "$excluded" = false ]; then
|
|||
|
|
combinations+=("$combo")
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
done
|
|||
|
|
done
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
printf '%s\n' "${combinations[@]}"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 環境設定適用
|
|||
|
|
apply_matrix_config() {
|
|||
|
|
local combination="$1"
|
|||
|
|
|
|||
|
|
IFS=':' read -ra PARTS <<< "$combination"
|
|||
|
|
local backend="${PARTS[0]}"
|
|||
|
|
local plugin_mode="${PARTS[1]}"
|
|||
|
|
local opt_level="${PARTS[2]}"
|
|||
|
|
local using_mode="${PARTS[3]}"
|
|||
|
|
|
|||
|
|
echo "[INFO] Applying matrix config: $combination" >&2
|
|||
|
|
|
|||
|
|
# バックエンド設定
|
|||
|
|
case "$backend" in
|
|||
|
|
"vm")
|
|||
|
|
export NYASH_BACKEND=""
|
|||
|
|
;;
|
|||
|
|
"llvm")
|
|||
|
|
export NYASH_BACKEND="llvm"
|
|||
|
|
export NYASH_LLVM_USE_HARNESS=1
|
|||
|
|
;;
|
|||
|
|
esac
|
|||
|
|
|
|||
|
|
# プラグインモード設定
|
|||
|
|
case "$plugin_mode" in
|
|||
|
|
"dynamic")
|
|||
|
|
export NYASH_DISABLE_PLUGINS=0
|
|||
|
|
export SMOKES_PLUGIN_MODE="dynamic"
|
|||
|
|
;;
|
|||
|
|
"static")
|
|||
|
|
export NYASH_DISABLE_PLUGINS=1
|
|||
|
|
export SMOKES_PLUGIN_MODE="static"
|
|||
|
|
;;
|
|||
|
|
esac
|
|||
|
|
|
|||
|
|
# 最適化レベル設定
|
|||
|
|
case "$opt_level" in
|
|||
|
|
"debug")
|
|||
|
|
export NYASH_CLI_VERBOSE=1
|
|||
|
|
export NYASH_DEBUG_FUEL="unlimited"
|
|||
|
|
export NYASH_OPTIMIZATION_LEVEL=0
|
|||
|
|
;;
|
|||
|
|
"release")
|
|||
|
|
export NYASH_CLI_VERBOSE=0
|
|||
|
|
export NYASH_DEBUG_FUEL="10000"
|
|||
|
|
export NYASH_OPTIMIZATION_LEVEL=3
|
|||
|
|
;;
|
|||
|
|
esac
|
|||
|
|
|
|||
|
|
# using system設定
|
|||
|
|
case "$using_mode" in
|
|||
|
|
"enabled")
|
|||
|
|
export NYASH_ENABLE_USING=1
|
|||
|
|
export NYASH_RESOLVE_FIX_BRACES=1
|
|||
|
|
;;
|
|||
|
|
"disabled")
|
|||
|
|
export NYASH_ENABLE_USING=0
|
|||
|
|
export NYASH_RESOLVE_FIX_BRACES=0
|
|||
|
|
;;
|
|||
|
|
esac
|
|||
|
|
|
|||
|
|
# マトリックス用調整
|
|||
|
|
export SMOKES_MATRIX_MODE=1
|
|||
|
|
export SMOKES_CURRENT_COMBINATION="$combination"
|
|||
|
|
export SMOKES_DEFAULT_TIMEOUT=90 # マトリックステストは時間がかかる
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# マトリックステスト実行
|
|||
|
|
run_matrix_test() {
|
|||
|
|
local test_script="$1"
|
|||
|
|
local combination="$2"
|
|||
|
|
|
|||
|
|
echo "[INFO] Running matrix test: $test_script with $combination" >&2
|
|||
|
|
|
|||
|
|
# 組み合わせ適用
|
|||
|
|
apply_matrix_config "$combination"
|
|||
|
|
|
|||
|
|
# テストスクリプト実行
|
|||
|
|
local start_time end_time duration exit_code
|
|||
|
|
start_time=$(date +%s.%N)
|
|||
|
|
|
|||
|
|
if timeout "${SMOKES_DEFAULT_TIMEOUT:-90}" bash "$test_script"; then
|
|||
|
|
exit_code=0
|
|||
|
|
else
|
|||
|
|
exit_code=$?
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
end_time=$(date +%s.%N)
|
|||
|
|
duration=$(echo "$end_time - $start_time" | bc -l)
|
|||
|
|
|
|||
|
|
# 結果記録
|
|||
|
|
echo "[RESULT] $test_script:$combination:$exit_code:${duration}s" >&2
|
|||
|
|
|
|||
|
|
return $exit_code
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 全マトリックステスト実行
|
|||
|
|
run_all_matrix_tests() {
|
|||
|
|
local test_pattern="${1:-*.sh}"
|
|||
|
|
local results_file="${2:-matrix_results.txt}"
|
|||
|
|
|
|||
|
|
echo "[INFO] Starting matrix testing with pattern: $test_pattern" >&2
|
|||
|
|
|
|||
|
|
local combinations
|
|||
|
|
mapfile -t combinations < <(generate_matrix_combinations)
|
|||
|
|
|
|||
|
|
local total_tests=0
|
|||
|
|
local passed_tests=0
|
|||
|
|
local failed_tests=0
|
|||
|
|
|
|||
|
|
# 結果ファイル初期化
|
|||
|
|
echo "# Matrix Test Results - $(date)" > "$results_file"
|
|||
|
|
echo "# Format: test_script:combination:exit_code:duration" >> "$results_file"
|
|||
|
|
|
|||
|
|
# テストスクリプト検索
|
|||
|
|
local test_scripts
|
|||
|
|
mapfile -t test_scripts < <(find profiles/full/matrix -name "$test_pattern" -type f)
|
|||
|
|
|
|||
|
|
for script in "${test_scripts[@]}"; do
|
|||
|
|
for combination in "${combinations[@]}"; do
|
|||
|
|
((total_tests++))
|
|||
|
|
|
|||
|
|
echo "[INFO] [$total_tests] Testing $script with $combination" >&2
|
|||
|
|
|
|||
|
|
if run_matrix_test "$script" "$combination"; then
|
|||
|
|
((passed_tests++))
|
|||
|
|
echo "PASS:$script:$combination:$(date)" >> "$results_file"
|
|||
|
|
else
|
|||
|
|
((failed_tests++))
|
|||
|
|
echo "FAIL:$script:$combination:$(date)" >> "$results_file"
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# サマリー出力
|
|||
|
|
cat << EOF
|
|||
|
|
|
|||
|
|
===============================================
|
|||
|
|
Matrix Test Summary
|
|||
|
|
===============================================
|
|||
|
|
Total combinations: ${#combinations[@]}
|
|||
|
|
Total tests: $total_tests
|
|||
|
|
Passed: $passed_tests
|
|||
|
|
Failed: $failed_tests
|
|||
|
|
Success rate: $(echo "scale=1; $passed_tests * 100 / $total_tests" | bc -l)%
|
|||
|
|
|
|||
|
|
Results saved to: $results_file
|
|||
|
|
===============================================
|
|||
|
|
EOF
|
|||
|
|
|
|||
|
|
[ $failed_tests -eq 0 ]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# マトリックス情報表示
|
|||
|
|
show_matrix_info() {
|
|||
|
|
echo "Available Matrix Combinations:"
|
|||
|
|
echo "=============================="
|
|||
|
|
|
|||
|
|
local combinations
|
|||
|
|
mapfile -t combinations < <(generate_matrix_combinations)
|
|||
|
|
|
|||
|
|
local count=1
|
|||
|
|
for combo in "${combinations[@]}"; do
|
|||
|
|
printf "%2d. %s\n" $count "$combo"
|
|||
|
|
((count++))
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "Total combinations: ${#combinations[@]}"
|
|||
|
|
echo ""
|
|||
|
|
echo "Matrix Axes:"
|
|||
|
|
echo " Backends: ${MATRIX_BACKENDS[*]}"
|
|||
|
|
echo " Plugin Modes: ${MATRIX_PLUGIN_MODES[*]}"
|
|||
|
|
echo " Optimization: ${MATRIX_OPTIMIZATION_LEVELS[*]}"
|
|||
|
|
echo " Using System: ${MATRIX_USING_MODES[*]}"
|
|||
|
|
echo ""
|
|||
|
|
echo "Exclusions:"
|
|||
|
|
for exclusion in "${MATRIX_EXCLUSIONS[@]}"; do
|
|||
|
|
echo " - $exclusion"
|
|||
|
|
done
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 使用例
|
|||
|
|
# source configs/matrix.conf
|
|||
|
|
# show_matrix_info
|
|||
|
|
# run_all_matrix_tests "*.sh" "results.txt"
|