From 51aa69718e18f67494fef24e10283542f9e2e0ca Mon Sep 17 00:00:00 2001 From: Luciano Palma Date: Tue, 28 Mar 2017 17:03:46 +0100 Subject: [PATCH 1/5] create yaml files --- exercises/pangram/package.yaml | 19 +++++++++++++++++++ exercises/pangram/stack.yaml | 1 + 2 files changed, 20 insertions(+) create mode 100644 exercises/pangram/package.yaml create mode 100644 exercises/pangram/stack.yaml diff --git a/exercises/pangram/package.yaml b/exercises/pangram/package.yaml new file mode 100644 index 000000000..9071ec548 --- /dev/null +++ b/exercises/pangram/package.yaml @@ -0,0 +1,19 @@ +name: pangram + +dependencies: + - base + +library: + exposed-modules: Pangram + source-dirs: src + dependencies: + # - foo # List here the packages you + # - bar # want to use in your solution. + +tests: + test: + main: Tests.hs + source-dirs: test + dependencies: + - pangram + - hspec diff --git a/exercises/pangram/stack.yaml b/exercises/pangram/stack.yaml new file mode 100644 index 000000000..72bc099fa --- /dev/null +++ b/exercises/pangram/stack.yaml @@ -0,0 +1 @@ +resolver: lts-8.2 From 8a639ca75b934055b84983b5f63644434437dc92 Mon Sep 17 00:00:00 2001 From: Luciano Palma Date: Tue, 28 Mar 2017 17:31:12 +0100 Subject: [PATCH 2/5] add tests --- exercises/pangram/test/Tests.hs | 65 +++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 exercises/pangram/test/Tests.hs diff --git a/exercises/pangram/test/Tests.hs b/exercises/pangram/test/Tests.hs new file mode 100644 index 000000000..1ad70a453 --- /dev/null +++ b/exercises/pangram/test/Tests.hs @@ -0,0 +1,65 @@ +{-# LANGUAGE RecordWildCards #-} + +import Data.Foldable (for_) +import Test.Hspec (Spec, describe, it, shouldBe) +import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith) + +import Pangram (isPangram) + +main :: IO () +main = hspecWith defaultConfig {configFastFail = True} specs + +specs :: Spec +specs = describe "pangram" $ + describe "isPangram" $ for_ cases test + where + test Case{..} = it description $ isPangram input `shouldBe` expected + +-- Adapted from +-- Source: exercism/x-common/exercises/pangram/canonical-data.json +-- Version: 1.0.0 +-- Date: 2017-03-28. + +data Case = Case { description :: String + , input :: String + , expected :: Bool + } + +cases :: [Case] +cases = [ Case { description = "sentence empty" + , input = "" + , expected = False + } + , Case { description = "pangram with only lower case" + , input = "the quick brown fox jumps over the lazy dog" + , expected = True + } + , Case { description = "missing character 'x'" + , input = "a quick movement of the enemy will jeopardize five gunboats" + , expected = False + } + , Case { description = "another missing character 'x'" + , input = "the quick brown fish jumps over the lazy dog" + , expected = False + } + , Case { description = "pangram with underscores" + , input = "the_quick_brown_fox_jumps_over_the_lazy_dog" + , expected = True + } + , Case { description = "pangram with numbers" + , input = "the 1 quick brown fox jumps over the 2 lazy dogs" + , expected = True + } + , Case { description = "missing letters replaced by numbers" + , input = "7h3 qu1ck brown fox jumps ov3r 7h3 lazy dog" + , expected = False + } + , Case { description = "pangram with mixed case and punctuation" + , input = "\"Five quacking Zephyrs jolt my wax bed.\"" + , expected = True + } + , Case { description = "upper and lower case versions of the same character should not be counted separately" + , input = "the quick brown fox jumped over the lazy FOX" + , expected = False + } + ] From 3012848e77c388bb487ae3f4d043b110d0d25f72 Mon Sep 17 00:00:00 2001 From: Luciano Palma Date: Tue, 28 Mar 2017 17:31:45 +0100 Subject: [PATCH 3/5] add stub function --- exercises/pangram/src/Pangram.hs | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 exercises/pangram/src/Pangram.hs diff --git a/exercises/pangram/src/Pangram.hs b/exercises/pangram/src/Pangram.hs new file mode 100644 index 000000000..49bd3a01a --- /dev/null +++ b/exercises/pangram/src/Pangram.hs @@ -0,0 +1,4 @@ +module Pangram (isPangram) where + +isPangram :: String -> Bool +isPangram text = error "You need to implement this function." From 20200886220f4201280d5cfec9f1a3661feb75ab Mon Sep 17 00:00:00 2001 From: Luciano Palma Date: Tue, 28 Mar 2017 19:36:58 +0100 Subject: [PATCH 4/5] add example solution --- .../examples/success-standard/package.yaml | 16 ++++++++++++++++ .../examples/success-standard/src/Pangram.hs | 7 +++++++ 2 files changed, 23 insertions(+) create mode 100644 exercises/pangram/examples/success-standard/package.yaml create mode 100644 exercises/pangram/examples/success-standard/src/Pangram.hs diff --git a/exercises/pangram/examples/success-standard/package.yaml b/exercises/pangram/examples/success-standard/package.yaml new file mode 100644 index 000000000..0031f5c70 --- /dev/null +++ b/exercises/pangram/examples/success-standard/package.yaml @@ -0,0 +1,16 @@ +name: pangram + +dependencies: + - base + +library: + exposed-modules: Pangram + source-dirs: src + +tests: + test: + main: Tests.hs + source-dirs: test + dependencies: + - pangram + - hspec diff --git a/exercises/pangram/examples/success-standard/src/Pangram.hs b/exercises/pangram/examples/success-standard/src/Pangram.hs new file mode 100644 index 000000000..20f8a2f4d --- /dev/null +++ b/exercises/pangram/examples/success-standard/src/Pangram.hs @@ -0,0 +1,7 @@ +module Pangram (isPangram) where + +import Data.Char (toLower) + +isPangram :: String -> Bool +isPangram xs = all (`elem` fixedText) ['a'..'z'] + where fixedText = map toLower xs From cc990f5e47848e08f2f7d9177cf81d77ea7f79b8 Mon Sep 17 00:00:00 2001 From: Luciano Palma Date: Tue, 28 Mar 2017 19:50:22 +0100 Subject: [PATCH 5/5] enable pangram to be fetch --- config.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config.json b/config.json index dd05d7dac..c8425b289 100644 --- a/config.json +++ b/config.json @@ -28,6 +28,12 @@ "topics": [ ] }, + { + "slug": "pangram", + "difficulty": 1, + "topics": [ + ] + }, { "slug": "run-length-encoding", "difficulty": 1,