Edit

kc3-lang/kc3/test/tls_test

Branch :

  • test/tls_test
  • #!/bin/sh
    cd "$(dirname $0)/tls" || exit
    
    TEST_COLOR_KO=""
    TEST_COLOR_OK=""
    TEST_COLOR_RESET=""
    TEST_COUNT=0
    TEST_KO=0
    TEST_OK=0
    
    if [ "x$IKC3" = "x" ]; then
        if [ -f ../../ikc3/ikc3 ]; then
    	IKC3=../../ikc3/ikc3
        elif [ -f ../../ikc3 ]; then
    	IKC3=../../ikc3
        fi
    fi
    
    test_ko() {
        printf "%s" "${TEST_COLOR_KO}F${TEST_COLOR_RESET}"
        echo $@ >> .test_ko
        echo $@ >> .test
    }
    
    test_ok() {
        printf "%s" "${TEST_COLOR_OK}.${TEST_COLOR_RESET}"
        echo $@ >> .test_ok
        echo $@ >> .test
    }
    
    if [ $# = 0 ]; then
        if [ "x${TLS_TEST}" = "x" ]; then
            TARGETS="$(ls -1 *.kc3 | sed -e 's/[.]kc3$//')"
            case "$IKC3" in
                *_asan)
                    TARGETS="$(echo "${TARGETS}" |
                                    tr ' ' '\n' |
                                    egrep -v -e '^block$' \
                                             -e '^unwind_protect$' \
                                             -e '^while$')"
                    ;;
                *)
                    ;;
            esac
        else
            TARGETS="${TLS_TEST}"
        fi
    else
        TARGETS="$@"
    fi
    
    rm -f *.diff *.out *.ret
    rm -f .test .test_ko .test_ok
    touch .test .test_ko .test_ok
    for TARGET in $TARGETS; do
        (
            RESULT=test_ok
            echo $TARGET > current_test
            $IKC3 --load ${TARGET}.kc3 --quit > ${TARGET}.out 2>&1
            echo $? > ${TARGET}.ret
            if ! diff -abu ${TARGET}.out.expected ${TARGET}.out \
                 > ${TARGET}.diff
            then
                RESULT=test_ko
            fi
            if ! diff -abu ${TARGET}.ret.expected ${TARGET}.ret \
                 >> ${TARGET}.diff
            then
                RESULT=test_ko
            fi
            if [ "x$RESULT" = "xtest_ok" ]; then
                rm ${TARGET}.diff
                test_ok ${TARGET}
            else
                test_ko ${TARGET}
            fi
        )
        sleep 2
    done
    wait
    TEST_COUNT=$(echo $(wc -l .test) | cut -f 1 -d ' ')
    TEST_KO=$(echo $(wc -l .test_ko) | cut -f 1 -d ' ')
    TEST_OK=$(echo $(wc -l .test_ok) | cut -f 1 -d ' ')
    echo
    DIFFS="$(for TARGET in $TARGETS; do
        if [ -f "${TARGET}.diff" ]; then
            printf "%s " "${TARGET}.diff"
        fi
    done)"
    if [ "x$DIFFS" != "x" ]; then
        ls $DIFFS
        less $DIFFS || cat $DIFFS
    fi
    echo
    printf "%s" "Total $TEST_COUNT tests. "
    printf "%s" "${TEST_COLOR_OK}OK $TEST_OK ($(($TEST_OK * 100 / $TEST_COUNT))%)${TEST_COLOR_RESET}. "
    echo "${TEST_COLOR_KO}KO $TEST_KO ($(($TEST_KO * 100 / $TEST_COUNT))%)${TEST_COLOR_RESET}."
    
    if [ "x$TEST_KO" = "x0" ]; then
        exit 0
    fi
    
    exit 1