From 73f42a30b22d99cf5645a296c69ec431b953b226 Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:07:20 -0800 Subject: [PATCH 01/14] allergies: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/allergies/HINTS.md | 5 +++-- exercises/allergies/src/Allergies.hs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/exercises/allergies/HINTS.md b/exercises/allergies/HINTS.md index b4b14a69f..21a2ae620 100644 --- a/exercises/allergies/HINTS.md +++ b/exercises/allergies/HINTS.md @@ -6,5 +6,6 @@ with `Eq` and `Show` instances, and implement the following functions: - `allergies` - `isAllergicTo` -Your can use the provided signatures if you are unsure about the types, but -don't let them restrict your creativity. +You will find a dummy data declaration and type signatures already in place, +but it is up to you to define the functions and create a meaningful data type, +newtype or type synonym. diff --git a/exercises/allergies/src/Allergies.hs b/exercises/allergies/src/Allergies.hs index d2460ec18..bebfd0c18 100644 --- a/exercises/allergies/src/Allergies.hs +++ b/exercises/allergies/src/Allergies.hs @@ -1,5 +1,7 @@ module Allergies (Allergen(..), allergies, isAllergicTo) where +data Allergen = Dummy + allergies :: Int -> [Allergen] allergies = undefined From 4c1273549ef72c071f637340f23bce62f779ee95 Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:08:54 -0800 Subject: [PATCH 02/14] back-account: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/bank-account/HINTS.md | 5 +++-- exercises/bank-account/src/BankAccount.hs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/exercises/bank-account/HINTS.md b/exercises/bank-account/HINTS.md index 2fdbe106f..9ce1e91fb 100644 --- a/exercises/bank-account/HINTS.md +++ b/exercises/bank-account/HINTS.md @@ -11,5 +11,6 @@ The amount may be negative for a withdrawal. The initial balance of the bank account should be 0. -Your can use the provided signatures if you are unsure about the types, but -don't let them restrict your creativity. +You will find a dummy data declaration and type signatures already in place, +but it is up to you to define the functions and create a meaningful data type, +newtype or type synonym. diff --git a/exercises/bank-account/src/BankAccount.hs b/exercises/bank-account/src/BankAccount.hs index c83d8b73f..3426044cd 100644 --- a/exercises/bank-account/src/BankAccount.hs +++ b/exercises/bank-account/src/BankAccount.hs @@ -6,6 +6,8 @@ module BankAccount , openAccount ) where +data BankAccount = Dummy + closeAccount :: BankAccount -> IO () closeAccount = undefined From 342b932a79824a547c443dee741aa2f966f66b58 Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:09:52 -0800 Subject: [PATCH 03/14] clock: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/clock/HINTS.md | 5 +++-- exercises/clock/src/Clock.hs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/exercises/clock/HINTS.md b/exercises/clock/HINTS.md index 04ff6c081..2e2115293 100644 --- a/exercises/clock/HINTS.md +++ b/exercises/clock/HINTS.md @@ -12,5 +12,6 @@ The function `fromInteger`, from `Num`, must convert minutes to 24 hour clock time. It is not necessary to have a sensible implementation of `abs` or `signum`. -Your can use the provided signatures if you are unsure about the types, but -don't let them restrict your creativity. +You will find a dummy data declaration and type signatures already in place, +but it is up to you to define the functions and create a meaningful data type, +newtype or type synonym. diff --git a/exercises/clock/src/Clock.hs b/exercises/clock/src/Clock.hs index 634674fed..ca0877168 100644 --- a/exercises/clock/src/Clock.hs +++ b/exercises/clock/src/Clock.hs @@ -1,5 +1,7 @@ module Clock (clockHour, clockMin, fromHourMin, toString) where +data Clock = Dummy + clockHour :: Clock -> Int clockHour = undefined From 4a9b4888a26aa0548ee7743279dfd293e9ac175f Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:11:00 -0800 Subject: [PATCH 04/14] grade-school: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/grade-school/HINTS.md | 4 ++++ exercises/grade-school/src/School.hs | 2 ++ 2 files changed, 6 insertions(+) diff --git a/exercises/grade-school/HINTS.md b/exercises/grade-school/HINTS.md index c2b926978..eee10dde6 100644 --- a/exercises/grade-school/HINTS.md +++ b/exercises/grade-school/HINTS.md @@ -7,3 +7,7 @@ and implement the following functions: - `empty` - `grade` - `sorted` + +You will find a dummy data declaration already in place, but it is up to you to +define the functions and create a meaningful data type, newtype or type +synonym. diff --git a/exercises/grade-school/src/School.hs b/exercises/grade-school/src/School.hs index ccb6d2e8f..e62dc9bb0 100644 --- a/exercises/grade-school/src/School.hs +++ b/exercises/grade-school/src/School.hs @@ -1,5 +1,7 @@ module School (School, add, empty, grade, sorted) where +data School = Dummy + add = undefined empty = undefined From 5c1770539c9f9fbbc349e504e2274246971223ed Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:13:05 -0800 Subject: [PATCH 05/14] largest-series-product: Add signature to stub so that it runs tests Otherwise, there are ambiguous type constraints regarding the output of `largestProduct` and `Eq`. As part of the work in #421. --- exercises/largest-series-product/src/Series.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/exercises/largest-series-product/src/Series.hs b/exercises/largest-series-product/src/Series.hs index 27c09726b..ed1ab45a2 100644 --- a/exercises/largest-series-product/src/Series.hs +++ b/exercises/largest-series-product/src/Series.hs @@ -1,3 +1,4 @@ module Series (largestProduct) where +largestProduct :: Int -> String -> Maybe Integer largestProduct = undefined From 053164ebc1141bc811f1eda17fac21654c851ac1 Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:14:14 -0800 Subject: [PATCH 06/14] linked-list: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/linked-list/HINTS.md | 5 +++-- exercises/linked-list/src/Deque.hs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/exercises/linked-list/HINTS.md b/exercises/linked-list/HINTS.md index 6ddcddb52..cf7ec3456 100644 --- a/exercises/linked-list/HINTS.md +++ b/exercises/linked-list/HINTS.md @@ -9,5 +9,6 @@ and implement the following functions: - `unshift` - `shift` -You will find the type signatures already in place, but it is up to you -to define the functions. +You will find a dummy data declaration and type signatures already in place, +but it is up to you to define the functions and create a meaningful data type, +newtype or type synonym. diff --git a/exercises/linked-list/src/Deque.hs b/exercises/linked-list/src/Deque.hs index 50e1b6b5c..1a72af7cb 100644 --- a/exercises/linked-list/src/Deque.hs +++ b/exercises/linked-list/src/Deque.hs @@ -1,5 +1,7 @@ module Deque (Deque, mkDeque, pop, push, shift, unshift) where +data Deque a = Dummy + mkDeque :: IO (Deque a) mkDeque = undefined From f684559a15de545624adee758568a87788facc3c Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:16:25 -0800 Subject: [PATCH 07/14] matrix: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/matrix/HINTS.md | 5 +++-- exercises/matrix/src/Matrix.hs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/exercises/matrix/HINTS.md b/exercises/matrix/HINTS.md index bf53aab31..f80df6c29 100644 --- a/exercises/matrix/HINTS.md +++ b/exercises/matrix/HINTS.md @@ -14,8 +14,9 @@ with `Eq` and `Show` instances, and implement the following functions: - `shape` - `transpose` -You will find the type signatures already in place, but it is up to you -to define the functions. +You will find a dummy data declaration and type signatures already in place, +but it is up to you to define the functions and create a meaningful data type, +newtype or type synonym. No validation of input is required. Let it fail if the matrix is not rectangular, invalid chars are encountered, etc. diff --git a/exercises/matrix/src/Matrix.hs b/exercises/matrix/src/Matrix.hs index 23aee8959..3e721a154 100644 --- a/exercises/matrix/src/Matrix.hs +++ b/exercises/matrix/src/Matrix.hs @@ -14,6 +14,8 @@ module Matrix import Data.Vector (Vector) +data Matrix a = Dummy deriving (Eq, Show) + cols :: Matrix a -> Int cols = undefined From 7d76947322f49ad02ddeff138c5966a8aaf2a805 Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:19:43 -0800 Subject: [PATCH 08/14] meetup-day: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/meetup/HINTS.md | 5 +++-- exercises/meetup/src/Meetup.hs | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/exercises/meetup/HINTS.md b/exercises/meetup/HINTS.md index 7d8e86ca7..e51c9f48e 100644 --- a/exercises/meetup/HINTS.md +++ b/exercises/meetup/HINTS.md @@ -3,5 +3,6 @@ To complete this exercise, you need to create the data types `Weekday` and `Schedule`, and implement the function `meetupDay`. -You will find the type signature for `meetupDay` already in place, -but it is up to you to define the function. +You will find the type signature for `meetupDay` and dummy data declarations +already in place, but it is up to you to define the function and create +meaningful data types, newtypes or type synonyms. diff --git a/exercises/meetup/src/Meetup.hs b/exercises/meetup/src/Meetup.hs index bb8e7b998..aaab26a09 100644 --- a/exercises/meetup/src/Meetup.hs +++ b/exercises/meetup/src/Meetup.hs @@ -2,5 +2,8 @@ module Meetup (Weekday(..), Schedule(..), meetupDay) where import Data.Time.Calendar (Day) +data Schedule = Dummy +data Weekday = Dummy2 + meetupDay :: Schedule -> Weekday -> Integer -> Int -> Day meetupDay schedule weekday year month = undefined From 2299b7c5ed0f618e23d5046835b942b740f4e657 Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:20:40 -0800 Subject: [PATCH 09/14] robot-name: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/robot-name/HINTS.md | 5 +++-- exercises/robot-name/src/Robot.hs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/exercises/robot-name/HINTS.md b/exercises/robot-name/HINTS.md index 78bc5b502..0f727ea9b 100644 --- a/exercises/robot-name/HINTS.md +++ b/exercises/robot-name/HINTS.md @@ -7,5 +7,6 @@ as a mutable variable, and implement the following functions: - `resetName` - `robotName` -You will find the type signatures already in place, but it is up to you -to define the functions. +You will find a dummy data declaration and type signatures already in place, +but it is up to you to define the functions and create a meaningful data type, +newtype or type synonym. diff --git a/exercises/robot-name/src/Robot.hs b/exercises/robot-name/src/Robot.hs index 7b5e1e45e..4d339d683 100644 --- a/exercises/robot-name/src/Robot.hs +++ b/exercises/robot-name/src/Robot.hs @@ -1,5 +1,7 @@ module Robot (Robot, mkRobot, resetName, robotName) where +data Robot = Dummy + mkRobot :: IO Robot mkRobot = undefined From 34d4039dc6b9c055f3a477f2e6ee2967f476507f Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:21:11 -0800 Subject: [PATCH 10/14] robot-simulator: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/robot-simulator/HINTS.md | 5 +++-- exercises/robot-simulator/src/Robot.hs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/exercises/robot-simulator/HINTS.md b/exercises/robot-simulator/HINTS.md index 4145d28ce..770626963 100644 --- a/exercises/robot-simulator/HINTS.md +++ b/exercises/robot-simulator/HINTS.md @@ -10,5 +10,6 @@ and implement the following functions: - `turnLeft` - `turnRight` -You will find the type signatures already in place, but it is up to you -to define the functions. +You will find a dummy data declaration and type signatures already in place, +but it is up to you to define the functions and create a meaningful data type, +newtype or type synonym. diff --git a/exercises/robot-simulator/src/Robot.hs b/exercises/robot-simulator/src/Robot.hs index f6fc4ded8..9cee3c3e9 100644 --- a/exercises/robot-simulator/src/Robot.hs +++ b/exercises/robot-simulator/src/Robot.hs @@ -14,6 +14,8 @@ data Bearing = North | West deriving (Eq, Show) +data Robot = Dummy + bearing :: Robot -> Bearing bearing = undefined From 97624b6d1ee00cc4c7996f2c19ae0fe915285773 Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:22:04 -0800 Subject: [PATCH 11/14] simple-linked-list: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/simple-linked-list/HINTS.md | 5 +++-- exercises/simple-linked-list/src/LinkedList.hs | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/exercises/simple-linked-list/HINTS.md b/exercises/simple-linked-list/HINTS.md index 074477e0a..f112e68ce 100644 --- a/exercises/simple-linked-list/HINTS.md +++ b/exercises/simple-linked-list/HINTS.md @@ -12,5 +12,6 @@ and implement the following functions: - `reverseLinkedList` - `toList` -You will find the type signatures already in place, but it is up to you -to define the functions. +You will find a dummy data declaration and type signatures already in place, +but it is up to you to define the functions and create a meaningful data type, +newtype or type synonym. diff --git a/exercises/simple-linked-list/src/LinkedList.hs b/exercises/simple-linked-list/src/LinkedList.hs index a3b3de75d..6adb78d3c 100644 --- a/exercises/simple-linked-list/src/LinkedList.hs +++ b/exercises/simple-linked-list/src/LinkedList.hs @@ -10,6 +10,8 @@ module LinkedList , toList ) where +data LinkedList a = Dummy + datum :: LinkedList a -> a datum = undefined From 60e23bf92b22837d347ce747ad041e746aa64e98 Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:23:06 -0800 Subject: [PATCH 12/14] sublist: Add full data type and signature to stub so that it compiles As part of the work in #421. --- exercises/sublist/HINTS.md | 3 +-- exercises/sublist/src/Sublist.hs | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/exercises/sublist/HINTS.md b/exercises/sublist/HINTS.md index 64322e884..08b12a39e 100644 --- a/exercises/sublist/HINTS.md +++ b/exercises/sublist/HINTS.md @@ -1,4 +1,3 @@ ## Hints -To complete this exercise, you need to create the data type `Sublist`, -with `Eq` and `Show` instances, and implement the `sublist` function. +To complete this exercise, you need to implement the `sublist` function. diff --git a/exercises/sublist/src/Sublist.hs b/exercises/sublist/src/Sublist.hs index 48fb82865..e94376f58 100644 --- a/exercises/sublist/src/Sublist.hs +++ b/exercises/sublist/src/Sublist.hs @@ -1,3 +1,6 @@ module Sublist (Sublist(..), sublist) where +data Sublist = Equal | Sublist | Superlist | Unequal deriving (Eq, Show) + +sublist :: [a] -> [a] -> Sublist sublist = undefined From 3622396493714009aff0b54dcbb641c082d64255 Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 23:23:55 -0800 Subject: [PATCH 13/14] zipper: Add dummy data to stub so that it compiles As part of the work in #421. --- exercises/zipper/src/Zipper.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/exercises/zipper/src/Zipper.hs b/exercises/zipper/src/Zipper.hs index 1c9e169f8..11b0cab34 100644 --- a/exercises/zipper/src/Zipper.hs +++ b/exercises/zipper/src/Zipper.hs @@ -16,6 +16,8 @@ data BinTree a = BT { btValue :: a , btRight :: Maybe (BinTree a) } deriving (Eq, Show) +data Zipper a = Dummy deriving (Eq, Show) + fromTree :: BinTree a -> Zipper a fromTree = undefined From 1d91ceb1af24be5c0f2f051e82e429d171515343 Mon Sep 17 00:00:00 2001 From: Peter Tseng Date: Sat, 7 Jan 2017 21:54:13 -0800 Subject: [PATCH 14/14] travis: Build all stubs, and test all stubs except for untestable ones In #421 we express a desire that all our stubs should compile. Not all of them can successfully run their tests, so we will allow a file that says not to run the tests. This file will be stored in the .meta directory. Support for this was added in Trackler in https://github.com/exercism/trackler/pull/4 - in particular, it will not be served to students. Regardless, all stubs should build, ensuring that we have not made a syntax error! If we desire, we can evaluate from time to time whether it is legitimate for the exercises declaring DONT-TEST-STUB to remain that way. We don't use `--pedantic` since there are many cases where, say, a `Dummy` constructor is not used or a function argument is not used. Closes #421 --- .travis.yml | 21 +++++++++++++++++++ README.md | 8 ++++++- exercises/allergies/.meta/DONT-TEST-STUB | 1 + exercises/clock/.meta/DONT-TEST-STUB | 1 + exercises/grade-school/.meta/DONT-TEST-STUB | 2 ++ exercises/meetup/.meta/DONT-TEST-STUB | 2 ++ .../pythagorean-triplet/.meta/DONT-TEST-STUB | 2 ++ .../secret-handshake/.meta/DONT-TEST-STUB | 1 + exercises/space-age/.meta/DONT-TEST-STUB | 1 + 9 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 exercises/allergies/.meta/DONT-TEST-STUB create mode 100644 exercises/clock/.meta/DONT-TEST-STUB create mode 100644 exercises/grade-school/.meta/DONT-TEST-STUB create mode 100644 exercises/meetup/.meta/DONT-TEST-STUB create mode 100644 exercises/pythagorean-triplet/.meta/DONT-TEST-STUB create mode 100644 exercises/secret-handshake/.meta/DONT-TEST-STUB create mode 100644 exercises/space-age/.meta/DONT-TEST-STUB diff --git a/.travis.yml b/.travis.yml index d83ade65d..6d5a69384 100644 --- a/.travis.yml +++ b/.travis.yml @@ -53,6 +53,27 @@ script: exercisename=$(basename "$exercise") pushd ${exercise} + examplename="stub" + buildfolder="${TRAVIS_BUILD_DIR}/build/${exercisename}/${examplename}" + mkdir -p "${buildfolder}" + cp -rL stack.yaml package.yaml src test "${buildfolder}" + + pushd $buildfolder + + examplecache="${HOME}/.foldercache/${exercisename}/${examplename}/.stack-work" + mkdir -p "$examplecache" + ln -f -s "$examplecache" + + if [ -f "${exercise}/.meta/DONT-TEST-STUB" ]; then + echo "only building stub" + stack build ${SET_RESOLVER} --install-ghc --no-terminal + else + echo "testing stub" + stack test ${SET_RESOLVER} --install-ghc --no-terminal --no-run-tests + fi + + popd + if ! stat -t examples/*/ > /dev/null 2>&1; then echo "No examples for ${exercise}!" exit 1 diff --git a/README.md b/README.md index c94695552..6e74eceab 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,13 @@ To fix a bug you should [create a pull request from a fork](https://help.github. You should have [Stack](http://docs.haskellstack.org/) installed in your system to make contributing to this repository easier. ### Stub solution -The stub solution must compile together with the test suite. It should be as general as possible in order to not exclude any possible solutions. It should take Haskell specifics into account (for example use `Maybe` instead of a dummy return value). It should not contain any comments (people might forget to remove them), you can use the hints file instead. +The stub solution should be as general as possible in order to not exclude any possible solutions. It should take Haskell specifics into account (for example use `Maybe` instead of a dummy return value). It should not contain any comments (people might forget to remove them), you can use the hints file instead. + +The stub solution must compile by itself (with `stack build`). +Ideally, it would also compile together with the test suite (with `stack test --no-run-tests`). +These two conditions are enforced by Travis. +If the second condition cannot be met for a good reason, place the explanation in `.meta/DONT-TEST-STUB` to circumvent the check. +The first condition is always enforced and cannot be circumvented. ### Example solution The example solution could be inspiration for other language implementors. It doesn't need to be perfect or very elegant. But it should be efficient enough for the test suite to finish in only a few seconds. diff --git a/exercises/allergies/.meta/DONT-TEST-STUB b/exercises/allergies/.meta/DONT-TEST-STUB new file mode 100644 index 000000000..8438bff5f --- /dev/null +++ b/exercises/allergies/.meta/DONT-TEST-STUB @@ -0,0 +1 @@ +We would have to export all the allergens in the stub; let students figure that out. diff --git a/exercises/clock/.meta/DONT-TEST-STUB b/exercises/clock/.meta/DONT-TEST-STUB new file mode 100644 index 000000000..456c37799 --- /dev/null +++ b/exercises/clock/.meta/DONT-TEST-STUB @@ -0,0 +1 @@ +We ask for the Clock to be an instance of Num; let students figure this out. diff --git a/exercises/grade-school/.meta/DONT-TEST-STUB b/exercises/grade-school/.meta/DONT-TEST-STUB new file mode 100644 index 000000000..e42bac516 --- /dev/null +++ b/exercises/grade-school/.meta/DONT-TEST-STUB @@ -0,0 +1,2 @@ +No type signatures on functions (TODO: Should we have them?), +and this makes it impossible to ensure that the result of `grade` is `Eq`. diff --git a/exercises/meetup/.meta/DONT-TEST-STUB b/exercises/meetup/.meta/DONT-TEST-STUB new file mode 100644 index 000000000..0a4e673d7 --- /dev/null +++ b/exercises/meetup/.meta/DONT-TEST-STUB @@ -0,0 +1,2 @@ +Can't build because the parameters of meetupDay are unused +Would also have to export all the individual days of the week in stub; let students figure that out. diff --git a/exercises/pythagorean-triplet/.meta/DONT-TEST-STUB b/exercises/pythagorean-triplet/.meta/DONT-TEST-STUB new file mode 100644 index 000000000..3d8377d91 --- /dev/null +++ b/exercises/pythagorean-triplet/.meta/DONT-TEST-STUB @@ -0,0 +1,2 @@ +No function signatures, since we give students the freedom to define mkTriplet how they want +But this means we can't make sure that the result of `mkTriplet` is `Eq` diff --git a/exercises/secret-handshake/.meta/DONT-TEST-STUB b/exercises/secret-handshake/.meta/DONT-TEST-STUB new file mode 100644 index 000000000..87e1755a2 --- /dev/null +++ b/exercises/secret-handshake/.meta/DONT-TEST-STUB @@ -0,0 +1 @@ +No signature, so students can figure out accepting strings and ints. diff --git a/exercises/space-age/.meta/DONT-TEST-STUB b/exercises/space-age/.meta/DONT-TEST-STUB new file mode 100644 index 000000000..f1eeb6ec8 --- /dev/null +++ b/exercises/space-age/.meta/DONT-TEST-STUB @@ -0,0 +1 @@ +We would have to export all the planets in the stub; let students figure that out.