trackler 2.0.0.2 → 2.0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/common/exercises/forth/canonical-data.json +1 -1
- data/common/exercises/pangram/canonical-data.json +0 -10
- data/common/exercises/run-length-encoding/canonical-data.json +21 -11
- data/lib/trackler/version.rb +1 -1
- data/tracks/bash/SETUP.md +2 -39
- data/tracks/bash/config.json +0 -9
- data/tracks/bash/exercises/hello-world/HINTS.md +38 -0
- data/tracks/bash/exercises/hello-world/hello_world_test.sh +0 -14
- data/tracks/haskell/.travis.yml +2 -13
- data/tracks/haskell/README.md +2 -1
- data/tracks/haskell/config.json +6 -0
- data/tracks/haskell/exercises/accumulate/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/accumulate/{src/Example.hs → examples/success-standard/src/Accumulate.hs} +0 -0
- data/tracks/haskell/exercises/all-your-base/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/all-your-base/{src/Example.hs → examples/success-standard/src/Base.hs} +0 -0
- data/tracks/haskell/exercises/allergies/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/allergies/{src/Example.hs → examples/success-standard/src/Allergies.hs} +0 -0
- data/tracks/haskell/exercises/alphametics/HINTS.md +5 -0
- data/tracks/haskell/exercises/alphametics/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/alphametics/examples/success-standard/src/Alphametics.hs +116 -0
- data/tracks/haskell/exercises/alphametics/package.yaml +20 -0
- data/tracks/haskell/exercises/alphametics/src/Alphametics.hs +4 -0
- data/tracks/haskell/exercises/alphametics/stack.yaml +1 -0
- data/tracks/haskell/exercises/alphametics/test/Tests.hs +78 -0
- data/tracks/haskell/exercises/anagram/examples/{list-string → success-liststring}/package.yaml +0 -1
- data/tracks/haskell/exercises/anagram/examples/{list-string → success-liststring/src}/Anagram.hs +0 -0
- data/tracks/haskell/exercises/anagram/examples/{set-text → success-settext}/package.yaml +0 -0
- data/tracks/haskell/exercises/anagram/examples/{set-text → success-settext/src}/Anagram.hs +0 -0
- data/tracks/haskell/exercises/atbash-cipher/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/atbash-cipher/{src/Example.hs → examples/success-standard/src/Atbash.hs} +0 -0
- data/tracks/haskell/exercises/bank-account/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/bank-account/{src/Example.hs → examples/success-standard/src/BankAccount.hs} +0 -0
- data/tracks/haskell/exercises/beer-song/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/beer-song/{src/Example.hs → examples/success-standard/src/Beer.hs} +0 -0
- data/tracks/haskell/exercises/binary-search-tree/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/binary-search-tree/{src/Example.hs → examples/success-standard/src/BST.hs} +0 -0
- data/tracks/haskell/exercises/binary/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/binary/{src/Example.hs → examples/success-standard/src/Binary.hs} +0 -0
- data/tracks/haskell/exercises/bob/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/bob/{src/Example.hs → examples/success-standard/src/Bob.hs} +0 -0
- data/tracks/haskell/exercises/change/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/change/{src/Example.hs → examples/success-standard/src/Change.hs} +0 -0
- data/tracks/haskell/exercises/clock/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/clock/{src/Example.hs → examples/success-standard/src/Clock.hs} +0 -0
- data/tracks/haskell/exercises/connect/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/connect/{src/Example.hs → examples/success-standard/src/Connect.hs} +0 -0
- data/tracks/haskell/exercises/crypto-square/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/crypto-square/{src/Example.hs → examples/success-standard/src/CryptoSquare.hs} +0 -0
- data/tracks/haskell/exercises/custom-set/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/custom-set/{src/Example.hs → examples/success-standard/src/CustomSet.hs} +0 -0
- data/tracks/haskell/exercises/difference-of-squares/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/difference-of-squares/{src/Example.hs → examples/success-standard/src/Squares.hs} +0 -0
- data/tracks/haskell/exercises/etl/examples/success-standard/package.yaml +17 -0
- data/tracks/haskell/exercises/etl/{src/Example.hs → examples/success-standard/src/ETL.hs} +0 -0
- data/tracks/haskell/exercises/food-chain/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/food-chain/{src/Example.hs → examples/success-standard/src/FoodChain.hs} +0 -0
- data/tracks/haskell/exercises/forth/HINTS.md +2 -2
- data/tracks/haskell/exercises/forth/examples/success-standard/package.yaml +19 -0
- data/tracks/haskell/exercises/forth/{src/Example.hs → examples/success-standard/src/Forth.hs} +3 -3
- data/tracks/haskell/exercises/forth/package.yaml +0 -1
- data/tracks/haskell/exercises/forth/src/Forth.hs +3 -3
- data/tracks/haskell/exercises/forth/test/Tests.hs +120 -65
- data/tracks/haskell/exercises/gigasecond/examples/success-standard/package.yaml +17 -0
- data/tracks/haskell/exercises/gigasecond/{src/Example.hs → examples/success-standard/src/Gigasecond.hs} +0 -0
- data/tracks/haskell/exercises/go-counting/examples/success-standard/package.yaml +20 -0
- data/tracks/haskell/exercises/go-counting/{src/Example.hs → examples/success-standard/src/Counting.hs} +0 -0
- data/tracks/haskell/exercises/grade-school/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/grade-school/{src/Example.hs → examples/success-standard/src/School.hs} +0 -0
- data/tracks/haskell/exercises/grains/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/grains/{src/Example.hs → examples/success-standard/src/Grains.hs} +0 -0
- data/tracks/haskell/exercises/grains/test/Tests.hs +1 -2
- data/tracks/haskell/exercises/hamming/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/hamming/{src/Example.hs → examples/success-standard/src/Hamming.hs} +0 -0
- data/tracks/haskell/exercises/hexadecimal/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/hexadecimal/{src/Example.hs → examples/success-standard/src/Hexadecimal.hs} +0 -0
- data/tracks/haskell/exercises/house/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/house/{src/Example.hs → examples/success-standard/src/House.hs} +0 -0
- data/tracks/haskell/exercises/kindergarten-garden/examples/success-standard/package.yaml +19 -0
- data/tracks/haskell/exercises/kindergarten-garden/{src/Example.hs → examples/success-standard/src/Garden.hs} +0 -0
- data/tracks/haskell/exercises/largest-series-product/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/largest-series-product/{src/Example.hs → examples/success-standard/src/Series.hs} +0 -0
- data/tracks/haskell/exercises/leap/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/leap/{src/Example.hs → examples/success-standard/src/LeapYear.hs} +0 -0
- data/tracks/haskell/exercises/lens-person/examples/success-standard/package.yaml +19 -0
- data/tracks/haskell/exercises/lens-person/{src/Example.hs → examples/success-standard/src/Person.hs} +0 -0
- data/tracks/haskell/exercises/linked-list/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/linked-list/{src/Example.hs → examples/success-standard/src/Deque.hs} +0 -0
- data/tracks/haskell/exercises/list-ops/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/list-ops/{src/Example.hs → examples/success-standard/src/ListOps.hs} +0 -0
- data/tracks/haskell/exercises/luhn/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/luhn/{src/Example.hs → examples/success-standard/src/Luhn.hs} +0 -0
- data/tracks/haskell/exercises/matrix/examples/success-standard/package.yaml +17 -0
- data/tracks/haskell/exercises/matrix/{src/Example.hs → examples/success-standard/src/Matrix.hs} +0 -0
- data/tracks/haskell/exercises/meetup/examples/success-standard/package.yaml +17 -0
- data/tracks/haskell/exercises/meetup/{src/Example.hs → examples/success-standard/src/Meetup.hs} +0 -0
- data/tracks/haskell/exercises/minesweeper/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/minesweeper/{src/Example.hs → examples/success-standard/src/Minesweeper.hs} +0 -0
- data/tracks/haskell/exercises/nth-prime/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/nth-prime/{src/Example.hs → examples/success-standard/src/Prime.hs} +0 -0
- data/tracks/haskell/exercises/nucleotide-count/examples/success-standard/package.yaml +17 -0
- data/tracks/haskell/exercises/nucleotide-count/{src/Example.hs → examples/success-standard/src/DNA.hs} +0 -0
- data/tracks/haskell/exercises/ocr-numbers/examples/success-standard/package.yaml +19 -0
- data/tracks/haskell/exercises/ocr-numbers/{src/Example.hs → examples/success-standard/src/OCR.hs} +0 -0
- data/tracks/haskell/exercises/octal/examples/success-standard/package.yaml +17 -0
- data/tracks/haskell/exercises/octal/{src/Example.hs → examples/success-standard/src/Octal.hs} +0 -0
- data/tracks/haskell/exercises/palindrome-products/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/palindrome-products/{src/Example.hs → examples/success-standard/src/Palindromes.hs} +0 -0
- data/tracks/haskell/exercises/parallel-letter-frequency/examples/success-standard/package.yaml +20 -0
- data/tracks/haskell/exercises/parallel-letter-frequency/{src/Example.hs → examples/success-standard/src/Frequency.hs} +0 -0
- data/tracks/haskell/exercises/pascals-triangle/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/pascals-triangle/{src/Example.hs → examples/success-standard/src/Triangle.hs} +0 -0
- data/tracks/haskell/exercises/phone-number/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/phone-number/{src/Example.hs → examples/success-standard/src/Phone.hs} +0 -0
- data/tracks/haskell/exercises/pig-latin/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/pig-latin/{src/Example.hs → examples/success-standard/src/PigLatin.hs} +0 -0
- data/tracks/haskell/exercises/pig-latin/test/Tests.hs +2 -1
- data/tracks/haskell/exercises/pov/examples/success-standard/package.yaml +17 -0
- data/tracks/haskell/exercises/pov/{src/Example.hs → examples/success-standard/src/POV.hs} +0 -0
- data/tracks/haskell/exercises/pov/test/Tests.hs +34 -8
- data/tracks/haskell/exercises/prime-factors/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/prime-factors/{src/Example.hs → examples/success-standard/src/PrimeFactors.hs} +0 -0
- data/tracks/haskell/exercises/pythagorean-triplet/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/pythagorean-triplet/{src/Example.hs → examples/success-standard/src/Triplet.hs} +0 -0
- data/tracks/haskell/exercises/queen-attack/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/queen-attack/{src/Example.hs → examples/success-standard/src/Queens.hs} +0 -0
- data/tracks/haskell/exercises/raindrops/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/raindrops/{src/Example.hs → examples/success-standard/src/Raindrops.hs} +0 -0
- data/tracks/haskell/exercises/rna-transcription/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/rna-transcription/{src/Example.hs → examples/success-standard/src/DNA.hs} +0 -0
- data/tracks/haskell/exercises/robot-name/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/robot-name/{src/Example.hs → examples/success-standard/src/Robot.hs} +0 -0
- data/tracks/haskell/exercises/robot-simulator/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/robot-simulator/{src/Example.hs → examples/success-standard/src/Robot.hs} +0 -0
- data/tracks/haskell/exercises/roman-numerals/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/roman-numerals/{src/Example.hs → examples/success-standard/src/Roman.hs} +0 -0
- data/tracks/haskell/exercises/saddle-points/examples/success-standard/package.yaml +19 -0
- data/tracks/haskell/exercises/saddle-points/{src/Example.hs → examples/success-standard/src/Matrix.hs} +0 -0
- data/tracks/haskell/exercises/say/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/say/{src/Example.hs → examples/success-standard/src/Say.hs} +0 -0
- data/tracks/haskell/exercises/say/test/Tests.hs +4 -2
- data/tracks/haskell/exercises/scrabble-score/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/scrabble-score/{src/Example.hs → examples/success-standard/src/Scrabble.hs} +0 -0
- data/tracks/haskell/exercises/secret-handshake/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/secret-handshake/{src/Example.hs → examples/success-standard/src/SecretHandshake.hs} +0 -0
- data/tracks/haskell/exercises/series/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/series/{src/Example.hs → examples/success-standard/src/Series.hs} +0 -0
- data/tracks/haskell/exercises/sgf-parsing/examples/success-standard/package.yaml +20 -0
- data/tracks/haskell/exercises/sgf-parsing/{src/Example.hs → examples/success-standard/src/Sgf.hs} +0 -0
- data/tracks/haskell/exercises/sieve/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/sieve/{src/Example.hs → examples/success-standard/src/Sieve.hs} +0 -0
- data/tracks/haskell/exercises/simple-cipher/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/simple-cipher/{src/Example.hs → examples/success-standard/src/Cipher.hs} +0 -0
- data/tracks/haskell/exercises/simple-linked-list/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/simple-linked-list/{src/Example.hs → examples/success-standard/src/LinkedList.hs} +0 -0
- data/tracks/haskell/exercises/space-age/examples/success-double/package.yaml +0 -3
- data/tracks/haskell/exercises/space-age/examples/success-double/{SpaceAge.hs → src/SpaceAge.hs} +0 -0
- data/tracks/haskell/exercises/space-age/examples/success-rational/package.yaml +0 -3
- data/tracks/haskell/exercises/space-age/examples/success-rational/{SpaceAge.hs → src/SpaceAge.hs} +0 -0
- data/tracks/haskell/exercises/strain/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/strain/{src/Example.hs → examples/success-standard/src/Strain.hs} +0 -0
- data/tracks/haskell/exercises/sublist/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/sublist/{src/Example.hs → examples/success-standard/src/Sublist.hs} +0 -0
- data/tracks/haskell/exercises/sum-of-multiples/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/sum-of-multiples/{src/Example.hs → examples/success-standard/src/SumOfMultiples.hs} +0 -0
- data/tracks/haskell/exercises/triangle/examples/success-standard/package.yaml +18 -0
- data/tracks/haskell/exercises/triangle/{src/Example.hs → examples/success-standard/src/Triangle.hs} +0 -0
- data/tracks/haskell/exercises/trinary/examples/success-standard/package.yaml +17 -0
- data/tracks/haskell/exercises/trinary/{src/Example.hs → examples/success-standard/src/Trinary.hs} +0 -0
- data/tracks/haskell/exercises/word-count/examples/success-newtype/package.yaml +0 -2
- data/tracks/haskell/exercises/word-count/examples/success-newtype/{WordCount.hs → src/WordCount.hs} +0 -0
- data/tracks/haskell/exercises/word-count/examples/success-simple/package.yaml +0 -2
- data/tracks/haskell/exercises/word-count/examples/success-simple/{WordCount.hs → src/WordCount.hs} +0 -0
- data/tracks/haskell/exercises/wordy/examples/success-standard/package.yaml +19 -0
- data/tracks/haskell/exercises/wordy/{src/Example.hs → examples/success-standard/src/WordProblem.hs} +0 -0
- data/tracks/haskell/exercises/zebra-puzzle/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/zebra-puzzle/{src/Example.hs → examples/success-standard/src/ZebraPuzzle.hs} +0 -0
- data/tracks/haskell/exercises/zipper/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/zipper/{src/Example.hs → examples/success-standard/src/Zipper.hs} +0 -0
- data/tracks/java/config.json +7 -1
- data/tracks/java/exercises/difference-of-squares/build.gradle +17 -0
- data/tracks/java/exercises/difference-of-squares/src/example/java/.keep +0 -0
- data/tracks/java/exercises/difference-of-squares/src/example/java/Difference.java +20 -0
- data/tracks/java/exercises/difference-of-squares/src/main/java/.keep +0 -0
- data/tracks/java/exercises/difference-of-squares/src/main/java/Difference.java +5 -0
- data/tracks/java/exercises/difference-of-squares/src/test/java/DifferenceTest.java +87 -0
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/kotlin/docs/TESTS.md +97 -13
- data/tracks/ruby/exercises/alphametics/.version +1 -1
- data/tracks/ruby/exercises/alphametics/alphametics_test.rb +55 -45
- data/tracks/ruby/exercises/alphametics/example.rb +100 -63
- data/tracks/ruby/exercises/alphametics/example.tt +7 -6
- data/tracks/ruby/lib/alphametics_cases.rb +49 -13
- data/tracks/ruby/lib/generator.rb +2 -1
- data/tracks/rust/docs/LEARNING.md +1 -0
- data/tracks/rust/exercises/acronym/tests/acronym.rs +6 -0
- metadata +164 -80
data/tracks/haskell/exercises/forth/{src/Example.hs → examples/success-standard/src/Forth.hs}
RENAMED
@@ -3,7 +3,7 @@ module Forth
|
|
3
3
|
( ForthError(..)
|
4
4
|
, ForthState
|
5
5
|
, evalText
|
6
|
-
,
|
6
|
+
, toList
|
7
7
|
, empty
|
8
8
|
) where
|
9
9
|
|
@@ -147,5 +147,5 @@ stepWord (User xs) = mapCode (xs ++)
|
|
147
147
|
evalText :: Text -> ForthState -> Either ForthError ForthState
|
148
148
|
evalText = eval . parseText
|
149
149
|
|
150
|
-
|
151
|
-
|
150
|
+
toList :: ForthState -> [Int]
|
151
|
+
toList = reverse . forthStack
|
@@ -4,7 +4,7 @@ module Forth
|
|
4
4
|
( ForthError(..)
|
5
5
|
, ForthState
|
6
6
|
, evalText
|
7
|
-
,
|
7
|
+
, toList
|
8
8
|
, empty
|
9
9
|
) where
|
10
10
|
|
@@ -23,5 +23,5 @@ empty = undefined
|
|
23
23
|
evalText :: Text -> ForthState -> Either ForthError ForthState
|
24
24
|
evalText = undefined
|
25
25
|
|
26
|
-
|
27
|
-
|
26
|
+
toList :: ForthState -> [Int]
|
27
|
+
toList = undefined
|
@@ -4,7 +4,7 @@ import Control.Monad (foldM)
|
|
4
4
|
import Test.Hspec (Spec, describe, it, shouldBe)
|
5
5
|
import Test.Hspec.Runner (configFastFail, defaultConfig, hspecWith)
|
6
6
|
|
7
|
-
import Forth (ForthError(..), empty, evalText,
|
7
|
+
import Forth (ForthError(..), empty, evalText, toList)
|
8
8
|
|
9
9
|
main :: IO ()
|
10
10
|
main = hspecWith defaultConfig {configFastFail = True} specs
|
@@ -12,67 +12,122 @@ main = hspecWith defaultConfig {configFastFail = True} specs
|
|
12
12
|
specs :: Spec
|
13
13
|
specs = describe "forth" $ do
|
14
14
|
|
15
|
-
--
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
15
|
+
-- Test cases adapted from `exercism/x-common/forth` on 2016-11-06.
|
16
|
+
|
17
|
+
let runTexts = fmap toList . foldM (flip evalText) empty
|
18
|
+
|
19
|
+
describe "parsing and numbers" $ do
|
20
|
+
it "empty input results in empty stack" $
|
21
|
+
toList empty `shouldBe` []
|
22
|
+
|
23
|
+
it "numbers just get pushed onto the stack" $
|
24
|
+
runTexts ["1 2 3 4 5"] `shouldBe` Right [1, 2, 3, 4, 5]
|
25
|
+
|
26
|
+
it "all non-word characters are separators" $
|
27
|
+
runTexts ["1\NUL2\SOH3\n4\r5 6\t7"] `shouldBe` Right [1, 2, 3, 4, 5, 6, 7]
|
28
|
+
|
29
|
+
describe "addition" $ do
|
30
|
+
it "can add two numbers" $
|
31
|
+
runTexts ["1 2 +"] `shouldBe` Right [3]
|
32
|
+
it "errors if there is nothing on the stack" $
|
33
|
+
runTexts ["+"] `shouldBe` Left StackUnderflow
|
34
|
+
it "errors if there is only one value on the stack" $
|
35
|
+
runTexts ["1 +"] `shouldBe` Left StackUnderflow
|
36
|
+
|
37
|
+
describe "subtraction" $ do
|
38
|
+
it "can subtract two numbers" $
|
39
|
+
runTexts ["3 4 -"] `shouldBe` Right [-1]
|
40
|
+
it "errors if there is nothing on the stack" $
|
41
|
+
runTexts ["-"] `shouldBe` Left StackUnderflow
|
42
|
+
it "errors if there is only one value on the stack" $
|
43
|
+
runTexts ["1 -"] `shouldBe` Left StackUnderflow
|
44
|
+
|
45
|
+
describe "multiplication" $ do
|
46
|
+
it "can multiply two numbers" $
|
47
|
+
runTexts ["2 4 *"] `shouldBe` Right [8]
|
48
|
+
it "errors if there is nothing on the stack" $
|
49
|
+
runTexts ["*"] `shouldBe` Left StackUnderflow
|
50
|
+
it "errors if there is only one value on the stack" $
|
51
|
+
runTexts ["1 *"] `shouldBe` Left StackUnderflow
|
52
|
+
|
53
|
+
describe "division" $ do
|
54
|
+
it "can divide two numbers" $
|
55
|
+
runTexts ["12 3 /"] `shouldBe` Right [4]
|
56
|
+
it "performs integer division" $
|
57
|
+
runTexts ["8 3 /"] `shouldBe` Right [2]
|
58
|
+
it "errors if dividing by zero" $
|
59
|
+
runTexts ["4 0 /"] `shouldBe` Left DivisionByZero
|
60
|
+
it "errors if there is nothing on the stack" $
|
61
|
+
runTexts ["/"] `shouldBe` Left StackUnderflow
|
62
|
+
it "errors if there is only one value on the stack" $
|
63
|
+
runTexts ["1 /"] `shouldBe` Left StackUnderflow
|
64
|
+
|
65
|
+
describe "combined arithmetic" $ do
|
66
|
+
it "addition and subtraction" $
|
67
|
+
runTexts ["1 2 + 4 -"] `shouldBe` Right [-1]
|
68
|
+
|
69
|
+
it "multiplication and division" $
|
70
|
+
runTexts ["2 4 * 3 /"] `shouldBe` Right [2]
|
71
|
+
|
72
|
+
describe "dup" $ do
|
73
|
+
it "copies the top value on the stack" $
|
74
|
+
runTexts ["1 DUP" ] `shouldBe` Right [1, 1]
|
75
|
+
it "is case-insensitive" $
|
76
|
+
runTexts ["1 2 Dup"] `shouldBe` Right [1, 2, 2]
|
77
|
+
it "errors if there is nothing on the stack" $
|
78
|
+
runTexts ["dup" ] `shouldBe` Left StackUnderflow
|
79
|
+
|
80
|
+
describe "drop" $ do
|
81
|
+
it "removes the top value on the stack if it is the only one" $
|
82
|
+
runTexts ["1 drop" ] `shouldBe` Right []
|
83
|
+
it "removes the top value on the stack if it is not the only one" $
|
84
|
+
runTexts ["1 2 drop"] `shouldBe` Right [1]
|
85
|
+
it "errors if there is nothing on the stack" $
|
86
|
+
runTexts ["drop" ] `shouldBe` Left StackUnderflow
|
87
|
+
|
88
|
+
describe "swap" $ do
|
89
|
+
it "swaps the top two values on the stack if they are the only ones" $
|
90
|
+
runTexts ["1 2 swap" ] `shouldBe` Right [2, 1]
|
91
|
+
it "swaps the top two values on the stack if they are not the only ones" $
|
92
|
+
runTexts ["1 2 3 swap"] `shouldBe` Right [1, 3, 2]
|
93
|
+
it "errors if there is nothing on the stack" $
|
94
|
+
runTexts ["swap" ] `shouldBe` Left StackUnderflow
|
95
|
+
it "errors if there is only one value on the stack" $
|
96
|
+
runTexts ["1 swap" ] `shouldBe` Left StackUnderflow
|
97
|
+
|
98
|
+
describe "over" $ do
|
99
|
+
it "copies the second element if there are only two" $
|
100
|
+
runTexts ["1 2 over" ] `shouldBe` Right [1, 2, 1]
|
101
|
+
it "copies the second element if there are more than two" $
|
102
|
+
runTexts ["1 2 3 over"] `shouldBe` Right [1, 2, 3, 2]
|
103
|
+
it "errors if there is nothing on the stack" $
|
104
|
+
runTexts ["over" ] `shouldBe` Left StackUnderflow
|
105
|
+
it "errors if there is only one value on the stack" $
|
106
|
+
runTexts ["1 over" ] `shouldBe` Left StackUnderflow
|
107
|
+
|
108
|
+
describe "user-defined words" $ do
|
109
|
+
it "can consist of built-in words" $
|
110
|
+
runTexts [ ": dup-twice dup dup ;"
|
111
|
+
, "1 dup-twice" ] `shouldBe` Right [1, 1, 1]
|
112
|
+
|
113
|
+
it "execute in the right order" $
|
114
|
+
runTexts [ ": countup 1 2 3 ;"
|
115
|
+
, "countup" ] `shouldBe` Right [1, 2, 3]
|
116
|
+
|
117
|
+
it "can override other user-defined words" $
|
118
|
+
runTexts [ ": foo dup ;"
|
119
|
+
, ": foo dup dup ;"
|
120
|
+
, "1 foo" ] `shouldBe` Right [1, 1, 1]
|
121
|
+
|
122
|
+
it "can override built-in words" $
|
123
|
+
runTexts [ ": swap dup ;"
|
124
|
+
, "1 swap" ] `shouldBe` Right [1, 1]
|
125
|
+
|
126
|
+
it "can consist of arbitrary characters such as Unicode characters" $
|
127
|
+
runTexts [": € 220371 ; €"] `shouldBe` Right [220371]
|
128
|
+
|
129
|
+
it "cannot redefine numbers" $
|
130
|
+
runTexts [": 1 2 ;"] `shouldBe` Left InvalidWord
|
131
|
+
|
132
|
+
it "errors if executing a non-existent word" $
|
133
|
+
runTexts ["1 foo"] `shouldBe` Left (UnknownWord "foo")
|
File without changes
|
@@ -0,0 +1,20 @@
|
|
1
|
+
name: go-counting
|
2
|
+
|
3
|
+
dependencies:
|
4
|
+
- base
|
5
|
+
- containers
|
6
|
+
|
7
|
+
library:
|
8
|
+
exposed-modules: Counting
|
9
|
+
source-dirs: src
|
10
|
+
dependencies:
|
11
|
+
- array
|
12
|
+
|
13
|
+
tests:
|
14
|
+
test:
|
15
|
+
main: Tests.hs
|
16
|
+
source-dirs: test
|
17
|
+
dependencies:
|
18
|
+
- go-counting
|
19
|
+
- hspec
|
20
|
+
- multiset
|
File without changes
|
File without changes
|
data/tracks/haskell/exercises/grains/{src/Example.hs → examples/success-standard/src/Grains.hs}
RENAMED
File without changes
|
@@ -24,8 +24,7 @@ specs = describe "grains" $ do
|
|
24
24
|
where
|
25
25
|
assertion = fromIntegral total `shouldBe` expected
|
26
26
|
|
27
|
-
--
|
28
|
-
-- for the test cases in `exercism/x-common`.
|
27
|
+
-- Test cases adapted from `exercism/x-common/grains` on 2016-11-06.
|
29
28
|
|
30
29
|
squareCases :: [(String, Integer, Maybe Integer)]
|
31
30
|
squareCases =
|
data/tracks/haskell/exercises/hamming/{src/Example.hs → examples/success-standard/src/Hamming.hs}
RENAMED
File without changes
|
File without changes
|
data/tracks/haskell/exercises/house/{src/Example.hs → examples/success-standard/src/House.hs}
RENAMED
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
name: kindergarten-garden
|
2
|
+
|
3
|
+
dependencies:
|
4
|
+
- base
|
5
|
+
|
6
|
+
library:
|
7
|
+
exposed-modules: Garden
|
8
|
+
source-dirs: src
|
9
|
+
dependencies:
|
10
|
+
- containers
|
11
|
+
- split
|
12
|
+
|
13
|
+
tests:
|
14
|
+
test:
|
15
|
+
main: Tests.hs
|
16
|
+
source-dirs: test
|
17
|
+
dependencies:
|
18
|
+
- kindergarten-garden
|
19
|
+
- hspec
|
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
name: largest-series-product
|
2
|
+
|
3
|
+
dependencies:
|
4
|
+
- base
|
5
|
+
|
6
|
+
library:
|
7
|
+
exposed-modules: Series
|
8
|
+
source-dirs: src
|
9
|
+
dependencies:
|
10
|
+
- safe
|
11
|
+
|
12
|
+
tests:
|
13
|
+
test:
|
14
|
+
main: Tests.hs
|
15
|
+
source-dirs: test
|
16
|
+
dependencies:
|
17
|
+
- largest-series-product
|
18
|
+
- hspec
|
File without changes
|