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,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
module ListOpsTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
|
|
5
6
|
open ListOps
|
|
6
7
|
|
|
@@ -8,121 +9,98 @@ let big = 100000
|
|
|
8
9
|
let bigList = [1 .. big]
|
|
9
10
|
let odd x = x % 2 = 1
|
|
10
11
|
|
|
11
|
-
[<
|
|
12
|
+
[<Fact>]
|
|
12
13
|
let ``length of empty list`` () =
|
|
13
|
-
|
|
14
|
+
length [] |> should equal 0
|
|
14
15
|
|
|
15
|
-
[<
|
|
16
|
-
[<Ignore("Remove to run test")>]
|
|
16
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
17
17
|
let ``length of non-empty list`` () =
|
|
18
|
-
|
|
18
|
+
length [1 .. 4] |> should equal 4
|
|
19
19
|
|
|
20
|
-
[<
|
|
21
|
-
[<Ignore("Remove to run test")>]
|
|
20
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
22
21
|
let ``length of large list`` () =
|
|
23
|
-
|
|
22
|
+
length [1 .. big] |> should equal big
|
|
24
23
|
|
|
25
|
-
[<
|
|
26
|
-
[<Ignore("Remove to run test")>]
|
|
24
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
27
25
|
let ``reverse of empty list`` () =
|
|
28
|
-
|
|
26
|
+
reverse [] |> should be Empty
|
|
29
27
|
|
|
30
|
-
[<
|
|
31
|
-
[<Ignore("Remove to run test")>]
|
|
28
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
32
29
|
let ``reverse of non-empty list`` () =
|
|
33
|
-
|
|
30
|
+
reverse [1 .. 100] |> should equal [100 .. -1 .. 1]
|
|
34
31
|
|
|
35
|
-
[<
|
|
36
|
-
[<Ignore("Remove to run test")>]
|
|
32
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
37
33
|
let ``map of empty list`` () =
|
|
38
|
-
|
|
34
|
+
map ((+) 1) [] |> should be Empty
|
|
39
35
|
|
|
40
|
-
[<
|
|
41
|
-
[<Ignore("Remove to run test")>]
|
|
36
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
42
37
|
let ``map of non-empty list`` () =
|
|
43
|
-
|
|
38
|
+
map ((+) 1) [1 .. 2 .. 7] |> should equal [2 .. 2 .. 8]
|
|
44
39
|
|
|
45
|
-
[<
|
|
46
|
-
[<Ignore("Remove to run test")>]
|
|
40
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
47
41
|
let ``filter of empty list`` () =
|
|
48
|
-
|
|
42
|
+
filter id [] |> should be Empty
|
|
49
43
|
|
|
50
|
-
[<
|
|
51
|
-
[<Ignore("Remove to run test")>]
|
|
44
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
52
45
|
let ``filter of normal list`` () =
|
|
53
|
-
|
|
46
|
+
filter odd [1 .. 4] |> should equal [1; 3]
|
|
54
47
|
|
|
55
|
-
[<
|
|
56
|
-
[<Ignore("Remove to run test")>]
|
|
48
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
57
49
|
let ``foldl of empty list`` () =
|
|
58
|
-
|
|
50
|
+
foldl (+) 0 [] |> should equal 0
|
|
59
51
|
|
|
60
|
-
[<
|
|
61
|
-
[<Ignore("Remove to run test")>]
|
|
52
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
62
53
|
let ``foldl of non-empty list`` () =
|
|
63
|
-
|
|
54
|
+
foldl (+) -3 [1 .. 4] |> should equal 7
|
|
64
55
|
|
|
65
|
-
[<
|
|
66
|
-
[<Ignore("Remove to run test")>]
|
|
56
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
67
57
|
let ``foldl of huge list`` () =
|
|
68
|
-
|
|
58
|
+
foldl (+) 0 [1 .. big] |> should equal (big * (big + 1) / 2)
|
|
69
59
|
|
|
70
|
-
[<
|
|
71
|
-
[<Ignore("Remove to run test")>]
|
|
60
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
72
61
|
let ``foldl with non-commutative function`` () =
|
|
73
|
-
|
|
62
|
+
foldl (-) 10 [1 .. 4] |> should equal 0
|
|
74
63
|
|
|
75
|
-
[<
|
|
76
|
-
[<Ignore("Remove to run test")>]
|
|
64
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
77
65
|
let ``foldl is not just foldr . flip`` () =
|
|
78
|
-
|
|
66
|
+
foldl (fun acc item -> item :: acc) [] (List.ofSeq "asdf") |> should equal (List.ofSeq "fdsa")
|
|
79
67
|
|
|
80
|
-
[<
|
|
81
|
-
[<Ignore("Remove to run test")>]
|
|
68
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
82
69
|
let ``foldr as id`` () =
|
|
83
|
-
|
|
70
|
+
foldr (fun item acc -> item :: acc) [1 .. big] [] = bigList |> should equal true
|
|
84
71
|
|
|
85
|
-
[<
|
|
86
|
-
[<Ignore("Remove to run test")>]
|
|
72
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
87
73
|
let ``foldr as append`` () =
|
|
88
|
-
|
|
74
|
+
foldr (fun item acc -> item :: acc) [1 .. 99] [100 .. big] = bigList |> should equal true
|
|
89
75
|
|
|
90
|
-
[<
|
|
91
|
-
[<Ignore("Remove to run test")>]
|
|
76
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
92
77
|
let ``append of empty lists`` () =
|
|
93
|
-
|
|
78
|
+
append [] [] |> should be Empty
|
|
94
79
|
|
|
95
|
-
[<
|
|
96
|
-
[<Ignore("Remove to run test")>]
|
|
80
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
97
81
|
let ``append of empty and non-empty lists`` () =
|
|
98
|
-
|
|
82
|
+
append [] [1 .. 4] |> should equal [1 .. 4]
|
|
99
83
|
|
|
100
|
-
[<
|
|
101
|
-
[<Ignore("Remove to run test")>]
|
|
84
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
102
85
|
let ``append of non-empty and empty lists`` () =
|
|
103
|
-
|
|
86
|
+
append [1 .. 4] [] |> should equal [1 .. 4]
|
|
104
87
|
|
|
105
|
-
[<
|
|
106
|
-
[<Ignore("Remove to run test")>]
|
|
88
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
107
89
|
let ``append of non-empty lists`` () =
|
|
108
|
-
|
|
90
|
+
append [1 .. 3] [4; 5] |> should equal [1 .. 5]
|
|
109
91
|
|
|
110
|
-
[<
|
|
111
|
-
[<Ignore("Remove to run test")>]
|
|
92
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
112
93
|
let ``append of large lists`` () =
|
|
113
|
-
|
|
94
|
+
append [1 .. (big / 2)] [1 + big / 2 .. big] = bigList |> should equal true
|
|
114
95
|
|
|
115
|
-
[<
|
|
116
|
-
[<Ignore("Remove to run test")>]
|
|
96
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
117
97
|
let ``concat of no lists`` () =
|
|
118
|
-
|
|
98
|
+
concat [] |> should be Empty
|
|
119
99
|
|
|
120
|
-
[<
|
|
121
|
-
[<Ignore("Remove to run test")>]
|
|
100
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
122
101
|
let ``concat of list of lists`` () =
|
|
123
|
-
|
|
102
|
+
concat [[1; 2]; [3]; []; [4; 5; 6]] |> should equal [1 .. 6]
|
|
124
103
|
|
|
125
|
-
[<
|
|
126
|
-
[<Ignore("Remove to run test")>]
|
|
104
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
127
105
|
let ``concat of large list of small lists`` () =
|
|
128
|
-
|
|
106
|
+
concat (map (fun x -> [x]) [1 .. big]) = bigList |> should equal true
|
|
@@ -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="Luhn.fs" />
|
|
11
|
+
<Compile Include="LuhnTest.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,107 +1,96 @@
|
|
|
1
1
|
module LuhnTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
open Luhn
|
|
5
6
|
|
|
6
|
-
[<
|
|
7
|
+
[<Fact>]
|
|
7
8
|
let ``Single digit strings cannot be valid`` () =
|
|
8
9
|
let input = "1"
|
|
9
10
|
let expected = false
|
|
10
11
|
let actual = valid input
|
|
11
|
-
|
|
12
|
+
actual |> should equal expected
|
|
12
13
|
|
|
13
|
-
[<
|
|
14
|
-
[<Ignore("Remove to run test")>]
|
|
14
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
15
15
|
let ``A single zero is invalid`` () =
|
|
16
16
|
let input = "0"
|
|
17
17
|
let expected = false
|
|
18
18
|
let actual = valid input
|
|
19
|
-
|
|
19
|
+
actual |> should equal expected
|
|
20
20
|
|
|
21
|
-
[<
|
|
22
|
-
[<Ignore("Remove to run test")>]
|
|
21
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
23
22
|
let ``Single zero with space is invalid`` () =
|
|
24
23
|
let input = "0 "
|
|
25
24
|
let expected = false
|
|
26
25
|
let actual = valid input
|
|
27
|
-
|
|
26
|
+
actual |> should equal expected
|
|
28
27
|
|
|
29
|
-
[<
|
|
30
|
-
[<Ignore("Remove to run test")>]
|
|
28
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
31
29
|
let ``Lots of zeros are valid`` () =
|
|
32
30
|
let input = "00000"
|
|
33
31
|
let expected = true
|
|
34
32
|
let actual = valid input
|
|
35
|
-
|
|
33
|
+
actual |> should equal expected
|
|
36
34
|
|
|
37
|
-
[<
|
|
38
|
-
[<Ignore("Remove to run test")>]
|
|
35
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
39
36
|
let ``Nine doubled is nine`` () =
|
|
40
37
|
let input = "091"
|
|
41
38
|
let expected = true
|
|
42
39
|
let actual = valid input
|
|
43
|
-
|
|
40
|
+
actual |> should equal expected
|
|
44
41
|
|
|
45
|
-
[<
|
|
46
|
-
[<Ignore("Remove to run test")>]
|
|
42
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
47
43
|
let ``Simple valid number`` () =
|
|
48
44
|
let input = " 5 9 "
|
|
49
45
|
let expected = true
|
|
50
46
|
let actual = valid input
|
|
51
|
-
|
|
47
|
+
actual |> should equal expected
|
|
52
48
|
|
|
53
|
-
[<
|
|
54
|
-
[<Ignore("Remove to run test")>]
|
|
49
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
55
50
|
let ``Valid Canadian SIN`` () =
|
|
56
51
|
let input = "046 454 286"
|
|
57
52
|
let expected = true
|
|
58
53
|
let actual = valid input
|
|
59
|
-
|
|
54
|
+
actual |> should equal expected
|
|
60
55
|
|
|
61
|
-
[<
|
|
62
|
-
[<Ignore("Remove to run test")>]
|
|
56
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
63
57
|
let ``Another valid SIN`` () =
|
|
64
58
|
let input = "055 444 285"
|
|
65
59
|
let expected = true
|
|
66
60
|
let actual = valid input
|
|
67
|
-
|
|
61
|
+
actual |> should equal expected
|
|
68
62
|
|
|
69
|
-
[<
|
|
70
|
-
[<Ignore("Remove to run test")>]
|
|
63
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
71
64
|
let ``Invalid Canadian SIN`` () =
|
|
72
65
|
let input = "046 454 287"
|
|
73
66
|
let expected = false
|
|
74
67
|
let actual = valid input
|
|
75
|
-
|
|
68
|
+
actual |> should equal expected
|
|
76
69
|
|
|
77
|
-
[<
|
|
78
|
-
[<Ignore("Remove to run test")>]
|
|
70
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
79
71
|
let ``Invalid credit card`` () =
|
|
80
72
|
let input = "8273 1232 7352 0569"
|
|
81
73
|
let expected = false
|
|
82
74
|
let actual = valid input
|
|
83
|
-
|
|
75
|
+
actual |> should equal expected
|
|
84
76
|
|
|
85
|
-
[<
|
|
86
|
-
[<Ignore("Remove to run test")>]
|
|
77
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
87
78
|
let ``Strings that contain non-digits are not valid`` () =
|
|
88
79
|
let input = "827a 1232 7352 0569"
|
|
89
80
|
let expected = false
|
|
90
81
|
let actual = valid input
|
|
91
|
-
|
|
82
|
+
actual |> should equal expected
|
|
92
83
|
|
|
93
|
-
[<
|
|
94
|
-
[<Ignore("Remove to run test")>]
|
|
84
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
95
85
|
let ``Punctuation is not allowed`` () =
|
|
96
86
|
let input = "055-444-285"
|
|
97
87
|
let expected = false
|
|
98
88
|
let actual = valid input
|
|
99
|
-
|
|
89
|
+
actual |> should equal expected
|
|
100
90
|
|
|
101
|
-
[<
|
|
102
|
-
[<Ignore("Remove to run test")>]
|
|
91
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
103
92
|
let ``Symbols are not allowed`` () =
|
|
104
93
|
let input = "055£ 444$ 285"
|
|
105
94
|
let expected = false
|
|
106
95
|
let actual = valid input
|
|
107
|
-
|
|
96
|
+
actual |> 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="Markdown.fs" />
|
|
11
|
+
<Compile Include="MarkdownTest.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,59 +1,60 @@
|
|
|
1
|
-
|
|
1
|
+
module MarkdownTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
|
|
5
6
|
open Markdown
|
|
6
7
|
|
|
7
|
-
[<
|
|
8
|
+
[<Fact>]
|
|
8
9
|
let ``Parses normal text as a paragraph`` () =
|
|
9
10
|
let input = "This will be a paragraph"
|
|
10
11
|
let expected = "<p>This will be a paragraph</p>"
|
|
11
|
-
|
|
12
|
+
parse input |> should equal expected
|
|
12
13
|
|
|
13
|
-
[<
|
|
14
|
+
[<Fact>]
|
|
14
15
|
let ``Parsing italics`` () =
|
|
15
16
|
let input = "_This will be italic_"
|
|
16
17
|
let expected = "<p><em>This will be italic</em></p>"
|
|
17
|
-
|
|
18
|
+
parse input |> should equal expected
|
|
18
19
|
|
|
19
|
-
[<
|
|
20
|
+
[<Fact>]
|
|
20
21
|
let ``Parsing bold text`` () =
|
|
21
22
|
let input = "__This will be bold__"
|
|
22
23
|
let expected = "<p><strong>This will be bold</strong></p>"
|
|
23
|
-
|
|
24
|
+
parse input |> should equal expected
|
|
24
25
|
|
|
25
|
-
[<
|
|
26
|
+
[<Fact>]
|
|
26
27
|
let ``Mixed normal, italics and bold text`` () =
|
|
27
28
|
let input = "This will _be_ __mixed__"
|
|
28
29
|
let expected = "<p>This will <em>be</em> <strong>mixed</strong></p>"
|
|
29
|
-
|
|
30
|
+
parse input |> should equal expected
|
|
30
31
|
|
|
31
|
-
[<
|
|
32
|
+
[<Fact>]
|
|
32
33
|
let ``With h1 header level`` () =
|
|
33
34
|
let input = "# This will be an h1"
|
|
34
35
|
let expected = "<h1>This will be an h1</h1>"
|
|
35
|
-
|
|
36
|
+
parse input |> should equal expected
|
|
36
37
|
|
|
37
|
-
[<
|
|
38
|
+
[<Fact>]
|
|
38
39
|
let ``With h2 header level`` () =
|
|
39
40
|
let input = "## This will be an h2"
|
|
40
41
|
let expected = "<h2>This will be an h2</h2>"
|
|
41
|
-
|
|
42
|
+
parse input |> should equal expected
|
|
42
43
|
|
|
43
|
-
[<
|
|
44
|
+
[<Fact>]
|
|
44
45
|
let ``With h6 header level`` () =
|
|
45
46
|
let input = "###### This will be an h6"
|
|
46
47
|
let expected = "<h6>This will be an h6</h6>"
|
|
47
|
-
|
|
48
|
+
parse input |> should equal expected
|
|
48
49
|
|
|
49
|
-
[<
|
|
50
|
+
[<Fact>]
|
|
50
51
|
let ``Unordered lists`` () =
|
|
51
52
|
let input = "* Item 1\n* Item 2"
|
|
52
53
|
let expected = "<ul><li>Item 1</li><li>Item 2</li></ul>"
|
|
53
|
-
|
|
54
|
+
parse input |> should equal expected
|
|
54
55
|
|
|
55
|
-
[<
|
|
56
|
+
[<Fact>]
|
|
56
57
|
let ``With a little bit of everything`` () =
|
|
57
58
|
let input = "# Header!\n* __Bold Item__\n* _Italic Item_"
|
|
58
59
|
let expected = "<h1>Header!</h1><ul><li><strong>Bold Item</strong></li><li><em>Italic Item</em></li></ul>"
|
|
59
|
-
|
|
60
|
+
parse input |> 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="Matrix.fs" />
|
|
11
|
+
<Compile Include="MatrixTest.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,52 +1,80 @@
|
|
|
1
|
-
|
|
1
|
+
module MatrixTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
|
|
5
6
|
open Matrix
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
[<
|
|
17
|
-
[<
|
|
18
|
-
|
|
19
|
-
let
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
[<
|
|
31
|
-
[<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
let
|
|
51
|
-
|
|
52
|
-
|
|
8
|
+
type MatrixTest() =
|
|
9
|
+
static member ExtractFirstRowData =
|
|
10
|
+
let theoryData = new TheoryData<string, int[]>()
|
|
11
|
+
theoryData.Add("1", [| 1 |])
|
|
12
|
+
theoryData.Add("4 7", [| 4; 7 |])
|
|
13
|
+
theoryData.Add("1 2\n10 20", [| 1; 2 |])
|
|
14
|
+
theoryData.Add("9 7 6\n8 6 5\n5 3 2", [| 9; 7; 6 |])
|
|
15
|
+
theoryData
|
|
16
|
+
|
|
17
|
+
[<Theory>]
|
|
18
|
+
[<MemberData("ExtractFirstRowData")>]
|
|
19
|
+
member this.``Extract first row`` (input: string) expected =
|
|
20
|
+
let matrix = fromString input
|
|
21
|
+
rows matrix |> Array.head |> should equal expected
|
|
22
|
+
|
|
23
|
+
static member ExtractLastRowData =
|
|
24
|
+
let theoryData = new TheoryData<string, int[]>()
|
|
25
|
+
theoryData.Add("5", [| 5 |])
|
|
26
|
+
theoryData.Add("9 7", [| 9; 7 |])
|
|
27
|
+
theoryData.Add("9 8 7\n19 18 17", [| 19; 18; 17 |])
|
|
28
|
+
theoryData.Add("1 4 9\n16 25 36\n5 6 7", [| 5; 6; 7 |])
|
|
29
|
+
theoryData
|
|
30
|
+
|
|
31
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
32
|
+
[<MemberData("ExtractLastRowData")>]
|
|
33
|
+
member this.``Extract last row`` (input: string) expected =
|
|
34
|
+
let matrix = fromString input
|
|
35
|
+
rows matrix |> Array.last |> should equal expected
|
|
36
|
+
|
|
37
|
+
static member ExtractFirstColumnData =
|
|
38
|
+
let theoryData = new TheoryData<string, int[]>()
|
|
39
|
+
theoryData.Add("55 44", [| 55 |])
|
|
40
|
+
theoryData.Add("89 1903\n18 3", [| 89; 18 |])
|
|
41
|
+
theoryData.Add("1 2 3\n4 5 6\n7 8 9\n8 7 6", [| 1; 4; 7; 8 |])
|
|
42
|
+
theoryData
|
|
43
|
+
|
|
44
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
45
|
+
[<MemberData("ExtractFirstColumnData")>]
|
|
46
|
+
member this.``Extract first column`` (input: string) expected =
|
|
47
|
+
let matrix = fromString input
|
|
48
|
+
cols matrix |> Array.head |> should equal expected
|
|
49
|
+
|
|
50
|
+
static member ExtractLastColumnData =
|
|
51
|
+
let theoryData = new TheoryData<string, int[]>()
|
|
52
|
+
theoryData.Add("28", [| 28 |])
|
|
53
|
+
theoryData.Add("13\n16\n19", [| 13; 16; 19 |])
|
|
54
|
+
theoryData.Add("289 21903 23\n218 23 21", [| 23; 21 |])
|
|
55
|
+
theoryData.Add("11 12 13\n14 15 16\n17 18 19\n18 17 16", [| 13; 16; 19; 16 |])
|
|
56
|
+
theoryData
|
|
57
|
+
|
|
58
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
59
|
+
[<MemberData("ExtractLastColumnData")>]
|
|
60
|
+
member this.``Extract last column`` (input: string) expected =
|
|
61
|
+
let matrix = fromString input
|
|
62
|
+
cols matrix |> Array.last |> should equal expected
|
|
63
|
+
|
|
64
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
65
|
+
[<InlineData("28", 1)>]
|
|
66
|
+
[<InlineData("13\n16", 2)>]
|
|
67
|
+
[<InlineData("289 21903\n23 218\n23 21", 3)>]
|
|
68
|
+
[<InlineData("11 12 13\n14 15 16\n17 18 19\n18 17 16", 4)>]
|
|
69
|
+
member this.``Number of rows`` (input: string) expected =
|
|
70
|
+
let matrix = fromString input
|
|
71
|
+
rows matrix |> Array.length |> should equal expected
|
|
72
|
+
|
|
73
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
74
|
+
[<InlineData("28", 1)>]
|
|
75
|
+
[<InlineData("13 2\n16 3\n19 4", 2)>]
|
|
76
|
+
[<InlineData("289 21903\n23 218\n23 21", 2)>]
|
|
77
|
+
[<InlineData("11 12 13\n14 15 16\n17 18 19\n18 17 16", 3)>]
|
|
78
|
+
member this.``Number of columns`` (input: string) expected =
|
|
79
|
+
let matrix = fromString input
|
|
80
|
+
cols matrix |> Array.length |> should equal expected
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|