diff --git a/config.json b/config.json index 087da15..6250e62 100644 --- a/config.json +++ b/config.json @@ -153,6 +153,11 @@ "slug": "gigasecond", "difficulty": 1, "topics": [] + }, + { + "slug": "grains", + "difficulty": 1, + "topics": [] } ], "deprecated": [], diff --git a/exercises/grains/Grains.elm b/exercises/grains/Grains.elm new file mode 100644 index 0000000..b79650d --- /dev/null +++ b/exercises/grains/Grains.elm @@ -0,0 +1,2 @@ +module Grains exposing (..) + diff --git a/exercises/grains/Grains.example.elm b/exercises/grains/Grains.example.elm new file mode 100644 index 0000000..44b946f --- /dev/null +++ b/exercises/grains/Grains.example.elm @@ -0,0 +1,9 @@ +module Grains exposing (..) + + +square : Int -> Maybe Int +square n = + if n < 1 then + Nothing + else + Just <| 2 ^ (n - 1) diff --git a/exercises/grains/elm-package.json b/exercises/grains/elm-package.json new file mode 100644 index 0000000..894b41f --- /dev/null +++ b/exercises/grains/elm-package.json @@ -0,0 +1,14 @@ +{ + "version": "3.0.0", + "summary": "Exercism problems in Elm.", + "repository": "https://github.com/exercism/xelm.git", + "license": "BSD3", + "source-directories": [ + "." + ], + "exposed-modules": [], + "dependencies": { + "elm-lang/core": "5.0.0 <= v < 6.0.0" + }, + "elm-version": "0.18.0 <= v < 0.19.0" +} diff --git a/exercises/grains/package.json b/exercises/grains/package.json new file mode 100644 index 0000000..479082f --- /dev/null +++ b/exercises/grains/package.json @@ -0,0 +1,13 @@ +{ + "description": "Exercism/Elm", + "repository": "https://github.com/exercism/xelm.git", + "license": "MIT", + "scripts": { + "postinstall": "elm-package install -y", + "test": "elm-test" + }, + "dependencies": { + "elm": "0.18.0", + "elm-test": "0.18.3" + } +} diff --git a/exercises/grains/tests/Tests.elm b/exercises/grains/tests/Tests.elm new file mode 100644 index 0000000..6fbc08e --- /dev/null +++ b/exercises/grains/tests/Tests.elm @@ -0,0 +1,37 @@ +module Tests exposing (..) + +import Expect +import Grains exposing (square) +import Json.Encode exposing (Value) +import Test exposing (..) + + +tests : Test +tests = + describe "Grains" + [ describe "square" + [ test "of 1" <| + \() -> Expect.equal (Just 1) (square 1) + , test "of 2" <| + \() -> Expect.equal (Just 2) (square 2) + , test "of 3" <| + \() -> Expect.equal (Just 4) (square 3) + , test "of 4" <| + \() -> Expect.equal (Just 8) (square 4) + , test "of 16" <| + \() -> Expect.equal (Just 32768) (square 16) + , test "of 32" <| + \() -> Expect.equal (Just 2147483648) (square 32) + , test "square 0 raises an exception" <| + \() -> Expect.equal Nothing (square 0) + , test "negative square raises an exception" <| + \() -> Expect.equal Nothing (square -1) + {- + Where are the bigger test values?!? Because Javascript's numbers + can't represent values higher than `Number.MAX_SAFE_INTEGER` + (i.e. 9007199254740991), we chose to exclude these final values + to avoid the weirdness. A bit more information can be found + here: https://github.com/elm-lang/elm-compiler/issues/1246 + -} + ] + ] diff --git a/exercises/grains/tests/elm-package.json b/exercises/grains/tests/elm-package.json new file mode 100644 index 0000000..2e70ae6 --- /dev/null +++ b/exercises/grains/tests/elm-package.json @@ -0,0 +1,16 @@ +{ + "version": "3.0.0", + "summary": "Exercism problems in Elm.", + "repository": "https://github.com/exercism/xelm.git", + "license": "BSD3", + "source-directories": [ + ".", + ".." + ], + "exposed-modules": [], + "dependencies": { + "elm-lang/core": "5.0.0 <= v < 6.0.0", + "elm-community/elm-test": "4.0.0 <= v < 5.0.0" + }, + "elm-version": "0.18.0 <= v < 0.19.0" +}