So we can run tests parallel with cmake, reducing test time and IO overheadmaster
| @@ -235,4 +235,4 @@ jobs: | |||
| - name: test | |||
| run: | | |||
| ${{ matrix.config_env }} ${{ matrix.runenv }} cmake --build build --target tests | |||
| ${{ matrix.config_env }} ${{ matrix.runenv }} ctest --test-dir build -Ttest -j1 --output-on-failure | |||
| ${{ matrix.config_env }} ${{ matrix.runenv }} ctest --test-dir build -Ttest -j8 --output-on-failure | |||
| @@ -53,7 +53,7 @@ jobs: | |||
| - name: make | |||
| run: cmake --build build | |||
| - name: make check | |||
| run: ctest --test-dir build -Ttest -j1 --output-on-failure | |||
| run: ctest --test-dir build -Ttest -j8 --output-on-failure | |||
| - name: make package_source | |||
| run: cmake --build build --target package_source | |||
| @@ -65,4 +65,4 @@ jobs: | |||
| - name: re-make | |||
| run: cd unpack/espeak-ng-* && cmake --build build | |||
| - name: re-make check | |||
| run: cd unpack/espeak-ng-* && ctest --test-dir build -Ttest -j1 --output-on-failure | |||
| run: cd unpack/espeak-ng-* && ctest --test-dir build -Ttest -j8 --output-on-failure | |||
| @@ -30,4 +30,4 @@ jobs: | |||
| - name: make | |||
| run: cmake --build build --config ${{ matrix.config }} | |||
| - name: make check | |||
| run: ctest --test-dir build -Ttest -C ${{ matrix.config }} -j1 --output-on-failure | |||
| run: ctest --test-dir build -Ttest -C ${{ matrix.config }} -j8 --output-on-failure | |||
| @@ -99,6 +99,7 @@ add_custom_command( | |||
| WORKING_DIRECTORY "${PHONEME_SRC_DIR}" | |||
| COMMENT "Compile phonemes" | |||
| DEPENDS | |||
| "${DATA_DIST_DIR}/intonations" | |||
| "$<TARGET_FILE:espeak-ng-bin>" | |||
| ${_phon_deps} | |||
| ) | |||
| @@ -1,23 +1,23 @@ | |||
| #!/bin/sh | |||
| # Test a command for presence and ability to output the sha1 hash of a file | |||
| is_hash() { | |||
| echo -n "checking for SHA1 hashing command ... " | |||
| if check_hash sha1sum; then | |||
| sha1sum=sha1sum | |||
| elif check_hash sha1; then | |||
| sha1sum=sha1 | |||
| elif check_hash shasum; then | |||
| sha1sum=shasum | |||
| else | |||
| echo "no" | |||
| exit 1 | |||
| fi | |||
| echo -n "checking for SHA1 hashing command ... " | |||
| if check_hash sha1sum; then | |||
| sha1sum=sha1sum | |||
| elif check_hash sha1; then | |||
| sha1sum=sha1 | |||
| elif check_hash shasum; then | |||
| sha1sum=shasum | |||
| else | |||
| echo "no" | |||
| exit 1 | |||
| fi | |||
| } | |||
| check_hash() { | |||
| which $1 && | |||
| $1 </dev/null 2>/dev/null | | |||
| awk '{if ($1 != "da39a3ee5e6b4b0d3255bfef95601890afd80709") { exit 1; }}' | |||
| # Test some common commands to find the correct one for the system being tested on. | |||
| which $1 && | |||
| $1 </dev/null 2>/dev/null | | |||
| awk '{if ($1 != "da39a3ee5e6b4b0d3255bfef95601890afd80709") { exit 1; }}' | |||
| # Test some common commands to find the correct one for the system being tested on. | |||
| } | |||
| # test if MBROLA synthesizer is installed | |||
| @@ -44,53 +44,59 @@ test_phon() { | |||
| fi | |||
| echo "testing ${TEST_LANG} $MESSAGE" | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng -xq ${OPTIONS} -v ${TEST_LANG} "${TEST_TEXT}" \ | |||
| > actual.txt || exit 1 | |||
| echo "${EXPECTED}" > expected.txt | |||
| if [ "$MESSAGE" = "Ignore" ] ; then | |||
| diff expected.txt actual.txt || (echo "... ignoring error" && true) | |||
| else | |||
| diff expected.txt actual.txt || exit 1 | |||
| RESULT=$( | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng -xq ${OPTIONS} -v ${TEST_LANG} "${TEST_TEXT}" || exit 1 | |||
| ) | |||
| if [ "x$RESULT" != "x$EXPECTED" ] ; then | |||
| echo "$RESULT != $EXPECTED" | |||
| if [ "$MESSAGE" = "Ignore" ] ; then | |||
| echo "... ignoring error" | |||
| else | |||
| exit 1 | |||
| fi | |||
| fi | |||
| } | |||
| # Check generated wav file from processed text | |||
| test_wav () { | |||
| VOICE=$1 | |||
| EXPECTED=$2 | |||
| TEST_TEXT=$3 | |||
| MESSAGE=$4 | |||
| VOICE=$1 | |||
| EXPECTED=$2 | |||
| TEST_TEXT=$3 | |||
| MESSAGE=$4 | |||
| echo "testing ${VOICE}${MESSAGE}" | |||
| echo "testing ${VOICE} ${MESSAGE}" | |||
| RESULT=$( | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" \ | |||
| > actual.txt || exit 1 | |||
| < actual.txt $sha1sum | awk '{ print $1 }' > sum.txt | |||
| echo "${EXPECTED}" > expected.txt | |||
| $VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" | $sha1sum | awk '{ print $1 }' || exit 1 | |||
| ) | |||
| if [ "x$RESULT" != "x$EXPECTED" ] ; then | |||
| echo "$RESULT != $EXPECTED" | |||
| if [ "$MESSAGE" = "Ignore" ] ; then | |||
| diff expected.txt sum.txt || (echo "... ignoring error" && true) | |||
| echo "... ignoring error" | |||
| else | |||
| diff expected.txt sum.txt || exit 1 | |||
| exit 1 | |||
| fi | |||
| fi | |||
| } | |||
| # Check generated wav file from processed text, where $EXPECTED is grep string | |||
| test_wav_grep () { | |||
| VOICE=$1 | |||
| EXPECTED=$2 | |||
| TEST_TEXT=$3 | |||
| MESSAGE=$4 | |||
| echo "testing ${VOICE}${MESSAGE}" | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" \ | |||
| > actual.txt || exit 1 | |||
| < actual.txt $sha1sum | awk '{ print $1 }' > sum.txt | |||
| if [ "$MESSAGE" = "Ignore" ] ; then | |||
| cat sum.txt | grep -E "$EXPECTED" || (echo "... ignoring error" && true) | |||
| else | |||
| cat sum.txt | grep -E "$EXPECTED" || { printf "wrong hash: "; cat sum.txt; exit 1; } | |||
| fi | |||
| VOICE=$1 | |||
| EXPECTED=$2 | |||
| TEST_TEXT=$3 | |||
| MESSAGE=$4 | |||
| echo "testing ${VOICE} ${MESSAGE}" | |||
| $() | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng -D --stdout -v ${VOICE} "${TEST_TEXT}" \ | |||
| > actual.txt || exit 1 | |||
| < actual.txt $sha1sum | awk '{ print $1 }' > sum.txt | |||
| if [ "$MESSAGE" = "Ignore" ] ; then | |||
| cat sum.txt | grep -E "$EXPECTED" || (echo "... ignoring error" && true) | |||
| else | |||
| cat sum.txt | grep -E "$EXPECTED" || { printf "wrong hash: "; cat sum.txt; exit 1; } | |||
| fi | |||
| } | |||
| # Check generated wav file from list of phonemes | |||
| @@ -98,27 +104,31 @@ test_phwav() { | |||
| TEST_LANG=$1 | |||
| EXPECTED=$2 | |||
| TEST_TEXT=$3 | |||
| test_wav $TEST_LANG $EXPECTED "[[$TEST_TEXT]]" | |||
| test_wav $TEST_LANG $EXPECTED "[[$TEST_TEXT]]" | |||
| } | |||
| test_replace() { | |||
| TEST_LANG=$1 | |||
| TEST_TEXT=$2 | |||
| MESSAGE=$3 | |||
| EXPECTED=$3 | |||
| MESSAGE=$4 | |||
| if [ "$MESSAGE" = "" ] ; then | |||
| MESSAGE=$TEST_TEXT | |||
| fi | |||
| echo "testing ${TEST_LANG}" | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng -Xq -v ${TEST_LANG} "${TEST_TEXT}" \ | |||
| > actual.txt || exit 1 | |||
| < actual.txt grep -a -E "(Translate|Found:) " | sed -e 's/ \[.*][ ]*$//g' > filtered.txt | |||
| if [ "$MESSAGE" = "Ignore" ] ; then | |||
| diff expected.txt filtered.txt || (echo "... ignoring error" && true) | |||
| else | |||
| diff expected.txt filtered.txt || exit 1 | |||
| RESULT=$( | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng -Xq -v ${TEST_LANG} "${TEST_TEXT}" | \ | |||
| grep -a -E "(Translate|Found:) " | sed -e 's/ \[.*][ ]*$//g' || exit 1 | |||
| ) | |||
| if [ "x$RESULT" != "x$EXPECTED" ] ; then | |||
| echo "$RESULT != $EXPECTED" | |||
| if [ "$MESSAGE" = "Ignore" ] ; then | |||
| echo "... ignoring error" | |||
| else | |||
| exit 1 | |||
| fi | |||
| fi | |||
| } | |||
| @@ -5,8 +5,7 @@ | |||
| ##### bs: Bosnian | |||
| # Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. | |||
| cat > expected.txt <<EOF | |||
| Translate 'ljubazni' | |||
| test_replace bs "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni' | |||
| Translate 'fenjerdžija' | |||
| Translate 'čađavog' | |||
| Translate 'lica' | |||
| @@ -14,27 +13,21 @@ Translate 'hoće' | |||
| Translate 'da' | |||
| Translate 'mi' | |||
| Translate 'pokaže' | |||
| Translate 'štos' | |||
| EOF | |||
| test_replace bs "Љубазни фењерџија чађавог лица хоће да ми покаже штос." | |||
| Translate 'štos'" | |||
| ##### en: English | |||
| cat > expected.txt <<EOF | |||
| Translate 'aeon' | |||
| test_replace en "Æon mediæval. Œconomy phœnix. Loſt history." "Translate 'aeon' | |||
| Found: 'mediaeval' | |||
| Translate 'oeconomy' | |||
| Found: 'phoenix' | |||
| Found: 'lost' | |||
| Translate 'history' | |||
| EOF | |||
| test_replace en "Æon mediæval. Œconomy phœnix. Loſt history." | |||
| Translate 'history'" | |||
| ##### hr: Croatian | |||
| # Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. | |||
| cat > expected.txt <<EOF | |||
| Translate 'ljubazni' | |||
| test_replace hr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni' | |||
| Translate 'fenjerdžija' | |||
| Translate 'čađavog' | |||
| Translate 'lica' | |||
| @@ -42,30 +35,24 @@ Translate 'hoće' | |||
| Translate 'da' | |||
| Translate 'mi' | |||
| Translate 'pokaže' | |||
| Translate 'štos' | |||
| EOF | |||
| test_replace hr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." | |||
| Translate 'štos'" | |||
| ##### ja: Japanese | |||
| # いろはにほへと. ちりぬるを. わかよたれそ. つねならむ. うゐのおくやま. けふこえて. あさきゆめみし. ゑひもせすん. | |||
| cat > expected.txt <<EOF | |||
| Translate 'いろはにほへと' | |||
| test_replace ja "イロハニホヘト. チリヌルヲ. ワカヨタレソ. ツネナラム. ウヰノオクヤマ. ケフコエテ. アサキユメミシ. ヱヒモセスン." "Translate 'いろはにほへと' | |||
| Translate 'ちりぬるを' | |||
| Translate 'わかよたれそ' | |||
| Translate 'つねならむ' | |||
| Translate 'うゐのおくやま' | |||
| Translate 'けふこえて' | |||
| Translate 'あさきゆめみし' | |||
| Translate 'ゑひもせすん' | |||
| EOF | |||
| test_replace ja "イロハニホヘト. チリヌルヲ. ワカヨタレソ. ツネナラム. ウヰノオクヤマ. ケフコエテ. アサキユメミシ. ヱヒモセスン." | |||
| Translate 'ゑひもせすん'" | |||
| ##### mk: Macedonian | |||
| # Ѕидарски пејзаж: шугав билмез со чудење џвака ќофте и кељ на туѓ цех. | |||
| cat > expected.txt <<EOF | |||
| Translate 'ѕидарски' | |||
| test_replace mk "Dzidarski pejzaž: šugav bilmez so čudenje džvaka ćofte i kelj na tuđ ceh." "Translate 'ѕидарски' | |||
| Translate 'пејзаж' | |||
| Translate 'шугав' | |||
| Translate 'билмез' | |||
| @@ -77,15 +64,12 @@ Found: 'и' [i_:] \$u \$pause | |||
| Translate 'кељ' | |||
| Translate 'на' | |||
| Translate 'туѓ' | |||
| Translate 'цех' | |||
| EOF | |||
| test_replace mk "Dzidarski pejzaž: šugav bilmez so čudenje džvaka ćofte i kelj na tuđ ceh." | |||
| Translate 'цех'" | |||
| ##### sr: Serbian | |||
| # Ljubazni fenjerdžija čađavog lica hoće da mi pokaže štos. | |||
| cat > expected.txt <<EOF | |||
| Translate 'ljubazni' | |||
| test_replace sr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." "Translate 'ljubazni' | |||
| Translate 'fenjerdžija' | |||
| Translate 'čađavog' | |||
| Translate 'lica' | |||
| @@ -93,7 +77,4 @@ Translate 'hoće' | |||
| Translate 'da' | |||
| Translate 'mi' | |||
| Translate 'pokaže' | |||
| Translate 'štos' | |||
| EOF | |||
| test_replace sr "Љубазни фењерџија чађавог лица хоће да ми покаже штос." | |||
| Translate 'štos'" | |||
| @@ -11,12 +11,14 @@ test_ssml_audio() { | |||
| OPTS=$4 | |||
| echo "testing ${TEST_NAME}" | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng --stdout -m "${TEST_TEXT}" ${OPTS} \ | |||
| > actual.txt || exit 1 | |||
| < actual.txt $sha1sum | awk '{ print $1 }' > sum.txt | |||
| echo "${EXPECTED}" > expected.txt | |||
| diff expected.txt sum.txt || exit 1 | |||
| RESULT=$( | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng --stdout -m "${TEST_TEXT}" ${OPTS} | $sha1sum | awk '{ print $1 }' || exit 1 | |||
| ) | |||
| if [ "x$RESULT" != "x$EXPECTED" ] ; then | |||
| echo "$RESULT != $EXPECTED" | |||
| exit 1 | |||
| fi | |||
| } | |||
| test_ssml() { | |||
| @@ -30,11 +32,15 @@ test_ssml() { | |||
| fi | |||
| echo "testing ${INPUT}" | |||
| cp $(dirname $INPUT)/$(basename ${INPUT%.*}).expected expected.txt | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng -m -q $PARAMETERS -f ${INPUT} \ | |||
| > actual.txt || exit 1 | |||
| diff expected.txt actual.txt || exit 1 | |||
| EXPECTED=$(cat $(dirname $INPUT)/$(basename ${INPUT%.*}).expected) | |||
| RESULT=$( | |||
| ESPEAK_DATA_PATH=`pwd` LD_LIBRARY_PATH=src:${LD_LIBRARY_PATH} \ | |||
| $VALGRIND src/espeak-ng -m -q $PARAMETERS -f ${INPUT} || exit 1 | |||
| ) | |||
| if [ "x$RESULT" != "x$EXPECTED" ] ; then | |||
| echo "$RESULT != $EXPECTED" | |||
| exit 1 | |||
| fi | |||
| } | |||
| for i in `dirname $0`/ssml/*.ssml ; do test_ssml $i; done | |||