diff --git a/Strain/StrainExample.elm b/Strain/StrainExample.elm new file mode 100644 index 0000000..12454fa --- /dev/null +++ b/Strain/StrainExample.elm @@ -0,0 +1,9 @@ +module StrainExample where + +import List + +keep : (a -> Bool) -> List a -> List a +keep predicate list = List.filter predicate list + +discard : (a -> Bool) -> List a -> List a +discard predicate list = (keep (\val -> not (predicate val)) list) diff --git a/Strain/StrainTest.elm b/Strain/StrainTest.elm new file mode 100644 index 0000000..992581a --- /dev/null +++ b/Strain/StrainTest.elm @@ -0,0 +1,34 @@ +module StrainTest where + +-- TODO - remove example inclusion once Problem sets are ready to go live or CI is set up. + +import ElmTest.Test exposing (test, Test, suite) +import ElmTest.Assertion exposing (assert, assertEqual) +import ElmTest.Runner.Element exposing (runDisplay) + +import StrainExample exposing (keep, discard) + +import String + +even = \number -> number % 2 == 0 +odd = \number -> number % 2 == 1 +isFirstLetter = \letter-> \word -> (String.left 1 word) == letter +lessThanTen = \num -> num < 10 + +tests : Test +tests = suite "Strain Test Suite" + [ test "empty keep" (assertEqual [] (keep lessThanTen [])), + test "keep everything" (assertEqual [1, 2, 3] (keep lessThanTen [1, 2, 3])), + test "keep first and last" (assertEqual [1, 3] (keep odd [1, 2, 3])), + test "keep nothing" (assertEqual [] (keep even [1,3,5,7])), + test "keep neither first nor last" (assertEqual [2] (keep even [1, 2, 3])), + test "keep strings" (assertEqual ["zebra", "zombies", "zealot"] (keep (isFirstLetter "z") ["apple", "zebra", "banana", "zombies", "cherimoya", "zealot"])), + test "empty discard" (assertEqual [] (discard lessThanTen [])), + test "discard everything" (assertEqual [] (discard lessThanTen [1, 2, 3])), + test "discard first and last" (assertEqual [2] (discard odd [1, 2, 3])), + test "discard nothing" (assertEqual [1,3,5,7] (discard even [1,3,5,7])), + test "discard neither first nor last" (assertEqual [1, 3] (discard even [1, 2, 3])), + test "discard strings" (assertEqual ["apple", "banana", "cherimoya"] (discard (isFirstLetter "z") ["apple", "zebra", "banana", "zombies", "cherimoya", "zealot"])) + ] + +main = runDisplay tests diff --git a/elm-package.json b/elm-package.json index 351b7dd..6ef6088 100644 --- a/elm-package.json +++ b/elm-package.json @@ -22,7 +22,8 @@ "RNATranscription", "Sublist", "Bob", - "sumOfMultiples" + "SumOfMultiples", + "Strain" ], "exposed-modules": [], "dependencies": {