From b82f41ce654a845f3a8d57870851f9b726880148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20R=C3=A4tzel?= Date: Mon, 1 Jan 2024 23:32:33 +0000 Subject: [PATCH] Expand coverage of Elm core libraries for Elm compiler Expand the coverage of the Elm core libraries for functions used by the Pine module in the Elm compiler: Add test scenarios and implementations for declarations from the 'List' and 'String' modules. --- .../src/ElmInteractiveCoreModules.elm | 59 +++++++++++++++++++ .../steps/263/expected-value.txt | 1 + .../elm-core-list/steps/263/submission.txt | 1 + .../steps/333/expected-value.txt | 1 + .../elm-core-list/steps/333/submission.txt | 7 +++ .../steps/502/expected-value.txt | 1 + .../elm-core-list/steps/502/submission.txt | 1 + .../steps/512/expected-value.txt | 1 + .../elm-core-list/steps/512/submission.txt | 1 + .../steps/532/expected-value.txt | 1 + .../elm-core-list/steps/532/submission.txt | 1 + .../steps/510/expected-value.txt | 1 + .../elm-core-string/steps/510/submission.txt | 1 + .../steps/511/expected-value.txt | 1 + .../elm-core-string/steps/511/submission.txt | 1 + .../steps/571/expected-value.txt | 1 + .../elm-core-string/steps/571/submission.txt | 1 + .../steps/572/expected-value.txt | 1 + .../elm-core-string/steps/572/submission.txt | 1 + .../steps/573/expected-value.txt | 1 + .../elm-core-string/steps/573/submission.txt | 1 + 21 files changed, 85 insertions(+) create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/263/expected-value.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/263/submission.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/333/expected-value.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/333/submission.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/502/expected-value.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/502/submission.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/512/expected-value.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/512/submission.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/532/expected-value.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/532/submission.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/510/expected-value.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/510/submission.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/511/expected-value.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/511/submission.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/571/expected-value.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/571/submission.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/572/expected-value.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/572/submission.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/573/expected-value.txt create mode 100644 implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/573/submission.txt diff --git a/implement/elm-time/ElmTime/compile-elm-program/src/ElmInteractiveCoreModules.elm b/implement/elm-time/ElmTime/compile-elm-program/src/ElmInteractiveCoreModules.elm index eb3f6a3b..b2cb2a59 100644 --- a/implement/elm-time/ElmTime/compile-elm-program/src/ElmInteractiveCoreModules.elm +++ b/implement/elm-time/ElmTime/compile-elm-program/src/ElmInteractiveCoreModules.elm @@ -595,6 +595,21 @@ filter isGood list = foldr (\\x xs -> if isGood x then cons x xs else xs) [] list +filterMap : (a -> Maybe b) -> List a -> List b +filterMap f xs = + foldr (maybeCons f) [] xs + + +maybeCons : (a -> Maybe b) -> a -> List b -> List b +maybeCons f mx xs = + case f mx of + Just x -> + cons x xs + + Nothing -> + xs + + length : List a -> Int length list = Pine_kernel.length list @@ -610,6 +625,11 @@ member x xs = any ((==) x) xs +all : (a -> Bool) -> List a -> Bool +all isOkay list = + not (any (not << isOkay) list) + + any : (a -> Bool) -> List a -> Bool any isOkay list = case list of @@ -624,6 +644,31 @@ any isOkay list = any isOkay xs +minimum : List comparable -> Maybe comparable +minimum list = + case list of + x :: xs -> + Just (foldl min x xs) + + _ -> + Nothing + + +maximum : List comparable -> Maybe comparable +maximum list = + case list of + x :: xs -> + Just (foldl max x xs) + + _ -> + Nothing + + +sum : List number -> number +sum numbers = + foldl (+) 0 numbers + + append : List a -> List a -> List a append xs ys = concat [ xs, ys ] @@ -1275,6 +1320,20 @@ dropWhileList predicate stringList = else stringList + +padLeft : Int -> Char -> String -> String +padLeft n char string = + repeat (n - length string) (fromChar char) ++ string + + +lines : String -> List String +lines string = + string + |> replace "\\r\\n" "\\n" + |> replace "\\r" "\\n" + |> split "\\n" + + """ , """ module Array exposing (..) diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/263/expected-value.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/263/expected-value.txt new file mode 100644 index 00000000..924df0bd --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/263/expected-value.txt @@ -0,0 +1 @@ +[3,12] \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/263/submission.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/263/submission.txt new file mode 100644 index 00000000..5ef4b0ac --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/263/submission.txt @@ -0,0 +1 @@ +List.filterMap String.toInt [ "3", "hi", "12", "4th", "May" ] \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/333/expected-value.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/333/expected-value.txt new file mode 100644 index 00000000..464138eb --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/333/expected-value.txt @@ -0,0 +1 @@ +[True,False] \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/333/submission.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/333/submission.txt new file mode 100644 index 00000000..2bf6f0d6 --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/333/submission.txt @@ -0,0 +1,7 @@ +let + isEven n = + modBy 2 n == 0 +in + [ List.all isEven [ 0, 4, 6 ] + , List.all isEven [ 0, 3, 6 ] + ] diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/502/expected-value.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/502/expected-value.txt new file mode 100644 index 00000000..78dc9d3a --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/502/expected-value.txt @@ -0,0 +1 @@ +Just 17 \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/502/submission.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/502/submission.txt new file mode 100644 index 00000000..280868dc --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/502/submission.txt @@ -0,0 +1 @@ +List.minimum [ 31, 17, 41, 37 ] \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/512/expected-value.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/512/expected-value.txt new file mode 100644 index 00000000..018504a8 --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/512/expected-value.txt @@ -0,0 +1 @@ +Just 41 \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/512/submission.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/512/submission.txt new file mode 100644 index 00000000..e1ca69f9 --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/512/submission.txt @@ -0,0 +1 @@ +List.maximum [ 31, 17, 41, 37 ] \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/532/expected-value.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/532/expected-value.txt new file mode 100644 index 00000000..aaa6442f --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/532/expected-value.txt @@ -0,0 +1 @@ +41 \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/532/submission.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/532/submission.txt new file mode 100644 index 00000000..1096f7e9 --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-list/steps/532/submission.txt @@ -0,0 +1 @@ +List.sum [ 11, 13, 17 ] \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/510/expected-value.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/510/expected-value.txt new file mode 100644 index 00000000..60bc259b --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/510/expected-value.txt @@ -0,0 +1 @@ +"test" \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/510/submission.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/510/submission.txt new file mode 100644 index 00000000..6bbdf1c2 --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/510/submission.txt @@ -0,0 +1 @@ +String.padLeft 3 '-' "test" \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/511/expected-value.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/511/expected-value.txt new file mode 100644 index 00000000..ac3abdf6 --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/511/expected-value.txt @@ -0,0 +1 @@ +"---test" \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/511/submission.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/511/submission.txt new file mode 100644 index 00000000..624dc6fd --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/511/submission.txt @@ -0,0 +1 @@ +String.padLeft 7 '-' "test" \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/571/expected-value.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/571/expected-value.txt new file mode 100644 index 00000000..d1dd61dc --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/571/expected-value.txt @@ -0,0 +1 @@ +["alfa","beta"] \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/571/submission.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/571/submission.txt new file mode 100644 index 00000000..e8e27f8b --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/571/submission.txt @@ -0,0 +1 @@ +String.lines "alfa\nbeta" \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/572/expected-value.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/572/expected-value.txt new file mode 100644 index 00000000..d1dd61dc --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/572/expected-value.txt @@ -0,0 +1 @@ +["alfa","beta"] \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/572/submission.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/572/submission.txt new file mode 100644 index 00000000..0fd062a7 --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/572/submission.txt @@ -0,0 +1 @@ +String.lines "alfa\rbeta" \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/573/expected-value.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/573/expected-value.txt new file mode 100644 index 00000000..d1dd61dc --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/573/expected-value.txt @@ -0,0 +1 @@ +["alfa","beta"] \ No newline at end of file diff --git a/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/573/submission.txt b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/573/submission.txt new file mode 100644 index 00000000..99160b2f --- /dev/null +++ b/implement/test-and-train/elm-interactive-scenarios-core/elm-core-string/steps/573/submission.txt @@ -0,0 +1 @@ +String.lines "alfa\r\nbeta" \ No newline at end of file