Add Sublist example and test

This commit is contained in:
Claire Thompson and Gavin Morgan 2015-10-12 09:46:15 -07:00 committed by Erik Simmler
parent 6072ca7ff8
commit 6917a05e8a
3 changed files with 58 additions and 1 deletions

View file

@ -0,0 +1,23 @@
module SublistExample where
import List exposing (..)
import String
sublist : List a -> List a -> String
sublist alist blist =
if alist == blist then "Equal" else
if alist == [] then "Sublist" else
if blist == [] then "Superlist" else
if inList alist blist then "Superlist" else
if inList blist alist then "Sublist" else "Unequal"
inList : List a -> List a -> Bool
inList alist blist =
let getLastInList sublist =
case (List.tail sublist) of
Just list -> list
Nothing -> []
in
if (List.length alist) < (List.length blist) then False else
if (List.take (List.length blist) alist) == blist then True else
inList (getLastInList alist) blist

33
Sublist/SublistTest.elm Normal file
View file

@ -0,0 +1,33 @@
module SublistTest 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 SublistExample exposing (sublist)
tests : Test
tests = suite "Sublist Test Suite"
[ test " empty equals empty" (assertEqual "Equal" (sublist [] [])),
test "empty is a sublist of anything" (assertEqual "Sublist" (sublist [] [1,2])),
test "anything is a superlist of empty" (assertEqual "Superlist" (sublist [1,2] [] )),
test "1 is not 2" (assertEqual "Unequal" (sublist [1] [2])),
test "compare larger equal lists" (assertEqual "Equal" (sublist [1, 1, 1] [1, 1, 1])),
test "sublist at start" (assertEqual "Sublist" (sublist [1,2,3] [1,2,3,4,5])),
test "sublist in the middle" (assertEqual "Sublist" (sublist [4,3,2] [5,4,3,2,1])),
test "sublist at end" (assertEqual "Sublist" (sublist [3,4,5] [1,2,3,4,5])),
test "partially matching sublist at start" (assertEqual "Sublist" (sublist [1,1,2] [1,1,1,2])),
test "sublist early in huge list" (assertEqual "Sublist" (sublist [3,4,5] [1 .. 100000])),
test "huge sublist not in list" (assertEqual "Unequal" (sublist [10 .. 100001] [1 .. 100000])),
test "superlist at start" (assertEqual "Superlist" (sublist [1,2,3,4,5] [1,2,3])),
test "superlist in middle" (assertEqual "Superlist" (sublist [5,4,3,2,1] [4,3,2])),
test "superlist at end" (assertEqual "Superlist" (sublist [1,2,3,4,5] [3,4,5])),
test "partially matching superlist at start" (assertEqual "Superlist" (sublist [1,1,1,2] [1,1,2])),
test "superlist early in huge list" (assertEqual "Superlist" (sublist [1 .. 100000] [3,4,5])),
test "recurring values sublist" (assertEqual "Sublist" (sublist [1,2,1,2,3] [1,2,3,1,2,1,2,3,2,1])),
test "recurring values unequal" (assertEqual "Unequal" (sublist [1,2,1,2,3] [1,2,3,1,2,3,2,3,2,1]))
]
main = runDisplay tests

View file

@ -18,7 +18,8 @@
"./exercises/raindrops",
"./exercises/triangle",
"Leap",
"Accumulate"
"Accumulate",
"Sublist"
],
"exposed-modules": [],
"dependencies": {