| #!/bin/bash |
|
|
| PROG=${0##*/} |
| build_dir="build-ci-debug" |
|
|
| |
| red=$(tput setaf 1) |
| green=$(tput setaf 2) |
| yellow=$(tput setaf 3) |
| blue=$(tput setaf 4) |
| magenta=$(tput setaf 5) |
| cyan=$(tput setaf 6) |
| normal=$(tput sgr0) |
|
|
|
|
| |
| |
|
|
| print_full_help() { |
| cat << EOF |
| Usage: $PROG [OPTION]... <test_regex> (test_number) |
| Debug specific ctest program. |
| |
| Options: |
| -h, --help display this help and exit |
| -g run in gdb mode |
| |
| Arguments: |
| <test_regex> (Mandatory) Supply one regex to the script to filter tests |
| (test_number) (Optional) Test number to run a specific test |
| |
| Example: |
| $PROG test-tokenizer |
| $PROG test-tokenizer 3 |
| EOF |
| } |
|
|
| abort() { |
| echo "Error: $1" >&2 |
| cat << EOF >&2 |
| Usage: $PROG [OPTION]... <test_regex> (test_number) |
| Debug specific ctest program. |
| Refer to --help for full instructions. |
| EOF |
| exit 1 |
| } |
|
|
|
|
| |
| |
|
|
| check_dependency() { |
| command -v "$1" >/dev/null 2>&1 || { |
| abort "$1 is required but not found. Please install it and try again." |
| } |
| } |
|
|
| check_dependency ctest |
| check_dependency cmake |
|
|
|
|
| |
| |
|
|
| if [ x"$1" = x"-h" ] || [ x"$1" = x"--help" ]; then |
| print_full_help >&2 |
| exit 0 |
| fi |
|
|
| |
| gdb_mode=false |
| while getopts "g" opt; do |
| case $opt in |
| g) |
| gdb_mode=true |
| echo "gdb_mode Mode Enabled" |
| ;; |
| esac |
| done |
|
|
| |
| shift $((OPTIND - 1)) |
|
|
| |
| if [ -z "${1}" ]; then |
| abort "Test regex is required" |
| else |
| test_suite=${1:-} |
| fi |
|
|
| |
| test_number=${2:-} |
|
|
|
|
| |
| |
|
|
| |
| repo_root=$(git rev-parse --show-toplevel) |
| if [ ! -d "$repo_root" ]; then |
| abort "Not in a Git repository." |
| fi |
|
|
| |
| pushd "$repo_root" |
| rm -rf "$build_dir" && mkdir "$build_dir" || abort "Failed to make $build_dir" |
|
|
|
|
| |
| |
|
|
| |
| cmake -B "./$build_dir" -DCMAKE_BUILD_TYPE=Debug -DGGML_CUDA=1 -DLLAMA_CURL=1 || abort "Failed to build environment" |
| pushd "$build_dir" |
| make -j || abort "Failed to compile" |
| popd > /dev/null || exit 1 |
|
|
|
|
| |
| |
|
|
| |
| |
| |
| |
| printf "\n\nGathering tests that fit REGEX: ${test_suite} ...\n" |
| pushd "$build_dir" |
| tests=($(ctest -R ${test_suite} -V -N | grep -E " +Test +#[0-9]+*" | cut -d':' -f2 | awk '{$1=$1};1')) |
| if [ ${#tests[@]} -eq 0 ]; then |
| abort "No tests available... check your compilation process..." |
| fi |
| popd > /dev/null || exit 1 |
|
|
|
|
| |
| |
|
|
| |
| if [ -z $test_number ]; then |
| |
| printf "Which test would you like to debug?\n" |
| id=0 |
| for s in "${tests[@]}" |
| do |
| echo "Test# ${id}" |
| echo " $s" |
| ((id++)) |
| done |
|
|
| |
| printf "\nRun test#? " |
| read test_number |
|
|
| else |
| printf "\nUser Already Requested #${test_number}\n" |
|
|
| fi |
|
|
| |
| pushd "$build_dir" |
| sIFS=$IFS |
| IFS=$'\n' |
| test_args=($(ctest -R ${test_suite} -V -N | grep "Test command" | cut -d':' -f3 | awk '{$1=$1};1' )) |
| IFS=$sIFS |
| popd > /dev/null || exit 1 |
|
|
| |
| single_test_name="${tests[test_number]}" |
| single_test_command="${test_args[test_number]}" |
|
|
|
|
| |
| |
|
|
| printf "${magenta}Running Test #${test_number}: ${single_test_name}${normal}\n" |
| printf "${cyan}single_test_command: ${single_test_command}${normal}\n" |
|
|
| if [ "$gdb_mode" = "true" ]; then |
| |
| pushd "$repo_root" || exit 1 |
| eval "gdb --args ${single_test_command}" |
| popd > /dev/null || exit 1 |
|
|
| else |
| |
| pushd "$repo_root" || exit 1 |
| eval "${single_test_command}" |
| exit_code=$? |
| popd > /dev/null || exit 1 |
|
|
| |
| printf "${blue}Ran Test #${test_number}: ${single_test_name}${normal}\n" |
| printf "${yellow}Command: ${single_test_command}${normal}\n" |
| if [ $exit_code -eq 0 ]; then |
| printf "${green}TEST PASS${normal}\n" |
| else |
| printf "${red}TEST FAIL${normal}\n" |
| fi |
|
|
| fi |
|
|
| |
| popd > /dev/null || exit 1 |
|
|