diff --git a/.gitignore b/.gitignore index 4815904..417ac88 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ bin/configlet bin/configlet.exe +**/npm-debug.log + # Purescript artifact directories **/bower_components/ **/node_modules/ diff --git a/config.json b/config.json index bbdbf9a..955a446 100644 --- a/config.json +++ b/config.json @@ -11,6 +11,13 @@ "maybe" ] }, + { + "slug": "leap", + "difficulty": 1, + "topics": [ + "modulo" + ] + }, { "slug": "raindrops", "difficulty": 1, diff --git a/exercises/hello-world/src/HelloWorld.purs b/exercises/hello-world/src/HelloWorld.purs index 2996ad5..498ce36 100644 --- a/exercises/hello-world/src/HelloWorld.purs +++ b/exercises/hello-world/src/HelloWorld.purs @@ -1,6 +1 @@ module HelloWorld where - -import Prelude -import Data.Maybe (Maybe(Just, Nothing)) - -helloWorld :: Maybe String -> String diff --git a/exercises/leap/bower.json b/exercises/leap/bower.json new file mode 100644 index 0000000..871fe2e --- /dev/null +++ b/exercises/leap/bower.json @@ -0,0 +1,16 @@ +{ + "name": "leap", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "output" + ], + "dependencies": { + "purescript-prelude": "^2.1.0" + }, + "devDependencies": { + "purescript-psci-support": "^2.0.0", + "purescript-test-unit": "^10.0.1" + } +} diff --git a/exercises/leap/examples/src/Leap.purs b/exercises/leap/examples/src/Leap.purs new file mode 100644 index 0000000..ccb8736 --- /dev/null +++ b/exercises/leap/examples/src/Leap.purs @@ -0,0 +1,9 @@ +module Leap where + +import Prelude + +isLeapYear :: Int -> Boolean +isLeapYear year = + mod year 4 == 0 && + mod year 100 /= 0 || + mod year 400 == 0 diff --git a/exercises/leap/src/Leap.purs b/exercises/leap/src/Leap.purs new file mode 100644 index 0000000..b168a21 --- /dev/null +++ b/exercises/leap/src/Leap.purs @@ -0,0 +1 @@ +module Leap where diff --git a/exercises/leap/test/Main.purs b/exercises/leap/test/Main.purs new file mode 100644 index 0000000..e35451a --- /dev/null +++ b/exercises/leap/test/Main.purs @@ -0,0 +1,25 @@ +module Test.Main where + +import Prelude +import Test.Unit (suite, test) +import Test.Unit.Main (runTest) +import Test.Unit.Assert as Assert +import Leap as Leap + + +main = runTest do + suite "Leap.isLeapYear" do + test "leap year" do + Assert.equal true $ Leap.isLeapYear 1996 + test "non-leap year" do + Assert.equal false $ Leap.isLeapYear 1997 + test "non-leap even year" do + Assert.equal false $ Leap.isLeapYear 1998 + test "century" do + Assert.equal false $ Leap.isLeapYear 1900 + test "second century" do + Assert.equal false $ Leap.isLeapYear 1800 + test "fourth century" do + Assert.equal true $ Leap.isLeapYear 2400 + test "y2k" do + Assert.equal true $ Leap.isLeapYear 2000