mirror of
https://github.com/correl/elm.git
synced 2025-03-07 04:35:48 -10:00
refactor sublist
This commit is contained in:
parent
b013837af3
commit
84759bd46e
3 changed files with 38 additions and 32 deletions
|
@ -1 +1,8 @@
|
||||||
module Sublist (..) where
|
module Sublist (..) where
|
||||||
|
|
||||||
|
|
||||||
|
type ListComparison
|
||||||
|
= Equal
|
||||||
|
| Superlist
|
||||||
|
| Sublist
|
||||||
|
| Unequal
|
||||||
|
|
|
@ -1,31 +1,30 @@
|
||||||
module Sublist (..) where
|
module Sublist (..) where
|
||||||
|
|
||||||
import List exposing (..)
|
|
||||||
import String
|
type ListComparison
|
||||||
|
= Equal
|
||||||
|
| Superlist
|
||||||
|
| Sublist
|
||||||
|
| Unequal
|
||||||
|
|
||||||
|
|
||||||
sublist : List a -> List a -> String
|
sublist : List a -> List a -> ListComparison
|
||||||
sublist alist blist =
|
sublist alist blist =
|
||||||
if alist == blist then
|
if alist == blist then
|
||||||
"Equal"
|
Equal
|
||||||
else if inList alist blist then
|
else if inList alist blist then
|
||||||
"Superlist"
|
Superlist
|
||||||
else if inList blist alist then
|
else if inList blist alist then
|
||||||
"Sublist"
|
Sublist
|
||||||
else
|
else
|
||||||
"Unequal"
|
Unequal
|
||||||
|
|
||||||
|
|
||||||
inList : List a -> List a -> Bool
|
inList : List a -> List a -> Bool
|
||||||
inList alist blist =
|
inList alist blist =
|
||||||
let
|
let
|
||||||
getLastInList sublist =
|
getLastInList sublist =
|
||||||
case (List.tail sublist) of
|
Maybe.withDefault [] (List.tail sublist)
|
||||||
Just list ->
|
|
||||||
list
|
|
||||||
|
|
||||||
Nothing ->
|
|
||||||
[]
|
|
||||||
in
|
in
|
||||||
if (List.length alist) < (List.length blist) then
|
if (List.length alist) < (List.length blist) then
|
||||||
False
|
False
|
||||||
|
|
|
@ -3,7 +3,7 @@ module Main (..) where
|
||||||
import Task
|
import Task
|
||||||
import Console
|
import Console
|
||||||
import ElmTest exposing (..)
|
import ElmTest exposing (..)
|
||||||
import Sublist exposing (sublist)
|
import Sublist exposing (sublist, ListComparison(..))
|
||||||
|
|
||||||
|
|
||||||
tests : Test
|
tests : Test
|
||||||
|
@ -12,58 +12,58 @@ tests =
|
||||||
"Sublist"
|
"Sublist"
|
||||||
[ test
|
[ test
|
||||||
"empty equals empty"
|
"empty equals empty"
|
||||||
(assertEqual "Equal" (sublist [] []))
|
(assertEqual Equal (sublist [] []))
|
||||||
, test
|
, test
|
||||||
"empty is a sublist of anything"
|
"empty is a sublist of anything"
|
||||||
(assertEqual "Sublist" (sublist [] [ 1, 2 ]))
|
(assertEqual Sublist (sublist [] [ 1, 2 ]))
|
||||||
, test
|
, test
|
||||||
"anything is a superlist of empty"
|
"anything is a superlist of empty"
|
||||||
(assertEqual "Superlist" (sublist [ 1, 2 ] []))
|
(assertEqual Superlist (sublist [ 1, 2 ] []))
|
||||||
, test
|
, test
|
||||||
"1 is not 2"
|
"1 is not 2"
|
||||||
(assertEqual "Unequal" (sublist [ 1 ] [ 2 ]))
|
(assertEqual Unequal (sublist [ 1 ] [ 2 ]))
|
||||||
, test
|
, test
|
||||||
"compare larger equal lists"
|
"compare larger equal lists"
|
||||||
(assertEqual "Equal" (sublist [ 1, 1, 1 ] [ 1, 1, 1 ]))
|
(assertEqual Equal (sublist [ 1, 1, 1 ] [ 1, 1, 1 ]))
|
||||||
, test
|
, test
|
||||||
"sublist at start"
|
"sublist at start"
|
||||||
(assertEqual "Sublist" (sublist [ 1, 2, 3 ] [ 1, 2, 3, 4, 5 ]))
|
(assertEqual Sublist (sublist [ 1, 2, 3 ] [ 1, 2, 3, 4, 5 ]))
|
||||||
, test
|
, test
|
||||||
"sublist in the middle"
|
"sublist in the middle"
|
||||||
(assertEqual "Sublist" (sublist [ 4, 3, 2 ] [ 5, 4, 3, 2, 1 ]))
|
(assertEqual Sublist (sublist [ 4, 3, 2 ] [ 5, 4, 3, 2, 1 ]))
|
||||||
, test
|
, test
|
||||||
"sublist at end"
|
"sublist at end"
|
||||||
(assertEqual "Sublist" (sublist [ 3, 4, 5 ] [ 1, 2, 3, 4, 5 ]))
|
(assertEqual Sublist (sublist [ 3, 4, 5 ] [ 1, 2, 3, 4, 5 ]))
|
||||||
, test
|
, test
|
||||||
"partially matching sublist at start"
|
"partially matching sublist at start"
|
||||||
(assertEqual "Sublist" (sublist [ 1, 1, 2 ] [ 1, 1, 1, 2 ]))
|
(assertEqual Sublist (sublist [ 1, 1, 2 ] [ 1, 1, 1, 2 ]))
|
||||||
, test
|
, test
|
||||||
"sublist early in huge list"
|
"sublist early in huge list"
|
||||||
(assertEqual "Sublist" (sublist [ 3, 4, 5 ] [1..100000]))
|
(assertEqual Sublist (sublist [ 3, 4, 5 ] [1..100000]))
|
||||||
, test
|
, test
|
||||||
"huge sublist not in list"
|
"huge sublist not in list"
|
||||||
(assertEqual "Unequal" (sublist [10..100001] [1..100000]))
|
(assertEqual Unequal (sublist [10..100001] [1..100000]))
|
||||||
, test
|
, test
|
||||||
"superlist at start"
|
"superlist at start"
|
||||||
(assertEqual "Superlist" (sublist [ 1, 2, 3, 4, 5 ] [ 1, 2, 3 ]))
|
(assertEqual Superlist (sublist [ 1, 2, 3, 4, 5 ] [ 1, 2, 3 ]))
|
||||||
, test
|
, test
|
||||||
"superlist in middle"
|
"superlist in middle"
|
||||||
(assertEqual "Superlist" (sublist [ 5, 4, 3, 2, 1 ] [ 4, 3, 2 ]))
|
(assertEqual Superlist (sublist [ 5, 4, 3, 2, 1 ] [ 4, 3, 2 ]))
|
||||||
, test
|
, test
|
||||||
"superlist at end"
|
"superlist at end"
|
||||||
(assertEqual "Superlist" (sublist [ 1, 2, 3, 4, 5 ] [ 3, 4, 5 ]))
|
(assertEqual Superlist (sublist [ 1, 2, 3, 4, 5 ] [ 3, 4, 5 ]))
|
||||||
, test
|
, test
|
||||||
"partially matching superlist at start"
|
"partially matching superlist at start"
|
||||||
(assertEqual "Superlist" (sublist [ 1, 1, 1, 2 ] [ 1, 1, 2 ]))
|
(assertEqual Superlist (sublist [ 1, 1, 1, 2 ] [ 1, 1, 2 ]))
|
||||||
, test
|
, test
|
||||||
"superlist early in huge list"
|
"superlist early in huge list"
|
||||||
(assertEqual "Superlist" (sublist [1..100000] [ 3, 4, 5 ]))
|
(assertEqual Superlist (sublist [1..100000] [ 3, 4, 5 ]))
|
||||||
, test
|
, test
|
||||||
"recurring values sublist"
|
"recurring values sublist"
|
||||||
(assertEqual "Sublist" (sublist [ 1, 2, 1, 2, 3 ] [ 1, 2, 3, 1, 2, 1, 2, 3, 2, 1 ]))
|
(assertEqual Sublist (sublist [ 1, 2, 1, 2, 3 ] [ 1, 2, 3, 1, 2, 1, 2, 3, 2, 1 ]))
|
||||||
, test
|
, test
|
||||||
"recurring values unequal"
|
"recurring values unequal"
|
||||||
(assertEqual "Unequal" (sublist [ 1, 2, 1, 2, 3 ] [ 1, 2, 3, 1, 2, 3, 2, 3, 2, 1 ]))
|
(assertEqual Unequal (sublist [ 1, 2, 1, 2, 3 ] [ 1, 2, 3, 1, 2, 3, 2, 3, 2, 1 ]))
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue