trackler 2.2.1.22 → 2.2.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/bash/exercises/bob/bob_test.sh +8 -6
- data/tracks/bash/exercises/bob/example.sh +30 -6
- data/tracks/coffeescript/docs/SNIPPET.txt +4 -0
- data/tracks/csharp/generators/Exercises/Allergies.cs +0 -2
- data/tracks/csharp/generators/Exercises/Anagram.cs +0 -2
- data/tracks/csharp/generators/Exercises/BinarySearch.cs +0 -2
- data/tracks/csharp/generators/Exercises/ComplexNumbers.cs +0 -2
- data/tracks/csharp/generators/Exercises/RailFenceCipher.cs +1 -2
- data/tracks/csharp/generators/Exercises/SpaceAge.cs +0 -3
- data/tracks/csharp/generators/Input/CanonicalDataCase.cs +37 -2
- data/tracks/dart/docs/SNIPPET.txt +5 -0
- data/tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js +5 -1
- data/tracks/elm/docs/SNIPPET.txt +10 -0
- data/tracks/fortran/docs/SNIPPET.txt +9 -0
- data/tracks/fsharp/.gitignore +2 -2
- data/tracks/fsharp/.travis.yml +18 -5
- data/tracks/fsharp/build.cake +92 -0
- data/tracks/fsharp/build.ps1 +81 -0
- data/tracks/fsharp/build.sh +56 -33
- data/tracks/fsharp/config.json +14 -14
- data/tracks/fsharp/docs/INSTALLATION.md +14 -45
- data/tracks/fsharp/docs/TESTS.md +12 -25
- data/tracks/fsharp/exercises/Exercises.sln +648 -0
- data/tracks/fsharp/exercises/accumulate/Accumulate.fs +3 -0
- data/tracks/fsharp/exercises/accumulate/Accumulate.fsproj +22 -0
- data/tracks/fsharp/exercises/accumulate/AccumulateTest.fs +18 -22
- data/tracks/fsharp/exercises/accumulate/HINTS.md +1 -0
- data/tracks/fsharp/exercises/accumulate/Program.fs +1 -0
- data/tracks/fsharp/exercises/acronym/Acronym.fs +3 -0
- data/tracks/fsharp/exercises/acronym/Acronym.fsproj +22 -0
- data/tracks/fsharp/exercises/acronym/AcronymTest.fs +18 -24
- data/tracks/fsharp/exercises/acronym/Program.fs +1 -0
- data/tracks/fsharp/exercises/all-your-base/AllYourBase.fs +3 -0
- data/tracks/fsharp/exercises/all-your-base/AllYourBase.fsproj +22 -0
- data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +45 -64
- data/tracks/fsharp/exercises/all-your-base/Program.fs +1 -0
- data/tracks/fsharp/exercises/allergies/Allergies.fs +9 -0
- data/tracks/fsharp/exercises/allergies/Allergies.fsproj +22 -0
- data/tracks/fsharp/exercises/allergies/AllergiesTest.fs +47 -51
- data/tracks/fsharp/exercises/allergies/Program.fs +1 -0
- data/tracks/fsharp/exercises/alphametics/Alphametics.fs +3 -0
- data/tracks/fsharp/exercises/alphametics/Alphametics.fsproj +22 -0
- data/tracks/fsharp/exercises/alphametics/AlphameticsTest.fs +19 -25
- data/tracks/fsharp/exercises/alphametics/Example.fs +13 -13
- data/tracks/fsharp/exercises/alphametics/Program.fs +1 -0
- data/tracks/fsharp/exercises/anagram/Anagram.fs +3 -0
- data/tracks/fsharp/exercises/anagram/Anagram.fsproj +22 -0
- data/tracks/fsharp/exercises/anagram/AnagramTest.fs +22 -33
- data/tracks/fsharp/exercises/anagram/Program.fs +1 -0
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fs +3 -0
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fsproj +22 -0
- data/tracks/fsharp/exercises/atbash-cipher/{AtbashTest.fs → AtbashCipherTest.fs} +18 -24
- data/tracks/fsharp/exercises/atbash-cipher/Program.fs +1 -0
- data/tracks/fsharp/exercises/bank-account/BankAccount.fs +11 -0
- data/tracks/fsharp/exercises/bank-account/BankAccount.fsproj +22 -0
- data/tracks/fsharp/exercises/bank-account/BankAccountTest.fs +16 -19
- data/tracks/fsharp/exercises/bank-account/Program.fs +1 -0
- data/tracks/fsharp/exercises/beer-song/BeerSong.fs +7 -0
- data/tracks/fsharp/exercises/beer-song/BeerSong.fsproj +22 -0
- data/tracks/fsharp/exercises/beer-song/BeerSongTest.fs +17 -22
- data/tracks/fsharp/exercises/beer-song/Program.fs +1 -0
- data/tracks/fsharp/exercises/binary-search/BinarySearch.fs +3 -0
- data/tracks/fsharp/exercises/binary-search/BinarySearch.fsproj +22 -0
- data/tracks/fsharp/exercises/binary-search/BinarySearchTest.fs +21 -28
- data/tracks/fsharp/exercises/binary-search/Program.fs +1 -0
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fs +15 -0
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fsproj +22 -0
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTreeTest.fs +31 -38
- data/tracks/fsharp/exercises/binary-search-tree/Program.fs +1 -0
- data/tracks/fsharp/exercises/bob/Bob.fs +3 -0
- data/tracks/fsharp/exercises/bob/Bob.fsproj +22 -0
- data/tracks/fsharp/exercises/bob/BobTest.fs +33 -46
- data/tracks/fsharp/exercises/bob/Program.fs +1 -0
- data/tracks/fsharp/exercises/book-store/BookStore.fs +3 -0
- data/tracks/fsharp/exercises/book-store/BookStore.fsproj +22 -0
- data/tracks/fsharp/exercises/book-store/BookStoreTest.fs +27 -37
- data/tracks/fsharp/exercises/book-store/Program.fs +1 -0
- data/tracks/fsharp/exercises/bowling/Bowling.fs +7 -0
- data/tracks/fsharp/exercises/bowling/Bowling.fsproj +22 -0
- data/tracks/fsharp/exercises/bowling/BowlingTest.fs +75 -97
- data/tracks/fsharp/exercises/bowling/Example.fs +1 -1
- data/tracks/fsharp/exercises/bowling/Program.fs +1 -0
- data/tracks/fsharp/exercises/bracket-push/BracketPush.fs +3 -0
- data/tracks/fsharp/exercises/bracket-push/BracketPush.fsproj +22 -0
- data/tracks/fsharp/exercises/bracket-push/BracketPushTest.fs +27 -37
- data/tracks/fsharp/exercises/bracket-push/Program.fs +1 -0
- data/tracks/fsharp/exercises/change/Change.fs +3 -0
- data/tracks/fsharp/exercises/change/Change.fsproj +22 -0
- data/tracks/fsharp/exercises/change/ChangeTest.fs +19 -25
- data/tracks/fsharp/exercises/change/Program.fs +1 -0
- data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fs +11 -0
- data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fsproj +22 -0
- data/tracks/fsharp/exercises/circular-buffer/CircularBufferTest.fs +36 -42
- data/tracks/fsharp/exercises/circular-buffer/Program.fs +1 -0
- data/tracks/fsharp/exercises/clock/Clock.fs +9 -0
- data/tracks/fsharp/exercises/clock/Clock.fsproj +22 -0
- data/tracks/fsharp/exercises/clock/ClockTest.fs +34 -48
- data/tracks/fsharp/exercises/clock/Program.fs +1 -0
- data/tracks/fsharp/exercises/connect/Connect.fs +3 -0
- data/tracks/fsharp/exercises/connect/Connect.fsproj +22 -0
- data/tracks/fsharp/exercises/connect/ConnectTest.fs +19 -25
- data/tracks/fsharp/exercises/connect/Program.fs +1 -0
- data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fs +44 -0
- data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fsproj +22 -0
- data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +28 -39
- data/tracks/fsharp/exercises/crypto-square/Program.fs +1 -0
- data/tracks/fsharp/exercises/custom-set/CustomSet.fs +29 -0
- data/tracks/fsharp/exercises/custom-set/CustomSet.fsproj +22 -0
- data/tracks/fsharp/exercises/custom-set/CustomSetTest.fs +77 -119
- data/tracks/fsharp/exercises/custom-set/Program.fs +1 -0
- data/tracks/fsharp/exercises/diamond/Diamond.fs +3 -0
- data/tracks/fsharp/exercises/diamond/Diamond.fsproj +22 -0
- data/tracks/fsharp/exercises/diamond/DiamondTest.fs +31 -27
- data/tracks/fsharp/exercises/diamond/Program.fs +1 -0
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fs +7 -0
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fsproj +22 -0
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquaresTest.fs +21 -28
- data/tracks/fsharp/exercises/difference-of-squares/Program.fs +1 -0
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fs +7 -0
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fsproj +22 -0
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellmanTest.fs +16 -19
- data/tracks/fsharp/exercises/diffie-hellman/Program.fs +1 -0
- data/tracks/fsharp/exercises/dominoes/Dominoes.fs +3 -0
- data/tracks/fsharp/exercises/dominoes/Dominoes.fsproj +22 -0
- data/tracks/fsharp/exercises/dominoes/DominoesTest.fs +27 -37
- data/tracks/fsharp/exercises/dominoes/Program.fs +1 -0
- data/tracks/fsharp/exercises/dot-dsl/DotDsl.fs +15 -0
- data/tracks/fsharp/exercises/dot-dsl/DotDsl.fsproj +22 -0
- data/tracks/fsharp/exercises/dot-dsl/DotDslTest.fs +27 -31
- data/tracks/fsharp/exercises/dot-dsl/Program.fs +1 -0
- data/tracks/fsharp/exercises/error-handling/ErrorHandling.fs +11 -0
- data/tracks/fsharp/exercises/error-handling/ErrorHandling.fsproj +22 -0
- data/tracks/fsharp/exercises/error-handling/ErrorHandlingTest.fs +20 -25
- data/tracks/fsharp/exercises/error-handling/Program.fs +1 -0
- data/tracks/fsharp/exercises/etl/Etl.fs +3 -0
- data/tracks/fsharp/exercises/etl/Etl.fsproj +22 -0
- data/tracks/fsharp/exercises/etl/{ETLTest.fs → EtlTest.fs} +11 -13
- data/tracks/fsharp/exercises/etl/Program.fs +1 -0
- data/tracks/fsharp/exercises/food-chain/FoodChain.fs +5 -0
- data/tracks/fsharp/exercises/food-chain/FoodChain.fsproj +22 -0
- data/tracks/fsharp/exercises/food-chain/FoodChainTest.fs +13 -16
- data/tracks/fsharp/exercises/food-chain/Program.fs +1 -0
- data/tracks/fsharp/exercises/forth/Forth.fs +3 -0
- data/tracks/fsharp/exercises/forth/Forth.fsproj +22 -0
- data/tracks/fsharp/exercises/forth/ForthTest.fs +44 -57
- data/tracks/fsharp/exercises/forth/Program.fs +1 -0
- data/tracks/fsharp/exercises/gigasecond/Gigasecond.fs +3 -0
- data/tracks/fsharp/exercises/gigasecond/Gigasecond.fsproj +22 -0
- data/tracks/fsharp/exercises/gigasecond/GigasecondTest.fs +9 -10
- data/tracks/fsharp/exercises/gigasecond/Program.fs +1 -0
- data/tracks/fsharp/exercises/go-counting/GoCounting.fs +3 -0
- data/tracks/fsharp/exercises/go-counting/GoCounting.fsproj +22 -0
- data/tracks/fsharp/exercises/go-counting/GoCountingTest.fs +23 -30
- data/tracks/fsharp/exercises/go-counting/Program.fs +1 -0
- data/tracks/fsharp/exercises/grade-school/Example.fs +1 -1
- data/tracks/fsharp/exercises/grade-school/GradeSchool.fs +9 -0
- data/tracks/fsharp/exercises/grade-school/GradeSchool.fsproj +22 -0
- data/tracks/fsharp/exercises/grade-school/GradeSchoolTest.fs +17 -22
- data/tracks/fsharp/exercises/grade-school/Program.fs +1 -0
- data/tracks/fsharp/exercises/grains/Grains.fs +6 -0
- data/tracks/fsharp/exercises/grains/Grains.fsproj +22 -0
- data/tracks/fsharp/exercises/grains/GrainsTest.fs +19 -25
- data/tracks/fsharp/exercises/grains/Program.fs +1 -0
- data/tracks/fsharp/exercises/grep/Grep.fs +3 -0
- data/tracks/fsharp/exercises/grep/Grep.fsproj +22 -0
- data/tracks/fsharp/exercises/grep/GrepTest.fs +332 -348
- data/tracks/fsharp/exercises/grep/Program.fs +1 -0
- data/tracks/fsharp/exercises/hamming/Hamming.fs +3 -0
- data/tracks/fsharp/exercises/hamming/Hamming.fsproj +22 -0
- data/tracks/fsharp/exercises/hamming/HammingTest.fs +15 -19
- data/tracks/fsharp/exercises/hamming/Program.fs +1 -0
- data/tracks/fsharp/exercises/hangman/Hangman.fs +3 -0
- data/tracks/fsharp/exercises/hangman/Hangman.fsproj +22 -0
- data/tracks/fsharp/exercises/hangman/HangmanTest.fs +30 -34
- data/tracks/fsharp/exercises/hangman/Program.fs +1 -0
- data/tracks/fsharp/exercises/hello-world/HelloWorld.fs +3 -0
- data/tracks/fsharp/exercises/hello-world/HelloWorld.fsproj +22 -0
- data/tracks/fsharp/exercises/hello-world/HelloWorldTest.fs +5 -4
- data/tracks/fsharp/exercises/hello-world/Program.fs +1 -0
- data/tracks/fsharp/exercises/house/House.fs +3 -0
- data/tracks/fsharp/exercises/house/House.fsproj +22 -0
- data/tracks/fsharp/exercises/house/HouseTest.fs +5 -4
- data/tracks/fsharp/exercises/house/Program.fs +1 -0
- data/tracks/fsharp/exercises/isogram/Isogram.fs +3 -0
- data/tracks/fsharp/exercises/isogram/Isogram.fsproj +22 -0
- data/tracks/fsharp/exercises/isogram/IsogramTest.fs +21 -28
- data/tracks/fsharp/exercises/isogram/Program.fs +1 -0
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fs +9 -0
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fsproj +22 -0
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGardenTest.fs +51 -0
- data/tracks/fsharp/exercises/kindergarten-garden/Program.fs +1 -0
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fs +3 -0
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fsproj +22 -0
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProductTest.fs +27 -22
- data/tracks/fsharp/exercises/largest-series-product/Program.fs +1 -0
- data/tracks/fsharp/exercises/leap/Leap.fs +3 -0
- data/tracks/fsharp/exercises/leap/Leap.fsproj +22 -0
- data/tracks/fsharp/exercises/leap/LeapTest.fs +11 -13
- data/tracks/fsharp/exercises/leap/Program.fs +1 -0
- data/tracks/fsharp/exercises/ledger/Ledger.fsproj +22 -0
- data/tracks/fsharp/exercises/ledger/LedgerTest.fs +23 -22
- data/tracks/fsharp/exercises/ledger/Program.fs +1 -0
- data/tracks/fsharp/exercises/lens-person/LensPerson.fs +1 -22
- data/tracks/fsharp/exercises/lens-person/LensPerson.fsproj +23 -0
- data/tracks/fsharp/exercises/lens-person/LensPersonTest.fs +11 -13
- data/tracks/fsharp/exercises/lens-person/Program.fs +1 -0
- data/tracks/fsharp/exercises/linked-list/LinkedList.fs +13 -0
- data/tracks/fsharp/exercises/linked-list/LinkedList.fsproj +22 -0
- data/tracks/fsharp/exercises/linked-list/LinkedListTest.fs +28 -33
- data/tracks/fsharp/exercises/linked-list/Program.fs +1 -0
- data/tracks/fsharp/exercises/list-ops/ListOps.fs +17 -0
- data/tracks/fsharp/exercises/list-ops/ListOps.fsproj +22 -0
- data/tracks/fsharp/exercises/list-ops/ListOpsTest.fs +51 -73
- data/tracks/fsharp/exercises/list-ops/Program.fs +1 -0
- data/tracks/fsharp/exercises/luhn/Luhn.fs +3 -0
- data/tracks/fsharp/exercises/luhn/Luhn.fsproj +22 -0
- data/tracks/fsharp/exercises/luhn/LuhnTest.fs +28 -39
- data/tracks/fsharp/exercises/luhn/Program.fs +1 -0
- data/tracks/fsharp/exercises/markdown/Markdown.fsproj +22 -0
- data/tracks/fsharp/exercises/markdown/MarkdownTest.fs +21 -20
- data/tracks/fsharp/exercises/markdown/Program.fs +1 -0
- data/tracks/fsharp/exercises/matrix/Matrix.fs +7 -0
- data/tracks/fsharp/exercises/matrix/Matrix.fsproj +22 -0
- data/tracks/fsharp/exercises/matrix/MatrixTest.fs +76 -48
- data/tracks/fsharp/exercises/matrix/Program.fs +1 -0
- data/tracks/fsharp/exercises/meetup/Meetup.fs +7 -0
- data/tracks/fsharp/exercises/meetup/Meetup.fsproj +22 -0
- data/tracks/fsharp/exercises/meetup/MeetupTest.fs +67 -60
- data/tracks/fsharp/exercises/meetup/Program.fs +1 -0
- data/tracks/fsharp/exercises/minesweeper/Minesweeper.fs +3 -0
- data/tracks/fsharp/exercises/minesweeper/Minesweeper.fsproj +22 -0
- data/tracks/fsharp/exercises/minesweeper/MinesweeperTest.fs +17 -22
- data/tracks/fsharp/exercises/minesweeper/Program.fs +1 -0
- data/tracks/fsharp/exercises/nth-prime/NthPrime.fs +3 -0
- data/tracks/fsharp/exercises/nth-prime/NthPrime.fsproj +22 -0
- data/tracks/fsharp/exercises/nth-prime/NthPrimeTest.fs +25 -34
- data/tracks/fsharp/exercises/nth-prime/Program.fs +1 -0
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fs +5 -0
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fsproj +22 -0
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCountTest.fs +17 -21
- data/tracks/fsharp/exercises/nucleotide-count/Program.fs +1 -0
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fs +3 -0
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fsproj +22 -0
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbersTest.fs +33 -46
- data/tracks/fsharp/exercises/ocr-numbers/Program.fs +1 -0
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fs +5 -0
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fsproj +22 -0
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProductsTest.fs +54 -0
- data/tracks/fsharp/exercises/palindrome-products/Program.fs +1 -0
- data/tracks/fsharp/exercises/pangram/Pangram.fs +3 -0
- data/tracks/fsharp/exercises/pangram/Pangram.fsproj +22 -0
- data/tracks/fsharp/exercises/pangram/PangramTest.fs +23 -31
- data/tracks/fsharp/exercises/pangram/Program.fs +1 -0
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fs +3 -0
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fsproj +22 -0
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequencyTest.fs +27 -35
- data/tracks/fsharp/exercises/parallel-letter-frequency/Program.fs +1 -0
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fs +3 -0
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fsproj +22 -0
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangleTest.fs +15 -19
- data/tracks/fsharp/exercises/pascals-triangle/Program.fs +1 -0
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fs +5 -0
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fsproj +22 -0
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbersTest.fs +18 -14
- data/tracks/fsharp/exercises/perfect-numbers/Program.fs +1 -0
- data/tracks/fsharp/exercises/phone-number/PhoneNumber.fs +3 -0
- data/tracks/fsharp/exercises/phone-number/PhoneNumber.fsproj +22 -0
- data/tracks/fsharp/exercises/phone-number/PhoneNumberTest.fs +23 -31
- data/tracks/fsharp/exercises/phone-number/Program.fs +1 -0
- data/tracks/fsharp/exercises/pig-latin/PigLatin.fs +3 -0
- data/tracks/fsharp/exercises/pig-latin/PigLatin.fsproj +22 -0
- data/tracks/fsharp/exercises/pig-latin/PigLatinTest.fs +39 -44
- data/tracks/fsharp/exercises/pig-latin/Program.fs +1 -0
- data/tracks/fsharp/exercises/poker/Poker.fs +3 -0
- data/tracks/fsharp/exercises/poker/Poker.fsproj +22 -0
- data/tracks/fsharp/exercises/poker/PokerTest.fs +40 -56
- data/tracks/fsharp/exercises/poker/Program.fs +1 -0
- data/tracks/fsharp/exercises/pov/Pov.fs +3 -0
- data/tracks/fsharp/exercises/pov/Pov.fsproj +22 -0
- data/tracks/fsharp/exercises/pov/PovTest.fs +23 -31
- data/tracks/fsharp/exercises/pov/Program.fs +1 -0
- data/tracks/fsharp/exercises/prime-factors/Example.fs +1 -1
- data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fs +3 -0
- data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fsproj +22 -0
- data/tracks/fsharp/exercises/prime-factors/PrimeFactorsTest.fs +22 -30
- data/tracks/fsharp/exercises/prime-factors/Program.fs +1 -0
- data/tracks/fsharp/exercises/protein-translation/Program.fs +1 -0
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fs +3 -0
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fsproj +22 -0
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslationTest.fs +41 -36
- data/tracks/fsharp/exercises/proverb/Program.fs +1 -0
- data/tracks/fsharp/exercises/proverb/Proverb.fs +5 -0
- data/tracks/fsharp/exercises/proverb/Proverb.fsproj +22 -0
- data/tracks/fsharp/exercises/proverb/ProverbTest.fs +11 -13
- data/tracks/fsharp/exercises/pythagorean-triplet/Program.fs +1 -0
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fs +7 -0
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fsproj +22 -0
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTripletTest.fs +19 -20
- data/tracks/fsharp/exercises/queen-attack/Program.fs +1 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttack.fs +3 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttack.fsproj +22 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +19 -25
- data/tracks/fsharp/exercises/rail-fence-cipher/Program.fs +1 -0
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fs +5 -0
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fsproj +22 -0
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipherTest.fs +15 -19
- data/tracks/fsharp/exercises/raindrops/Program.fs +1 -0
- data/tracks/fsharp/exercises/raindrops/Raindrops.fs +3 -0
- data/tracks/fsharp/exercises/raindrops/Raindrops.fsproj +22 -0
- data/tracks/fsharp/exercises/raindrops/RaindropsTest.fs +30 -24
- data/tracks/fsharp/exercises/react/Program.fs +1 -0
- data/tracks/fsharp/exercises/react/React.fs +3 -0
- data/tracks/fsharp/exercises/react/React.fsproj +22 -0
- data/tracks/fsharp/exercises/react/ReactTest.fs +26 -31
- data/tracks/fsharp/exercises/rectangles/Program.fs +1 -0
- data/tracks/fsharp/exercises/rectangles/Rectangles.fs +3 -0
- data/tracks/fsharp/exercises/rectangles/Rectangles.fsproj +22 -0
- data/tracks/fsharp/exercises/rectangles/RectanglesTest.fs +23 -31
- data/tracks/fsharp/exercises/rna-transcription/Program.fs +1 -0
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fs +3 -0
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fsproj +22 -0
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscriptionTest.fs +26 -0
- data/tracks/fsharp/exercises/robot-name/Program.fs +1 -0
- data/tracks/fsharp/exercises/robot-name/RobotName.fs +7 -0
- data/tracks/fsharp/exercises/robot-name/RobotName.fsproj +22 -0
- data/tracks/fsharp/exercises/robot-name/RobotNameTest.fs +12 -13
- data/tracks/fsharp/exercises/robot-simulator/Program.fs +1 -0
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fs +13 -0
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fsproj +22 -0
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulatorTest.fs +16 -20
- data/tracks/fsharp/exercises/roman-numerals/Program.fs +1 -0
- data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fs +3 -0
- data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fsproj +22 -0
- data/tracks/fsharp/exercises/roman-numerals/RomanNumeralsTest.fs +28 -0
- data/tracks/fsharp/exercises/run-length-encoding/Program.fs +1 -0
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fs +5 -0
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fsproj +22 -0
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncodingTest.fs +17 -22
- data/tracks/fsharp/exercises/saddle-points/Program.fs +1 -0
- data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fs +3 -0
- data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fsproj +22 -0
- data/tracks/fsharp/exercises/saddle-points/{SaddlePointTest.fs → SaddlePointsTest.fs} +13 -16
- data/tracks/fsharp/exercises/say/Program.fs +1 -0
- data/tracks/fsharp/exercises/say/Say.fs +3 -0
- data/tracks/fsharp/exercises/say/Say.fsproj +22 -0
- data/tracks/fsharp/exercises/say/SayTest.fs +35 -49
- data/tracks/fsharp/exercises/scale-generator/Program.fs +1 -0
- data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fs +3 -0
- data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fsproj +22 -0
- data/tracks/fsharp/exercises/scale-generator/ScaleGeneratorTest.fs +31 -43
- data/tracks/fsharp/exercises/scrabble-score/Program.fs +1 -0
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fs +3 -0
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fsproj +22 -0
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +18 -24
- data/tracks/fsharp/exercises/secret-handshake/Program.fs +1 -0
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fs +3 -0
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fsproj +22 -0
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshakeTest.fs +17 -22
- data/tracks/fsharp/exercises/series/Program.fs +1 -0
- data/tracks/fsharp/exercises/series/Series.fs +3 -0
- data/tracks/fsharp/exercises/series/Series.fsproj +22 -0
- data/tracks/fsharp/exercises/series/SeriesTest.fs +53 -55
- data/tracks/fsharp/exercises/sgf-parsing/Program.fs +1 -0
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fs +3 -0
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fsproj +22 -0
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsingTest.fs +27 -37
- data/tracks/fsharp/exercises/sieve/Program.fs +1 -0
- data/tracks/fsharp/exercises/sieve/Sieve.fs +3 -0
- data/tracks/fsharp/exercises/sieve/Sieve.fsproj +22 -0
- data/tracks/fsharp/exercises/sieve/SieveTest.fs +19 -21
- data/tracks/fsharp/exercises/simple-cipher/Program.fs +1 -0
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fs +7 -0
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fsproj +22 -0
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipherTest.fs +39 -54
- data/tracks/fsharp/exercises/simple-linked-list/Program.fs +1 -0
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fs +36 -0
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fsproj +22 -0
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedListTest.fs +36 -40
- data/tracks/fsharp/exercises/space-age/Program.fs +1 -0
- data/tracks/fsharp/exercises/space-age/SpaceAge.fs +5 -0
- data/tracks/fsharp/exercises/space-age/SpaceAge.fsproj +22 -0
- data/tracks/fsharp/exercises/space-age/SpaceAgeTest.fs +26 -32
- data/tracks/fsharp/exercises/strain/Program.fs +1 -0
- data/tracks/fsharp/exercises/strain/Strain.fs +5 -0
- data/tracks/fsharp/exercises/strain/Strain.fsproj +22 -0
- data/tracks/fsharp/exercises/strain/StrainTest.fs +28 -47
- data/tracks/fsharp/exercises/sublist/Program.fs +1 -0
- data/tracks/fsharp/exercises/sublist/Sublist.fs +5 -0
- data/tracks/fsharp/exercises/sublist/Sublist.fsproj +22 -0
- data/tracks/fsharp/exercises/sublist/SublistTest.fs +39 -55
- data/tracks/fsharp/exercises/sum-of-multiples/Program.fs +1 -0
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fs +3 -0
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fsproj +22 -0
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiplesTest.fs +15 -19
- data/tracks/fsharp/exercises/tournament/Program.fs +1 -0
- data/tracks/fsharp/exercises/tournament/Tournament.fs +3 -0
- data/tracks/fsharp/exercises/tournament/Tournament.fsproj +22 -0
- data/tracks/fsharp/exercises/tournament/TournamentTest.fs +9 -10
- data/tracks/fsharp/exercises/transpose/Program.fs +1 -0
- data/tracks/fsharp/exercises/transpose/Transpose.fs +3 -0
- data/tracks/fsharp/exercises/transpose/Transpose.fsproj +22 -0
- data/tracks/fsharp/exercises/transpose/TransposeTest.fs +25 -34
- data/tracks/fsharp/exercises/tree-building/Program.fs +1 -0
- data/tracks/fsharp/exercises/tree-building/TreeBuilding.fsproj +22 -0
- data/tracks/fsharp/exercises/tree-building/TreeBuildingTest.fs +84 -82
- data/tracks/fsharp/exercises/triangle/Program.fs +1 -0
- data/tracks/fsharp/exercises/triangle/Triangle.fs +8 -0
- data/tracks/fsharp/exercises/triangle/Triangle.fsproj +22 -0
- data/tracks/fsharp/exercises/triangle/TriangleTest.fs +31 -43
- data/tracks/fsharp/exercises/twelve-days/Program.fs +1 -0
- data/tracks/fsharp/exercises/twelve-days/TwelveDays.fs +7 -0
- data/tracks/fsharp/exercises/twelve-days/TwelveDays.fsproj +22 -0
- data/tracks/fsharp/exercises/twelve-days/TwelveDaysTest.fs +31 -43
- data/tracks/fsharp/exercises/two-bucket/Program.fs +1 -0
- data/tracks/fsharp/exercises/two-bucket/TwoBucket.fs +3 -0
- data/tracks/fsharp/exercises/two-bucket/TwoBucket.fsproj +22 -0
- data/tracks/fsharp/exercises/two-bucket/TwoBucketTest.fs +11 -13
- data/tracks/fsharp/exercises/two-fer/Program.fs +1 -0
- data/tracks/fsharp/exercises/two-fer/TwoFer.fs +3 -0
- data/tracks/fsharp/exercises/two-fer/TwoFer.fsproj +22 -0
- data/tracks/fsharp/exercises/two-fer/TwoFerTest.fs +9 -10
- data/tracks/fsharp/exercises/variable-length-quantity/Program.fs +1 -0
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fs +3 -0
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fsproj +22 -0
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantityTest.fs +42 -50
- data/tracks/fsharp/exercises/word-count/Program.fs +1 -0
- data/tracks/fsharp/exercises/word-count/WordCount.fs +3 -0
- data/tracks/fsharp/exercises/word-count/WordCount.fsproj +22 -0
- data/tracks/fsharp/exercises/word-count/WordCountTest.fs +27 -37
- data/tracks/fsharp/exercises/word-search/Program.fs +1 -0
- data/tracks/fsharp/exercises/word-search/WordSearch.fs +3 -0
- data/tracks/fsharp/exercises/word-search/WordSearch.fsproj +22 -0
- data/tracks/fsharp/exercises/word-search/WordSearchTest.fs +23 -31
- data/tracks/fsharp/exercises/wordy/Program.fs +1 -0
- data/tracks/fsharp/exercises/wordy/Wordy.fs +3 -0
- data/tracks/fsharp/exercises/wordy/Wordy.fsproj +22 -0
- data/tracks/fsharp/exercises/wordy/WordyTest.fs +34 -48
- data/tracks/fsharp/exercises/zebra-puzzle/Example.fs +1 -1
- data/tracks/fsharp/exercises/zebra-puzzle/Program.fs +1 -0
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fs +3 -0
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fsproj +22 -0
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzleTest.fs +9 -9
- data/tracks/fsharp/exercises/zipper/Program.fs +1 -0
- data/tracks/fsharp/exercises/zipper/Zipper.fs +3 -0
- data/tracks/fsharp/exercises/zipper/Zipper.fsproj +22 -0
- data/tracks/fsharp/exercises/zipper/ZipperTest.fs +19 -25
- data/tracks/javascript/exercises/simple-linked-list/example.js +4 -3
- data/tracks/javascript/exercises/simple-linked-list/simple-linked-list.spec.js +3 -0
- data/tracks/nim/docs/SNIPPET.txt +2 -0
- data/tracks/perl5/docs/SNIPPET.txt +9 -0
- data/tracks/php/docs/SNIPPET.txt +6 -0
- data/tracks/pony/docs/SNIPPET.txt +2 -0
- data/tracks/powershell/docs/SNIPPET.txt +4 -0
- data/tracks/prolog/docs/SNIPPET.txt +6 -0
- data/tracks/python/exercises/simple-cipher/README.md +1 -1
- data/tracks/vimscript/docs/SNIPPET.txt +4 -0
- metadata +334 -17
- data/tracks/fsharp/.paket/paket.bootstrapper.exe +0 -0
- data/tracks/fsharp/build.cmd +0 -14
- data/tracks/fsharp/build.fsx +0 -65
- data/tracks/fsharp/exercises/app.config +0 -11
- data/tracks/fsharp/exercises/exercises.fsproj +0 -225
- data/tracks/fsharp/exercises/kindergarten-garden/KinderGartenGardenTest.fs +0 -55
- data/tracks/fsharp/exercises/paket.references +0 -4
- data/tracks/fsharp/exercises/palindrome-products/PalindromeTest.fs +0 -60
- data/tracks/fsharp/exercises/rna-transcription/RNATranscriptionTest.fs +0 -29
- data/tracks/fsharp/exercises/roman-numerals/RomanNumeralTest.fs +0 -26
- data/tracks/fsharp/paket.dependencies +0 -8
- data/tracks/fsharp/paket.lock +0 -11
|
@@ -1,30 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
module FoodChainTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
|
|
5
6
|
open FoodChain
|
|
6
7
|
|
|
7
8
|
let combine = List.reduce (fun x y -> x + "\n" + y)
|
|
8
9
|
|
|
9
|
-
[<
|
|
10
|
+
[<Fact>]
|
|
10
11
|
let ``Verse one`` () =
|
|
11
12
|
let expected = ["I know an old lady who swallowed a fly.";
|
|
12
13
|
"I don't know why she swallowed the fly. Perhaps she'll die."] |> combine
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
verse 1 |> should equal expected
|
|
15
16
|
|
|
16
|
-
[<
|
|
17
|
-
[<Ignore("Remove to run test")>]
|
|
17
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
18
18
|
let ``Verse two`` () =
|
|
19
19
|
let expected = ["I know an old lady who swallowed a spider.";
|
|
20
20
|
"It wriggled and jiggled and tickled inside her.";
|
|
21
21
|
"She swallowed the spider to catch the fly.";
|
|
22
22
|
"I don't know why she swallowed the fly. Perhaps she'll die."] |> combine
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
verse 2 |> should equal expected
|
|
25
25
|
|
|
26
|
-
[<
|
|
27
|
-
[<Ignore("Remove to run test")>]
|
|
26
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
28
27
|
let ``Verse four`` () =
|
|
29
28
|
let expected = ["I know an old lady who swallowed a cat.";
|
|
30
29
|
"Imagine that, to swallow a cat!";
|
|
@@ -33,18 +32,16 @@ let ``Verse four`` () =
|
|
|
33
32
|
"She swallowed the spider to catch the fly.";
|
|
34
33
|
"I don't know why she swallowed the fly. Perhaps she'll die."] |> combine
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
verse 4 |> should equal expected
|
|
37
36
|
|
|
38
|
-
[<
|
|
39
|
-
[<Ignore("Remove to run test")>]
|
|
37
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
40
38
|
let ``Verse eight`` () =
|
|
41
39
|
let expected = ["I know an old lady who swallowed a horse.";
|
|
42
40
|
"She's dead, of course!"] |> combine
|
|
43
41
|
|
|
44
|
-
|
|
42
|
+
verse 8 |> should equal expected
|
|
45
43
|
|
|
46
|
-
[<
|
|
47
|
-
[<Ignore("Remove to run test")>]
|
|
44
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
48
45
|
let ``Complete song`` () =
|
|
49
46
|
let expected = ["I know an old lady who swallowed a fly.";
|
|
50
47
|
"I don't know why she swallowed the fly. Perhaps she'll die.";
|
|
@@ -97,4 +94,4 @@ let ``Complete song`` () =
|
|
|
97
94
|
"I know an old lady who swallowed a horse.";
|
|
98
95
|
"She's dead, of course!"] |> combine
|
|
99
96
|
|
|
100
|
-
|
|
97
|
+
song |> should equal expected
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="Forth.fs" />
|
|
11
|
+
<Compile Include="ForthTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
module ForthTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
|
|
5
6
|
open Forth
|
|
6
7
|
|
|
@@ -21,63 +22,54 @@ let run text = eval text empty |> map formatStack
|
|
|
21
22
|
// contained in a Choice1Of2. If an error occured, that error is contained
|
|
22
23
|
// in a Choice2Of2.
|
|
23
24
|
|
|
24
|
-
[<
|
|
25
|
+
[<Fact>]
|
|
25
26
|
let ``No input, no stack`` () =
|
|
26
|
-
|
|
27
|
+
formatStack empty |> should equal ""
|
|
27
28
|
|
|
28
|
-
[<
|
|
29
|
-
[<Ignore("Remove to run test")>]
|
|
29
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
30
30
|
let ``Numbers just get pushed onto the stack`` () =
|
|
31
|
-
|
|
31
|
+
run "1 2 3 4 5" |> should equal (Choice1Of2 "1 2 3 4 5": Choice<string,ForthError>)
|
|
32
32
|
|
|
33
|
-
[<
|
|
34
|
-
[<Ignore("Remove to run test")>]
|
|
33
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
35
34
|
let ``Non-word characters are separators`` () =
|
|
36
|
-
|
|
35
|
+
run "1\b2\t3\n4\r5 6\t7" |> should equal (Choice1Of2 "1 2 3 4 5 6 7": Choice<string,ForthError>)
|
|
37
36
|
|
|
38
|
-
[<
|
|
39
|
-
[<Ignore("Remove to run test")>]
|
|
37
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
40
38
|
let ``Basic arithmetic`` () =
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
run "1 2 + 4 -" |> should equal (Choice1Of2 "-1": Choice<string,ForthError>)
|
|
40
|
+
run "2 4 * 3 /" |> should equal (Choice1Of2 "2": Choice<string,ForthError>)
|
|
43
41
|
|
|
44
|
-
[<
|
|
45
|
-
[<Ignore("Remove to run test")>]
|
|
42
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
46
43
|
let ``Division by zero`` () =
|
|
47
|
-
|
|
44
|
+
run "4 2 2 - /" |> should equal (Choice2Of2 DivisionByZero: Choice<string,ForthError>)
|
|
48
45
|
|
|
49
|
-
[<
|
|
50
|
-
[<Ignore("Remove to run test")>]
|
|
46
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
51
47
|
let ``dup`` () =
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
run "1 DUP" |> should equal (Choice1Of2 "1 1": Choice<string,ForthError>)
|
|
49
|
+
run "1 2 Dup" |> should equal (Choice1Of2 "1 2 2": Choice<string,ForthError>)
|
|
50
|
+
run "dup" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
|
|
55
51
|
|
|
56
|
-
[<
|
|
57
|
-
[<Ignore("Remove to run test")>]
|
|
52
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
58
53
|
let ``drop`` () =
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
run "1 drop" |> should equal (Choice1Of2 "": Choice<string,ForthError>)
|
|
55
|
+
run "1 2 drop" |> should equal (Choice1Of2 "1": Choice<string,ForthError>)
|
|
56
|
+
run "drop" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
|
|
62
57
|
|
|
63
|
-
[<
|
|
64
|
-
[<Ignore("Remove to run test")>]
|
|
58
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
65
59
|
let ``swap`` () =
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
60
|
+
run "1 2 swap" |> should equal (Choice1Of2 "2 1": Choice<string,ForthError>)
|
|
61
|
+
run "1 2 3 swap" |> should equal (Choice1Of2 "1 3 2": Choice<string,ForthError>)
|
|
62
|
+
run "1 swap" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
|
|
63
|
+
run "swap" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
|
|
70
64
|
|
|
71
|
-
[<
|
|
72
|
-
[<Ignore("Remove to run test")>]
|
|
65
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
73
66
|
let ``over`` () =
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
run "1 2 over" |> should equal (Choice1Of2 "1 2 1": Choice<string,ForthError>)
|
|
68
|
+
run "1 2 3 over" |> should equal (Choice1Of2 "1 2 3 2": Choice<string,ForthError>)
|
|
69
|
+
run "1 over" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
|
|
70
|
+
run "over" |> should equal (Choice2Of2 StackUnderflow: Choice<string,ForthError>)
|
|
78
71
|
|
|
79
|
-
[<
|
|
80
|
-
[<Ignore("Remove to run test")>]
|
|
72
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
81
73
|
let ``Defining a new word`` () =
|
|
82
74
|
let actual =
|
|
83
75
|
empty
|
|
@@ -85,10 +77,9 @@ let ``Defining a new word`` () =
|
|
|
85
77
|
|> bind (eval "1 dup-twice")
|
|
86
78
|
|> map formatStack
|
|
87
79
|
|
|
88
|
-
|
|
80
|
+
actual |> should equal (Choice1Of2 "1 1 1": Choice<string,ForthError>)
|
|
89
81
|
|
|
90
|
-
[<
|
|
91
|
-
[<Ignore("Remove to run test")>]
|
|
82
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
92
83
|
let ``Redefining an existing word`` () =
|
|
93
84
|
let actual =
|
|
94
85
|
empty
|
|
@@ -97,10 +88,9 @@ let ``Redefining an existing word`` () =
|
|
|
97
88
|
|> bind (eval "1 foo")
|
|
98
89
|
|> map formatStack
|
|
99
90
|
|
|
100
|
-
|
|
91
|
+
actual |> should equal (Choice1Of2 "1 1 1": Choice<string,ForthError>)
|
|
101
92
|
|
|
102
|
-
[<
|
|
103
|
-
[<Ignore("Remove to run test")>]
|
|
93
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
104
94
|
let ``Redefining an existing built-in word`` () =
|
|
105
95
|
let actual =
|
|
106
96
|
empty
|
|
@@ -108,19 +98,16 @@ let ``Redefining an existing built-in word`` () =
|
|
|
108
98
|
|> bind (eval "1 swap")
|
|
109
99
|
|> map formatStack
|
|
110
100
|
|
|
111
|
-
|
|
101
|
+
actual |> should equal (Choice1Of2 "1 1": Choice<string,ForthError>)
|
|
112
102
|
|
|
113
|
-
[<
|
|
114
|
-
[<Ignore("Remove to run test")>]
|
|
103
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
115
104
|
let ``Defining words with odd characters`` () =
|
|
116
|
-
|
|
105
|
+
run ": € 220371 ; €" |> should equal (Choice1Of2 "220371": Choice<string,ForthError>)
|
|
117
106
|
|
|
118
|
-
[<
|
|
119
|
-
[<Ignore("Remove to run test")>]
|
|
107
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
120
108
|
let ``Defining a number`` () =
|
|
121
|
-
|
|
109
|
+
run ": 1 2 ;" |> should equal (Choice2Of2 InvalidWord: Choice<string,ForthError>)
|
|
122
110
|
|
|
123
|
-
[<
|
|
124
|
-
[<Ignore("Remove to run test")>]
|
|
111
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
125
112
|
let ``Calling a non-existing word`` () =
|
|
126
|
-
|
|
113
|
+
run "1 foo" |> should equal (Choice2Of2 (UnknownWord "foo"): Choice<string,ForthError>)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="Gigasecond.fs" />
|
|
11
|
+
<Compile Include="GigasecondTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|
|
@@ -1,22 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
module GigasecondTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
open Gigasecond
|
|
5
6
|
open System
|
|
6
7
|
|
|
7
|
-
[<
|
|
8
|
+
[<Fact>]
|
|
8
9
|
let ``First date`` () =
|
|
9
10
|
let input = DateTime(2011, 4, 25)
|
|
10
|
-
|
|
11
|
+
gigasecond input |> should equal (DateTime(2043, 1, 1))
|
|
11
12
|
|
|
12
|
-
[<
|
|
13
|
-
[<Ignore("Remove to run test")>]
|
|
13
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
14
14
|
let ``Another date`` () =
|
|
15
15
|
let input = DateTime(1977, 6, 13)
|
|
16
|
-
|
|
16
|
+
gigasecond input |> should equal (DateTime(2009, 2, 19))
|
|
17
17
|
|
|
18
|
-
[<
|
|
19
|
-
[<Ignore("Remove to run test")>]
|
|
18
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
20
19
|
let ``Yet another date`` () =
|
|
21
20
|
let input = DateTime(1959, 7, 19)
|
|
22
|
-
|
|
21
|
+
gigasecond input |> should equal (DateTime(1991, 3, 27))
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="GoCounting.fs" />
|
|
11
|
+
<Compile Include="GoCountingTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
module GoCountingTest
|
|
2
2
|
|
|
3
3
|
open System
|
|
4
4
|
|
|
5
|
-
open
|
|
5
|
+
open Xunit
|
|
6
|
+
open FsUnit.Xunit
|
|
6
7
|
|
|
7
8
|
open GoCounting
|
|
8
9
|
|
|
@@ -24,60 +25,52 @@ let board9x9 =
|
|
|
24
25
|
" W BBB W ";
|
|
25
26
|
" B B "]
|
|
26
27
|
|
|
27
|
-
[<
|
|
28
|
+
[<Fact>]
|
|
28
29
|
let ``5x5 territory for black`` () =
|
|
29
30
|
let expected = Some (Some Black, [(0, 0); (0, 1); (1, 0)])
|
|
30
|
-
|
|
31
|
+
territoryFor board5x5 (0, 1) |> should equal expected
|
|
31
32
|
|
|
32
|
-
[<
|
|
33
|
-
[<Ignore("Remove to run test")>]
|
|
33
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
34
34
|
let ``5x5 territory for white`` () =
|
|
35
35
|
let expected = Some (Some White, [(2, 3)])
|
|
36
|
-
|
|
36
|
+
territoryFor board5x5 (2, 3) |> should equal expected
|
|
37
37
|
|
|
38
|
-
[<
|
|
39
|
-
[<Ignore("Remove to run test")>]
|
|
38
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
40
39
|
let ``5x5 open territory`` () =
|
|
41
|
-
let expected = Some (None, [(0, 3); (0, 4); (1, 4)])
|
|
42
|
-
|
|
40
|
+
let expected = Some ((None: Color option), [(0, 3); (0, 4); (1, 4)])
|
|
41
|
+
territoryFor board5x5 (1, 4) |> should equal expected
|
|
43
42
|
|
|
44
|
-
[<
|
|
45
|
-
[<Ignore("Remove to run test")>]
|
|
43
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
46
44
|
let ``5x5 non-territory (stone)`` () =
|
|
47
|
-
|
|
45
|
+
territoryFor board5x5 (1, 1) |> should equal None
|
|
48
46
|
|
|
49
|
-
[<
|
|
50
|
-
[<Ignore("Remove to run test")>]
|
|
47
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
51
48
|
let ``5x5 non-territory (too low coordinate)`` () =
|
|
52
|
-
|
|
49
|
+
territoryFor board5x5 (-1, 1) |> should equal None
|
|
53
50
|
|
|
54
|
-
[<
|
|
55
|
-
[<Ignore("Remove to run test")>]
|
|
51
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
56
52
|
let ``5x5 non-territory (too high coordinate)`` () =
|
|
57
|
-
|
|
53
|
+
territoryFor board5x5 (1, 5) |> should equal None
|
|
58
54
|
|
|
59
|
-
[<
|
|
60
|
-
[<Ignore("Remove to run test")>]
|
|
55
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
61
56
|
let ``Minimal board, no territories`` () =
|
|
62
57
|
let input = ["B"]
|
|
63
58
|
let expected = []
|
|
64
59
|
|
|
65
|
-
|
|
60
|
+
territories input |> should be Empty
|
|
66
61
|
|
|
67
|
-
[<
|
|
68
|
-
[<Ignore("Remove to run test")>]
|
|
62
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
69
63
|
let ``One territory, covering the whole board`` () =
|
|
70
64
|
let input = [" "]
|
|
71
|
-
let expected = [(None, [(0, 0)])] |> Map.ofList
|
|
65
|
+
let expected = [((None: Color option), [(0, 0)])] |> Map.ofList
|
|
72
66
|
|
|
73
|
-
|
|
67
|
+
territories input |> should equal expected
|
|
74
68
|
|
|
75
|
-
[<
|
|
76
|
-
[<Ignore("Remove to run test")>]
|
|
69
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
77
70
|
let ``Two territories, rectangular board`` () =
|
|
78
71
|
let input = [" BW "; " BW "]
|
|
79
72
|
let expected = [(Some Black, [(0, 0); (0, 1)]);
|
|
80
73
|
(Some White, [(3, 0); (3, 1)])]
|
|
81
74
|
|> Map.ofList
|
|
82
75
|
|
|
83
|
-
|
|
76
|
+
territories input |> should equal expected
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -7,7 +7,7 @@ let add student grade school =
|
|
|
7
7
|
| Some existing -> Map.add grade (student :: existing |> List.sort) school
|
|
8
8
|
| None -> Map.add grade [student] school
|
|
9
9
|
|
|
10
|
-
let roster school =
|
|
10
|
+
let roster school = Map.toList school
|
|
11
11
|
|
|
12
12
|
let grade number school =
|
|
13
13
|
match Map.tryFind number school with
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module GradeSchool
|
|
2
|
+
|
|
3
|
+
let empty: Map<int, string list> = failwith "You need to implement this function."
|
|
4
|
+
|
|
5
|
+
let add (student: string) (grade: int) (school: Map<int, string list>): Map<int, string list> = failwith "You need to implement this function."
|
|
6
|
+
|
|
7
|
+
let roster (school: Map<int, string list>): Map<int, string list> = failwith "You need to implement this function."
|
|
8
|
+
|
|
9
|
+
let grade (number: int) (school: Map<int, string list>): string list = failwith "You need to implement this function."
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="GradeSchool.fs" />
|
|
11
|
+
<Compile Include="GradeSchoolTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
module GradeSchoolTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
open GradeSchool
|
|
5
6
|
|
|
6
|
-
[<
|
|
7
|
+
[<Fact>]
|
|
7
8
|
let ``Empty school has an empty roster`` () =
|
|
8
9
|
let school = empty
|
|
9
|
-
|
|
10
|
+
roster school |> should be Empty
|
|
10
11
|
|
|
11
|
-
[<
|
|
12
|
-
[<Ignore("Remove to run test")>]
|
|
12
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
13
13
|
let ``Adding a student adds them to the roster for the given grade`` () =
|
|
14
14
|
let school = empty |> add "Aimee" 2
|
|
15
15
|
let expected = ["Aimee"]
|
|
16
|
-
|
|
16
|
+
grade 2 school |> should equal expected
|
|
17
17
|
|
|
18
|
-
[<
|
|
19
|
-
[<Ignore("Remove to run test")>]
|
|
18
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
20
19
|
let ``Adding more students to the same grade adds them to the roster`` () =
|
|
21
20
|
let school =
|
|
22
21
|
empty
|
|
@@ -24,20 +23,18 @@ let ``Adding more students to the same grade adds them to the roster`` () =
|
|
|
24
23
|
|> add "James" 2
|
|
25
24
|
|> add "Paul" 2
|
|
26
25
|
let expected = ["Blair"; "James"; "Paul"]
|
|
27
|
-
|
|
26
|
+
grade 2 school |> should equal expected
|
|
28
27
|
|
|
29
|
-
[<
|
|
30
|
-
[<Ignore("Remove to run test")>]
|
|
28
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
31
29
|
let ``Adding students to different grades adds them to the roster`` () =
|
|
32
30
|
let school =
|
|
33
31
|
empty
|
|
34
32
|
|> add "Chelsea" 3
|
|
35
33
|
|> add "Logan" 7
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
grade 3 school |> should equal ["Chelsea"]
|
|
35
|
+
grade 7 school |> should equal ["Logan"]
|
|
38
36
|
|
|
39
|
-
[<
|
|
40
|
-
[<Ignore("Remove to run test")>]
|
|
37
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
41
38
|
let ``Grade returns the students in that grade in alphabetical order`` () =
|
|
42
39
|
let school =
|
|
43
40
|
empty
|
|
@@ -45,16 +42,14 @@ let ``Grade returns the students in that grade in alphabetical order`` () =
|
|
|
45
42
|
|> add "Bradley" 5
|
|
46
43
|
|> add "Jeff" 1
|
|
47
44
|
let expected = ["Bradley"; "Franklin"]
|
|
48
|
-
|
|
45
|
+
grade 5 school |> should equal expected
|
|
49
46
|
|
|
50
|
-
[<
|
|
51
|
-
[<Ignore("Remove to run test")>]
|
|
47
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
52
48
|
let ``Grade returns an empty list if there are no students in that grade`` () =
|
|
53
49
|
let school = empty
|
|
54
|
-
|
|
50
|
+
grade 1 school |> should be Empty
|
|
55
51
|
|
|
56
|
-
[<
|
|
57
|
-
[<Ignore("Remove to run test")>]
|
|
52
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
58
53
|
let ``Student names and grades in roster are sorted`` () =
|
|
59
54
|
let school =
|
|
60
55
|
empty
|
|
@@ -68,4 +63,4 @@ let ``Student names and grades in roster are sorted`` () =
|
|
|
68
63
|
(4, ["Christopher"; "Jennifer"]);
|
|
69
64
|
(6, ["Kareem"])]
|
|
70
65
|
|
|
71
|
-
|
|
66
|
+
roster school |> should equal expected
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="Grains.fs" />
|
|
11
|
+
<Compile Include="GrainsTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|