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
|
@@ -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="Accumulate.fs" />
|
|
11
|
+
<Compile Include="AccumulateTest.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,39 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
module AccumulateTest
|
|
2
2
|
|
|
3
3
|
open System
|
|
4
|
-
open
|
|
4
|
+
open Xunit
|
|
5
|
+
open FsUnit.Xunit
|
|
5
6
|
open Accumulate
|
|
6
7
|
|
|
7
8
|
let reverse (str:string) = new string(str.ToCharArray() |> Array.rev)
|
|
8
9
|
|
|
9
|
-
[<
|
|
10
|
+
[<Fact>]
|
|
10
11
|
let ``Empty accumulation produces empty accumulation`` () =
|
|
11
|
-
|
|
12
|
+
accumulate (fun x -> x + 1) List.empty |> should be Empty
|
|
12
13
|
|
|
13
|
-
[<
|
|
14
|
-
[<Ignore("Remove to run test")>]
|
|
14
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
15
15
|
let ``Identity accumulation returns unmodified list`` () =
|
|
16
|
-
|
|
16
|
+
accumulate id [1; 2; 3] |> should equal [1; 2; 3]
|
|
17
17
|
|
|
18
|
-
[<
|
|
19
|
-
[<Ignore("Remove to run test")>]
|
|
18
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
20
19
|
let ``Accumulate squares`` () =
|
|
21
|
-
|
|
20
|
+
accumulate (fun x -> x * x) [1; 2; 3] |> should equal [1; 4; 9]
|
|
22
21
|
|
|
23
|
-
[<
|
|
24
|
-
[<Ignore("Remove to run test")>]
|
|
22
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
25
23
|
let ``Accumulate upcases`` () =
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
accumulate (fun (x:string) -> x.ToUpper()) ["hello"; "world"]
|
|
25
|
+
|> should equal ["HELLO"; "WORLD"]
|
|
28
26
|
|
|
29
|
-
[<
|
|
30
|
-
[<Ignore("Remove to run test")>]
|
|
27
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
31
28
|
let ``Accumulate reversed strings`` () =
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
accumulate reverse (List.ofArray ("the quick brown fox etc".Split(' ')))
|
|
30
|
+
|> should equal (List.ofArray("eht kciuq nworb xof cte".Split(' ')))
|
|
34
31
|
|
|
35
|
-
[<
|
|
36
|
-
[<Ignore("Remove to run test")>]
|
|
32
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
37
33
|
let ``Accumulate within accumulate`` () =
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
accumulate (fun (x:string) -> String.concat " " (accumulate (fun y -> x + y) ["1"; "2"; "3"])) ["a"; "b"; "c"]
|
|
35
|
+
|> should equal ["a1 a2 a3"; "b1 b2 b3"; "c1 c2 c3"]
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
## Hints
|
|
2
2
|
For this exercise the following F# feature comes in handy:
|
|
3
3
|
- [Tail recursion](https://blogs.msdn.microsoft.com/fsharpteam/2011/07/08/tail-calls-in-f/) Prevent stack overflows with large input by using tail recursion. While there are no test cases checking explicitly for this, using tail recursion leads to a more performant solution. Another good resource on tail recursion is [this blog post](http://blog.ploeh.dk/2015/12/22/tail-recurse/).
|
|
4
|
+
- [Type inference](https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/generics/#implicitly-generic-constructs) The F# compiler can automatically infer types, which means you often don't have to add any types at all. For more information on how this works and its advantages, see [this page](https://fsharpforfunandprofit.com/posts/type-inference/).
|
|
@@ -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="Acronym.fs" />
|
|
11
|
+
<Compile Include="AcronymTest.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,64 +1,58 @@
|
|
|
1
1
|
module AcronymTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
open Acronym
|
|
5
6
|
|
|
6
|
-
[<
|
|
7
|
+
[<Fact>]
|
|
7
8
|
let ``Empty string abbreviated to empty string`` () =
|
|
8
|
-
|
|
9
|
+
acronym "" |> should equal ""
|
|
9
10
|
|
|
10
|
-
[<
|
|
11
|
-
[<Ignore("Remove to run test")>]
|
|
11
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
12
12
|
let ``Basic`` () =
|
|
13
13
|
let phrase = "Portable Network Graphics"
|
|
14
14
|
let expected = "PNG"
|
|
15
15
|
let actual = acronym phrase
|
|
16
|
-
|
|
16
|
+
expected |> should equal actual
|
|
17
17
|
|
|
18
|
-
[<
|
|
19
|
-
[<Ignore("Remove to run test")>]
|
|
18
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
20
19
|
let ``Lowercase words`` () =
|
|
21
20
|
let phrase = "Ruby on Rails"
|
|
22
21
|
let expected = "ROR"
|
|
23
22
|
let actual = acronym phrase
|
|
24
|
-
|
|
23
|
+
expected |> should equal actual
|
|
25
24
|
|
|
26
|
-
[<
|
|
27
|
-
[<Ignore("Remove to run test")>]
|
|
25
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
28
26
|
let ``Camel case`` () =
|
|
29
27
|
let phrase = "HyperText Markup Language"
|
|
30
28
|
let expected = "HTML"
|
|
31
29
|
let actual = acronym phrase
|
|
32
|
-
|
|
30
|
+
expected |> should equal actual
|
|
33
31
|
|
|
34
|
-
[<
|
|
35
|
-
[<Ignore("Remove to run test")>]
|
|
32
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
36
33
|
let ``Punctuation`` () =
|
|
37
34
|
let phrase = "First In, First Out"
|
|
38
35
|
let expected = "FIFO"
|
|
39
36
|
let actual = acronym phrase
|
|
40
|
-
|
|
37
|
+
expected |> should equal actual
|
|
41
38
|
|
|
42
|
-
[<
|
|
43
|
-
[<Ignore("Remove to run test")>]
|
|
39
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
44
40
|
let ``All-Caps words`` () =
|
|
45
41
|
let phrase = "PHP: Hypertext Preprocessor"
|
|
46
42
|
let expected = "PHP"
|
|
47
43
|
let actual = acronym phrase
|
|
48
|
-
|
|
44
|
+
expected |> should equal actual
|
|
49
45
|
|
|
50
|
-
[<
|
|
51
|
-
[<Ignore("Remove to run test")>]
|
|
46
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
52
47
|
let ``Non-acronym all-caps word`` () =
|
|
53
48
|
let phrase = "GNU Image Manipulation Program"
|
|
54
49
|
let expected = "GIMP"
|
|
55
50
|
let actual = acronym phrase
|
|
56
|
-
|
|
51
|
+
expected |> should equal actual
|
|
57
52
|
|
|
58
|
-
[<
|
|
59
|
-
[<Ignore("Remove to run test")>]
|
|
53
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
60
54
|
let ``Hyphenated`` () =
|
|
61
55
|
let phrase = "Complementary metal-oxide semiconductor"
|
|
62
56
|
let expected = "CMOS"
|
|
63
57
|
let actual = acronym phrase
|
|
64
|
-
|
|
58
|
+
expected |> should equal actual
|
|
@@ -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="AllYourBase.fs" />
|
|
11
|
+
<Compile Include="AllYourBaseTest.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,193 +1,174 @@
|
|
|
1
|
-
|
|
1
|
+
module AllYourBaseTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
|
|
5
6
|
open AllYourBase
|
|
6
7
|
|
|
7
|
-
[<
|
|
8
|
+
[<Fact>]
|
|
8
9
|
let ``Single bit one to decimal`` () =
|
|
9
10
|
let inputBase = 2
|
|
10
11
|
let inputDigits = [1]
|
|
11
12
|
let outputBase = 10
|
|
12
13
|
let outputDigits = Some [1]
|
|
13
|
-
|
|
14
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
14
15
|
|
|
15
|
-
[<
|
|
16
|
-
[<Ignore("Remove to run test")>]
|
|
16
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
17
17
|
let ``Binary to single decimal`` () =
|
|
18
18
|
let inputBase = 2
|
|
19
19
|
let inputDigits = [1; 0; 1]
|
|
20
20
|
let outputBase = 10
|
|
21
21
|
let outputDigits = Some [5]
|
|
22
|
-
|
|
22
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
23
23
|
|
|
24
|
-
[<
|
|
25
|
-
[<Ignore("Remove to run test")>]
|
|
24
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
26
25
|
let ``Single decimal to binary`` () =
|
|
27
26
|
let inputBase = 10
|
|
28
27
|
let inputDigits = [5]
|
|
29
28
|
let outputBase = 2
|
|
30
29
|
let outputDigits = Some [1; 0; 1]
|
|
31
|
-
|
|
30
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
32
31
|
|
|
33
|
-
[<
|
|
34
|
-
[<Ignore("Remove to run test")>]
|
|
32
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
35
33
|
let ``Binary to multiple decimal`` () =
|
|
36
34
|
let inputBase = 2
|
|
37
35
|
let inputDigits = [1; 0; 1; 0; 1; 0]
|
|
38
36
|
let outputBase = 10
|
|
39
37
|
let outputDigits = Some [4; 2]
|
|
40
|
-
|
|
38
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
41
39
|
|
|
42
|
-
[<
|
|
43
|
-
[<Ignore("Remove to run test")>]
|
|
40
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
44
41
|
let ``Decimal to binary`` () =
|
|
45
42
|
let inputBase = 10
|
|
46
43
|
let inputDigits = [4; 2]
|
|
47
44
|
let outputBase = 2
|
|
48
45
|
let outputDigits = Some [1; 0; 1; 0; 1; 0]
|
|
49
|
-
|
|
46
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
50
47
|
|
|
51
|
-
[<
|
|
52
|
-
[<Ignore("Remove to run test")>]
|
|
48
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
53
49
|
let ``Trinary to hexadecimal`` () =
|
|
54
50
|
let inputBase = 3
|
|
55
51
|
let inputDigits = [1; 1; 2; 0]
|
|
56
52
|
let outputBase = 16
|
|
57
53
|
let outputDigits = Some [2; 10]
|
|
58
|
-
|
|
54
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
59
55
|
|
|
60
|
-
[<
|
|
61
|
-
[<Ignore("Remove to run test")>]
|
|
56
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
62
57
|
let ``Hexadecimal to trinary`` () =
|
|
63
58
|
let inputBase = 16
|
|
64
59
|
let inputDigits = [2; 10]
|
|
65
60
|
let outputBase = 3
|
|
66
61
|
let outputDigits = Some [1; 1; 2; 0]
|
|
67
|
-
|
|
62
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
68
63
|
|
|
69
|
-
[<
|
|
70
|
-
[<Ignore("Remove to run test")>]
|
|
64
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
71
65
|
let ``15-bit integer`` () =
|
|
72
66
|
let inputBase = 97
|
|
73
67
|
let inputDigits = [3; 46; 60]
|
|
74
68
|
let outputBase = 73
|
|
75
69
|
let outputDigits = Some [6; 10; 45]
|
|
76
|
-
|
|
70
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
77
71
|
|
|
78
|
-
[<
|
|
79
|
-
[<Ignore("Remove to run test")>]
|
|
72
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
80
73
|
let ``Empty list`` () =
|
|
81
74
|
let inputBase = 2
|
|
82
75
|
let inputDigits = []
|
|
83
76
|
let outputBase = 10
|
|
84
77
|
let outputDigits = None
|
|
85
|
-
|
|
78
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
86
79
|
|
|
87
|
-
[<
|
|
88
|
-
[<Ignore("Remove to run test")>]
|
|
80
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
89
81
|
let ``Single zero`` () =
|
|
90
82
|
let inputBase = 10
|
|
91
83
|
let inputDigits = [0]
|
|
92
84
|
let outputBase = 2
|
|
93
85
|
let outputDigits = Some [0]
|
|
94
|
-
|
|
86
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
95
87
|
|
|
96
|
-
[<
|
|
97
|
-
[<Ignore("Remove to run test")>]
|
|
88
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
98
89
|
let ``Multiple zeros`` () =
|
|
99
90
|
let inputBase = 10
|
|
100
91
|
let inputDigits = [0; 0; 0]
|
|
101
92
|
let outputBase = 2
|
|
102
93
|
let outputDigits = Some [0]
|
|
103
|
-
|
|
94
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
104
95
|
|
|
105
|
-
[<
|
|
106
|
-
[<Ignore("Remove to run test")>]
|
|
96
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
107
97
|
let ``Leading zeros`` () =
|
|
108
98
|
let inputBase = 7
|
|
109
99
|
let inputDigits = [0; 6; 0]
|
|
110
100
|
let outputBase = 10
|
|
111
101
|
let outputDigits = Some [4; 2]
|
|
112
|
-
|
|
102
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
113
103
|
|
|
114
|
-
[<
|
|
115
|
-
[<Ignore("Remove to run test")>]
|
|
104
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
116
105
|
let ``Negative digit`` () =
|
|
117
106
|
let inputBase = 2
|
|
118
107
|
let inputDigits = [1; -1; 1; 0; 1; 0]
|
|
119
108
|
let outputBase = 10
|
|
120
109
|
let outputDigits = None
|
|
121
|
-
|
|
110
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
122
111
|
|
|
123
|
-
[<
|
|
124
|
-
[<Ignore("Remove to run test")>]
|
|
112
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
125
113
|
let ``Invalid positive digit`` () =
|
|
126
114
|
let inputBase = 2
|
|
127
115
|
let inputDigits = [1; 2; 1; 0; 1; 0]
|
|
128
116
|
let outputBase = 10
|
|
129
117
|
let outputDigits = None
|
|
130
|
-
|
|
118
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
131
119
|
|
|
132
|
-
[<
|
|
133
|
-
[<Ignore("Remove to run test")>]
|
|
120
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
134
121
|
let ``First base is one`` () =
|
|
135
122
|
let inputBase = 1
|
|
136
123
|
let inputDigits = []
|
|
137
124
|
let outputBase = 10
|
|
138
125
|
let outputDigits = None
|
|
139
|
-
|
|
126
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
140
127
|
|
|
141
|
-
[<
|
|
142
|
-
[<Ignore("Remove to run test")>]
|
|
128
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
143
129
|
let ``Second base is one`` () =
|
|
144
130
|
let inputBase = 2
|
|
145
131
|
let inputDigits = [1; 0; 1; 0; 1; 0]
|
|
146
132
|
let outputBase = 1
|
|
147
133
|
let outputDigits = None
|
|
148
|
-
|
|
134
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
149
135
|
|
|
150
|
-
[<
|
|
151
|
-
[<Ignore("Remove to run test")>]
|
|
136
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
152
137
|
let ``First base is zero`` () =
|
|
153
138
|
let inputBase = 0
|
|
154
139
|
let inputDigits = []
|
|
155
140
|
let outputBase = 10
|
|
156
141
|
let outputDigits = None
|
|
157
|
-
|
|
142
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
158
143
|
|
|
159
|
-
[<
|
|
160
|
-
[<Ignore("Remove to run test")>]
|
|
144
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
161
145
|
let ``Second base is zero`` () =
|
|
162
146
|
let inputBase = 10
|
|
163
147
|
let inputDigits = [7]
|
|
164
148
|
let outputBase = 0
|
|
165
149
|
let outputDigits = None
|
|
166
|
-
|
|
150
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
167
151
|
|
|
168
|
-
[<
|
|
169
|
-
[<Ignore("Remove to run test")>]
|
|
152
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
170
153
|
let ``First base is negative`` () =
|
|
171
154
|
let inputBase = -2
|
|
172
155
|
let inputDigits = [1]
|
|
173
156
|
let outputBase = 10
|
|
174
157
|
let outputDigits = None
|
|
175
|
-
|
|
158
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
176
159
|
|
|
177
|
-
[<
|
|
178
|
-
[<Ignore("Remove to run test")>]
|
|
160
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
179
161
|
let ``Second base is negative`` () =
|
|
180
162
|
let inputBase = 2
|
|
181
163
|
let inputDigits = [1]
|
|
182
164
|
let outputBase = -7
|
|
183
165
|
let outputDigits = None
|
|
184
|
-
|
|
166
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
185
167
|
|
|
186
|
-
[<
|
|
187
|
-
[<Ignore("Remove to run test")>]
|
|
168
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
188
169
|
let ``Both bases are negative`` () =
|
|
189
170
|
let inputBase = -2
|
|
190
171
|
let inputDigits = [1]
|
|
191
172
|
let outputBase = -7
|
|
192
173
|
let outputDigits = None
|
|
193
|
-
|
|
174
|
+
rebase inputBase inputDigits outputBase |> should equal outputDigits
|
|
@@ -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="Allergies.fs" />
|
|
11
|
+
<Compile Include="AllergiesTest.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,74 +1,70 @@
|
|
|
1
|
-
|
|
1
|
+
module AllergiesTest
|
|
2
2
|
|
|
3
3
|
open System
|
|
4
|
-
open
|
|
4
|
+
open Xunit
|
|
5
|
+
open FsUnit.Xunit
|
|
5
6
|
open Allergies
|
|
6
7
|
|
|
7
|
-
[<
|
|
8
|
+
[<Fact>]
|
|
8
9
|
let ``No allergies means not allergic`` () =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
allergicTo Allergen.Peanuts 0 |> should equal false
|
|
11
|
+
allergicTo Allergen.Cats 0 |> should equal false
|
|
12
|
+
allergicTo Allergen.Strawberries 0 |> should equal false
|
|
12
13
|
|
|
13
|
-
[<
|
|
14
|
-
[<Ignore("Remove to run test")>]
|
|
14
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
15
15
|
let ``Allergic to eggs`` () =
|
|
16
|
-
|
|
16
|
+
allergicTo Allergen.Eggs 1 |> should equal true
|
|
17
17
|
|
|
18
|
-
[<
|
|
19
|
-
[<Ignore("Remove to run test")>]
|
|
18
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
20
19
|
let ``Allergic to eggs in addition to other stuff`` () =
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
allergicTo Allergen.Eggs 5 |> should equal true
|
|
21
|
+
allergicTo Allergen.Shellfish 5 |> should equal true
|
|
22
|
+
allergicTo Allergen.Strawberries 5 |> should equal false
|
|
24
23
|
|
|
25
|
-
[<
|
|
26
|
-
[<Ignore("Remove to run test")>]
|
|
24
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
27
25
|
let ``No allergies at all`` () =
|
|
28
|
-
|
|
26
|
+
allergies 0 |> should be Empty
|
|
29
27
|
|
|
30
|
-
[<
|
|
31
|
-
[<Ignore("Remove to run test")>]
|
|
28
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
32
29
|
let ``Allergic to just eggs`` () =
|
|
33
|
-
|
|
30
|
+
allergies 1 |> should equal [Allergen.Eggs]
|
|
34
31
|
|
|
35
|
-
[<
|
|
36
|
-
[<Ignore("Remove to run test")>]
|
|
32
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
37
33
|
let ``Allergic to just peanuts`` () =
|
|
38
|
-
|
|
34
|
+
allergies 2 |> should equal [Allergen.Peanuts]
|
|
39
35
|
|
|
40
|
-
[<
|
|
41
|
-
[<Ignore("Remove to run test")>]
|
|
36
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
42
37
|
let ``Allergic to eggs and peanuts`` () =
|
|
43
|
-
|
|
38
|
+
allergies 3 |> should equal [Allergen.Eggs; Allergen.Peanuts]
|
|
44
39
|
|
|
45
|
-
[<
|
|
46
|
-
[<Ignore("Remove to run test")>]
|
|
40
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
47
41
|
let ``Allergic to lots of stuff`` () =
|
|
48
|
-
|
|
49
|
-
|
|
42
|
+
allergies 248 |> should equal
|
|
43
|
+
[ Allergen.Strawberries;
|
|
44
|
+
Allergen.Tomatoes;
|
|
45
|
+
Allergen.Chocolate;
|
|
46
|
+
Allergen.Pollen;
|
|
47
|
+
Allergen.Cats ]
|
|
50
48
|
|
|
51
|
-
[<
|
|
52
|
-
[<Ignore("Remove to run test")>]
|
|
49
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
53
50
|
let ``Allergic to everything`` () =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
51
|
+
allergies 255 |> should equal
|
|
52
|
+
[ Allergen.Eggs;
|
|
53
|
+
Allergen.Peanuts;
|
|
54
|
+
Allergen.Shellfish;
|
|
55
|
+
Allergen.Strawberries;
|
|
56
|
+
Allergen.Tomatoes;
|
|
57
|
+
Allergen.Chocolate;
|
|
58
|
+
Allergen.Pollen;
|
|
59
|
+
Allergen.Cats ]
|
|
63
60
|
|
|
64
|
-
[<
|
|
65
|
-
[<Ignore("Remove to run test")>]
|
|
61
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
66
62
|
let ``Ignore non allergen score parts`` () =
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
63
|
+
allergies 509 |> should equal
|
|
64
|
+
[ Allergen.Eggs;
|
|
65
|
+
Allergen.Shellfish;
|
|
66
|
+
Allergen.Strawberries;
|
|
67
|
+
Allergen.Tomatoes;
|
|
68
|
+
Allergen.Chocolate;
|
|
69
|
+
Allergen.Pollen;
|
|
70
|
+
Allergen.Cats ]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|