diff --git a/.travis.yml b/.travis.yml index 1f1249f7b..06b8b695a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,6 +42,13 @@ script: SET_RESOLVER="--resolver ${RESOLVER}" fi + test_exercise () { + stack test ${SET_RESOLVER} `# Select the correct resolver. `\ + --install-ghc `# Download GHC if not in cache.`\ + --no-terminal `# Terminal detection is broken.`\ + --pedantic `# Enable -Wall and -Werror. ` + } + for exercise in ${TRAVIS_BUILD_DIR}/exercises/* ; do pushd ${exercise} @@ -50,13 +57,25 @@ script: mkdir -p "${HOME}/.foldercache/${exercise}/.stack-work" ln -f -s "${HOME}/.foldercache/${exercise}/.stack-work" - # Here we prepare the exercise to be tested by Stack. - MODULE=`sed -n 's/ *module \+\([a-zA-Z0-9]\+\).*/\1/p' src/Example.hs` - mv src/Example.hs "src/${MODULE}.hs" + if [ -f src/Example.hs ]; then + # Here we prepare the exercise to be tested by Stack. + MODULE=`sed -n 's/ *module \+\([a-zA-Z0-9]\+\).*/\1/p' src/Example.hs` + mv src/Example.hs "src/${MODULE}.hs" + + test_exercise + elif ! stat -t examples/*/ > /dev/null 2>&1; then + echo "No examples for ${exercise}!" + exit 1 + else + for example in examples/*/ ; do + echo "testing ${example}" + rm -f src/*.hs + mv ${example}/*.hs src + mv ${example}/package.yaml . + + test_exercise + done + fi - stack test ${SET_RESOLVER} `# Select the correct resolver. `\ - --install-ghc `# Download GHC if not in cache.`\ - --no-terminal `# Terminal detection is broken.`\ - --pedantic `# Enable -Wall and -Werror. ` popd done diff --git a/exercises/anagram/examples/list-string/Anagram.hs b/exercises/anagram/examples/list-string/Anagram.hs new file mode 100644 index 000000000..3133cc880 --- /dev/null +++ b/exercises/anagram/examples/list-string/Anagram.hs @@ -0,0 +1,10 @@ +module Anagram (anagramsFor) where +import Data.List (sort) +import Data.Char (toLower) + +anagramsFor :: String -> [String] -> [String] +anagramsFor word = filter (isAnagram . normalize) + where + normalize xs = let nxs = map toLower xs in (nxs, sort nxs) + (nw, sw) = normalize word + isAnagram (w, s) = nw /= w && sw == s diff --git a/exercises/anagram/examples/list-string/package.yaml b/exercises/anagram/examples/list-string/package.yaml new file mode 100644 index 000000000..66bd08c32 --- /dev/null +++ b/exercises/anagram/examples/list-string/package.yaml @@ -0,0 +1,17 @@ +name: anagram + +dependencies: + - base + +library: + exposed-modules: Anagram + source-dirs: src + dependencies: + +tests: + test: + main: Tests.hs + source-dirs: test + dependencies: + - anagram + - hspec diff --git a/exercises/anagram/src/Example.hs b/exercises/anagram/examples/set-text/Anagram.hs similarity index 100% rename from exercises/anagram/src/Example.hs rename to exercises/anagram/examples/set-text/Anagram.hs diff --git a/exercises/anagram/examples/set-text/package.yaml b/exercises/anagram/examples/set-text/package.yaml new file mode 100644 index 000000000..4ce464bc6 --- /dev/null +++ b/exercises/anagram/examples/set-text/package.yaml @@ -0,0 +1,20 @@ +name: anagram + +dependencies: + - base + +library: + exposed-modules: Anagram + source-dirs: src + dependencies: + - containers + - multiset + - text + +tests: + test: + main: Tests.hs + source-dirs: test + dependencies: + - anagram + - hspec diff --git a/exercises/anagram/package.yaml b/exercises/anagram/package.yaml index 56a6c1775..82545c035 100644 --- a/exercises/anagram/package.yaml +++ b/exercises/anagram/package.yaml @@ -9,9 +9,6 @@ library: dependencies: # - foo # List here the packages you # - bar # want to use in your solution. - - containers - - multiset - - text tests: test: