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 |