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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e7eeeb06b8a86deac0f26302dd74e241e7d596ed
|
|
4
|
+
data.tar.gz: 5d9a37663a0b4e73d9f2a4641a49779f53e7942e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 46d57019c6934b15386420eba7ad0292f6785276b68537b4b3ceee85f3e0e972d2c98a64c044aba34bf72668972071179d5081018cf59968f2b0646ef4ae4d81
|
|
7
|
+
data.tar.gz: cea6e2ba9138a5117ddd1f834119d8d1df3b0c232f7d4ce303ef7eeaf35390fc31fc339cdcb7355e76259342bba0d35089ec944e9baca9b4ed997c2878dfa143
|
data/lib/trackler/version.rb
CHANGED
|
@@ -183,12 +183,14 @@
|
|
|
183
183
|
[ "$output" = "Sure." ]
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
186
|
+
# This is commented out because it behaves differently on linux and mac
|
|
187
|
+
# see: https://github.com/exercism/bash/pull/28
|
|
188
|
+
#@test "other whitespace" {
|
|
189
|
+
# run bash bob.sh "\n\r \t\u000b\u00a0\u2002"
|
|
190
|
+
#
|
|
191
|
+
# [ "$status" -eq 0 ]
|
|
192
|
+
# [ "$output" = "Fine. Be that way!" ]
|
|
193
|
+
#}
|
|
192
194
|
|
|
193
195
|
|
|
194
196
|
@test "non-question ending with whitespace" {
|
|
@@ -1,28 +1,52 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
|
|
3
|
+
# Exit on error. Append || true if you expect an error.
|
|
4
|
+
set -o errexit
|
|
5
|
+
# Exit on error inside any functions or subshells.
|
|
6
|
+
set -o errtrace
|
|
7
|
+
# Do not allow use of undefined vars. Use ${VAR:-} to use an undefined VAR
|
|
8
|
+
set -o nounset
|
|
9
|
+
# Catch error even if it's not in after the last pipe.
|
|
10
|
+
set -o pipefail
|
|
11
|
+
# Turn on traces, useful while debugging but commented out by default
|
|
12
|
+
# set -o xtrace
|
|
13
|
+
|
|
14
|
+
#__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
15
|
+
#__file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
|
|
16
|
+
#__base="$(basename ${__file} .sh)"
|
|
17
|
+
|
|
18
|
+
# print argument and exit
|
|
19
|
+
function say() {
|
|
20
|
+
local mesg=${1}
|
|
21
|
+
echo "${mesg}"
|
|
22
|
+
exit 0
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if [[ $# -eq 0 ]]; then
|
|
26
|
+
say "Fine. Be that way!"
|
|
27
|
+
fi
|
|
28
|
+
|
|
3
29
|
# Get what Bob says.
|
|
4
30
|
# %b interprets escapted characters (like '\n' for newline)
|
|
5
31
|
input="$(printf %b "${1}")"
|
|
6
32
|
|
|
7
33
|
# Remove space characters
|
|
8
34
|
input="${input//[[:space:]]/}"
|
|
35
|
+
#input="${input//$(printf '\u00a0')}" # [[:space:]] doesn't match \u00a0 on Linux
|
|
9
36
|
|
|
10
37
|
# Is there silence?
|
|
11
38
|
if [[ "${input}" == "" ]]; then
|
|
12
|
-
|
|
13
|
-
exit 0
|
|
39
|
+
say "Fine. Be that way!"
|
|
14
40
|
fi
|
|
15
41
|
|
|
16
42
|
# Is there shouting (capital letter and no lowercase letters)
|
|
17
43
|
if [[ "$input" == *[[:upper:]]* ]] && [[ "$input" != *[[:lower:]]* ]]; then
|
|
18
|
-
|
|
19
|
-
exit 0
|
|
44
|
+
say "Whoa, chill out!"
|
|
20
45
|
fi
|
|
21
46
|
|
|
22
47
|
# Is it a question? (last character is a '?')
|
|
23
48
|
if [[ "${input: -1}" == "?" ]]; then
|
|
24
|
-
|
|
25
|
-
exit 0
|
|
49
|
+
say "Sure."
|
|
26
50
|
fi
|
|
27
51
|
|
|
28
52
|
# Is it a regular statement ?
|
|
@@ -13,13 +13,11 @@ namespace Generators.Exercises
|
|
|
13
13
|
{
|
|
14
14
|
["subject"] = canonicalDataCase.Input["subject"]
|
|
15
15
|
};
|
|
16
|
-
canonicalDataCase.Input.Remove("subject");
|
|
17
16
|
canonicalDataCase.Input["candidates"] = canonicalDataCase.Input["candidates"].ConvertToEnumerable<string>();
|
|
18
17
|
canonicalDataCase.Expected = canonicalDataCase.Expected.ConvertToEnumerable<string>();
|
|
19
18
|
|
|
20
19
|
canonicalDataCase.UseVariablesForInput = true;
|
|
21
20
|
canonicalDataCase.UseVariableForExpected = true;
|
|
22
|
-
canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
|
|
23
21
|
}
|
|
24
22
|
}
|
|
25
23
|
}
|
|
@@ -13,10 +13,8 @@ namespace Generators.Exercises
|
|
|
13
13
|
{
|
|
14
14
|
["array"] = canonicalDataCase.Input["array"].ConvertToEnumerable<int>()
|
|
15
15
|
};
|
|
16
|
-
canonicalDataCase.Input.Remove("array");
|
|
17
16
|
|
|
18
17
|
canonicalDataCase.UseVariablesForConstructorParameters = true;
|
|
19
|
-
canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
|
|
20
18
|
}
|
|
21
19
|
}
|
|
22
20
|
}
|
|
@@ -13,8 +13,7 @@ namespace Generators.Exercises
|
|
|
13
13
|
{
|
|
14
14
|
["rails"] = canonicalDataCase.Properties["rails"]
|
|
15
15
|
};
|
|
16
|
-
|
|
17
|
-
canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
|
|
16
|
+
|
|
18
17
|
canonicalDataCase.UseVariablesForInput = true;
|
|
19
18
|
canonicalDataCase.UseVariableForExpected = true;
|
|
20
19
|
}
|
|
@@ -9,13 +9,10 @@ namespace Generators.Exercises
|
|
|
9
9
|
{
|
|
10
10
|
foreach (var canonicalDataCase in canonicalData.Cases)
|
|
11
11
|
{
|
|
12
|
-
canonicalDataCase.TestedMethodType = TestedMethodType.Instance;
|
|
13
|
-
|
|
14
12
|
canonicalDataCase.ConstructorInput = new Dictionary<string, object>
|
|
15
13
|
{
|
|
16
14
|
["seconds"] = canonicalDataCase.Properties["seconds"]
|
|
17
15
|
};
|
|
18
|
-
canonicalDataCase.Input.Remove("seconds");
|
|
19
16
|
|
|
20
17
|
canonicalDataCase.Property = $"On_{canonicalDataCase.Input["planet"]}";
|
|
21
18
|
canonicalDataCase.Input.Remove("planet");
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
using System.Collections.Generic;
|
|
3
3
|
using System.ComponentModel.DataAnnotations;
|
|
4
4
|
using Newtonsoft.Json;
|
|
5
|
+
using System.Linq;
|
|
5
6
|
|
|
6
7
|
namespace Generators.Input
|
|
7
8
|
{
|
|
8
9
|
[JsonConverter(typeof(CanonicalDataCaseJsonConverter))]
|
|
9
10
|
public class CanonicalDataCase
|
|
10
11
|
{
|
|
12
|
+
private IDictionary<string, object> _constructorInput;
|
|
13
|
+
|
|
11
14
|
[Required]
|
|
12
15
|
public string Description { get; set; }
|
|
13
16
|
|
|
@@ -18,7 +21,20 @@ namespace Generators.Input
|
|
|
18
21
|
public IDictionary<string, object> Input { get; set; }
|
|
19
22
|
|
|
20
23
|
[JsonIgnore]
|
|
21
|
-
public IDictionary<string, object> ConstructorInput
|
|
24
|
+
public IDictionary<string, object> ConstructorInput
|
|
25
|
+
{
|
|
26
|
+
get
|
|
27
|
+
{
|
|
28
|
+
return _constructorInput;
|
|
29
|
+
}
|
|
30
|
+
set
|
|
31
|
+
{
|
|
32
|
+
RemoveDuplicateInputEntries(value);
|
|
33
|
+
UpdateInstanceType(value);
|
|
34
|
+
|
|
35
|
+
_constructorInput = value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
22
38
|
|
|
23
39
|
public object Expected { get; set; }
|
|
24
40
|
|
|
@@ -38,9 +54,28 @@ namespace Generators.Input
|
|
|
38
54
|
public bool UseVariableForTested { get; set; }
|
|
39
55
|
|
|
40
56
|
[JsonIgnore]
|
|
41
|
-
public TestedMethodType TestedMethodType { get; set; }
|
|
57
|
+
public TestedMethodType TestedMethodType { get; set; }
|
|
42
58
|
|
|
43
59
|
[JsonIgnore]
|
|
44
60
|
public Type ExceptionThrown { get; set; }
|
|
61
|
+
|
|
62
|
+
private void RemoveDuplicateInputEntries(IDictionary<string, object> constructorInputDictionary)
|
|
63
|
+
{
|
|
64
|
+
foreach (var key in constructorInputDictionary.Keys)
|
|
65
|
+
{
|
|
66
|
+
if (Input.ContainsKey(key))
|
|
67
|
+
{
|
|
68
|
+
Input.Remove(key);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private void UpdateInstanceType(IDictionary<string, object> constructorInputDictionary)
|
|
74
|
+
{
|
|
75
|
+
if (constructorInputDictionary.Keys.Any())
|
|
76
|
+
{
|
|
77
|
+
TestedMethodType = TestedMethodType.Instance;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
45
80
|
}
|
|
46
81
|
}
|
|
@@ -69,7 +69,11 @@ describe('Substitution cipher', () => {
|
|
|
69
69
|
.toEqual('qayaeaagaciai');
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
xtest('can wrap', () => {
|
|
72
|
+
xtest('can wrap on encode', () => {
|
|
73
73
|
expect(cipher.encode('zzzzzzzzzz')).toEqual('zabcdefghi');
|
|
74
74
|
});
|
|
75
|
+
|
|
76
|
+
xtest('can wrap on decode', () => {
|
|
77
|
+
expect(cipher.decode('zabcdefghi')).toEqual('zzzzzzzzzz');
|
|
78
|
+
});
|
|
75
79
|
});
|
data/tracks/fsharp/.gitignore
CHANGED
data/tracks/fsharp/.travis.yml
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
language: csharp
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
dist: trusty
|
|
3
|
+
dotnet: 2.0.0
|
|
4
|
+
mono: none
|
|
5
|
+
env:
|
|
6
|
+
global:
|
|
7
|
+
- DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
|
|
8
|
+
- DOTNET_CLI_TELEMETRY_OPTOUT: 1
|
|
9
|
+
addons:
|
|
10
|
+
apt:
|
|
11
|
+
sources:
|
|
12
|
+
- sourceline: 'deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main'
|
|
13
|
+
key_url: 'https://packages.microsoft.com/keys/microsoft.asc'
|
|
14
|
+
packages:
|
|
15
|
+
- dotnet-hostfxr-1.0.1
|
|
16
|
+
- dotnet-sharedframework-microsoft.netcore.app-1.0.5
|
|
7
17
|
script:
|
|
8
18
|
- ./bin/fetch-configlet
|
|
9
19
|
- ./bin/configlet lint .
|
|
10
20
|
- ./build.sh
|
|
21
|
+
cache:
|
|
22
|
+
directories:
|
|
23
|
+
- $HOME/.nuget/packages
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
using System.IO;
|
|
2
|
+
using System.Text.RegularExpressions;
|
|
3
|
+
using System.Threading.Tasks;
|
|
4
|
+
|
|
5
|
+
var target = Argument("target", "Default");
|
|
6
|
+
|
|
7
|
+
var sourceDir = "./exercises";
|
|
8
|
+
var buildDir = "./build";
|
|
9
|
+
|
|
10
|
+
var solutionPath = buildDir + "/Exercises.sln";
|
|
11
|
+
|
|
12
|
+
var parallelOptions = new ParallelOptions { MaxDegreeOfParallelism = System.Environment.ProcessorCount };
|
|
13
|
+
|
|
14
|
+
Task("Clean")
|
|
15
|
+
.Does(() => {
|
|
16
|
+
CleanDirectory(buildDir);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
// Copy everything to build so we make no changes in the actual files.
|
|
20
|
+
Task("CopyExercises")
|
|
21
|
+
.IsDependentOn("Clean")
|
|
22
|
+
.Does(() => {
|
|
23
|
+
CopyDirectory(sourceDir, buildDir);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
Task("EnableAllTests")
|
|
27
|
+
.IsDependentOn("CopyExercises")
|
|
28
|
+
.Does(() => {
|
|
29
|
+
var skipRegex = new Regex(@"Skip = ""Remove to run test""", RegexOptions.Compiled);
|
|
30
|
+
var testFiles = GetFiles(buildDir + "/*/*Test.fs");
|
|
31
|
+
|
|
32
|
+
foreach (var testFile in testFiles) {
|
|
33
|
+
var contents = System.IO.File.ReadAllText(testFile.FullPath);
|
|
34
|
+
|
|
35
|
+
if (skipRegex.IsMatch(contents)) {
|
|
36
|
+
var updatedContents = skipRegex.Replace(contents, "");
|
|
37
|
+
System.IO.File.WriteAllText(testFile.FullPath, updatedContents);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
Task("TestRefactoringProjects")
|
|
43
|
+
.IsDependentOn("EnableAllTests")
|
|
44
|
+
.Does(() => {
|
|
45
|
+
var refactoringProjects =
|
|
46
|
+
GetFiles(buildDir + "/*/TreeBuilding.fsproj")
|
|
47
|
+
+ GetFiles(buildDir + "/*/Ledger.fsproj")
|
|
48
|
+
+ GetFiles(buildDir + "/*/Markdown.fsproj");
|
|
49
|
+
|
|
50
|
+
Parallel.ForEach(refactoringProjects, parallelOptions, (project) => DotNetCoreTest(project.FullPath));
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
Task("ReplaceStubWithExample")
|
|
54
|
+
.IsDependentOn("TestRefactoringProjects")
|
|
55
|
+
.Does(() => {
|
|
56
|
+
var solution = ParseSolution(solutionPath);
|
|
57
|
+
|
|
58
|
+
foreach (var project in solution.Projects) {
|
|
59
|
+
var projectDir = project.Path.GetDirectory();
|
|
60
|
+
var projectName = project.Path.GetFilenameWithoutExtension();
|
|
61
|
+
var stub = projectDir.GetFilePath(projectName).AppendExtension("fs");
|
|
62
|
+
var example = projectDir.GetFilePath("Example.fs");
|
|
63
|
+
|
|
64
|
+
DeleteFile(stub);
|
|
65
|
+
MoveFile(example, stub);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
Task("AddPackagesUsedInExampleImplementations")
|
|
70
|
+
.IsDependentOn("ReplaceStubWithExample")
|
|
71
|
+
.Does(() => {
|
|
72
|
+
var fparsecProjects =
|
|
73
|
+
GetFiles(buildDir + "/*/Alphametics.fsproj")
|
|
74
|
+
+ GetFiles(buildDir + "/*/SgfParsing.fsproj");
|
|
75
|
+
|
|
76
|
+
foreach (var fparsecProject in fparsecProjects) {
|
|
77
|
+
DotNetCoreTool(fparsecProject, "add", "package FParsec");
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
Task("TestUsingExampleImplementation")
|
|
82
|
+
.IsDependentOn("AddPackagesUsedInExampleImplementations")
|
|
83
|
+
.Does(() => {
|
|
84
|
+
var solution = ParseSolution(solutionPath);
|
|
85
|
+
Parallel.ForEach(solution.Projects, parallelOptions, (project) => DotNetCoreTest(project.Path.FullPath));
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
Task("Default")
|
|
89
|
+
.IsDependentOn("TestUsingExampleImplementation")
|
|
90
|
+
.Does(() => { });
|
|
91
|
+
|
|
92
|
+
RunTarget(target);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
$CakeVersion = "0.21.1"
|
|
2
|
+
$DotNetVersion = "2.0.0";
|
|
3
|
+
$DotNetInstallerUri = "https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain/dotnet-install.ps1";
|
|
4
|
+
|
|
5
|
+
# Make sure tools folder exists
|
|
6
|
+
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
|
|
7
|
+
$ToolPath = Join-Path $PSScriptRoot "tools"
|
|
8
|
+
if (!(Test-Path $ToolPath)) {
|
|
9
|
+
Write-Verbose "Creating tools directory..."
|
|
10
|
+
New-Item -Path $ToolPath -Type directory | out-null
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
###########################################################################
|
|
14
|
+
# INSTALL .NET CORE CLI
|
|
15
|
+
###########################################################################
|
|
16
|
+
|
|
17
|
+
Function Remove-PathVariable([string]$VariableToRemove)
|
|
18
|
+
{
|
|
19
|
+
$path = [Environment]::GetEnvironmentVariable("PATH", "User")
|
|
20
|
+
if ($path -ne $null)
|
|
21
|
+
{
|
|
22
|
+
$newItems = $path.Split(';', [StringSplitOptions]::RemoveEmptyEntries) | Where-Object { "$($_)" -inotlike $VariableToRemove }
|
|
23
|
+
[Environment]::SetEnvironmentVariable("PATH", [System.String]::Join(';', $newItems), "User")
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
$path = [Environment]::GetEnvironmentVariable("PATH", "Process")
|
|
27
|
+
if ($path -ne $null)
|
|
28
|
+
{
|
|
29
|
+
$newItems = $path.Split(';', [StringSplitOptions]::RemoveEmptyEntries) | Where-Object { "$($_)" -inotlike $VariableToRemove }
|
|
30
|
+
[Environment]::SetEnvironmentVariable("PATH", [System.String]::Join(';', $newItems), "Process")
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
# Get .NET Core CLI path if installed.
|
|
35
|
+
$FoundDotNetCliVersion = $null;
|
|
36
|
+
if (Get-Command dotnet -ErrorAction SilentlyContinue) {
|
|
37
|
+
$FoundDotNetCliVersion = dotnet --version;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if($FoundDotNetCliVersion -ne $DotNetVersion) {
|
|
41
|
+
$InstallPath = Join-Path $PSScriptRoot ".dotnet"
|
|
42
|
+
if (!(Test-Path $InstallPath)) {
|
|
43
|
+
mkdir -Force $InstallPath | Out-Null;
|
|
44
|
+
}
|
|
45
|
+
(New-Object System.Net.WebClient).DownloadFile($DotNetInstallerUri, "$InstallPath\dotnet-install.ps1");
|
|
46
|
+
& $InstallPath\dotnet-install.ps1 -Version $DotNetVersion -InstallDir $InstallPath;
|
|
47
|
+
|
|
48
|
+
Remove-PathVariable "$InstallPath"
|
|
49
|
+
$env:PATH = "$InstallPath;$env:PATH"
|
|
50
|
+
$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
|
|
51
|
+
$env:DOTNET_CLI_TELEMETRY_OPTOUT=1
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
###########################################################################
|
|
55
|
+
# INSTALL CAKE
|
|
56
|
+
###########################################################################
|
|
57
|
+
|
|
58
|
+
Add-Type -AssemblyName System.IO.Compression.FileSystem
|
|
59
|
+
Function Unzip
|
|
60
|
+
{
|
|
61
|
+
param([string]$zipfile, [string]$outpath)
|
|
62
|
+
|
|
63
|
+
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# Make sure Cake has been installed.
|
|
68
|
+
$CakePath = Join-Path $ToolPath "Cake.CoreCLR.$CakeVersion/Cake.dll"
|
|
69
|
+
if (!(Test-Path $CakePath)) {
|
|
70
|
+
Write-Host "Installing Cake..."
|
|
71
|
+
(New-Object System.Net.WebClient).DownloadFile("https://www.nuget.org/api/v2/package/Cake.CoreCLR/$CakeVersion", "$ToolPath\Cake.CoreCLR.zip")
|
|
72
|
+
Unzip "$ToolPath\Cake.CoreCLR.zip" "$ToolPath/Cake.CoreCLR.$CakeVersion"
|
|
73
|
+
Remove-Item "$ToolPath\Cake.CoreCLR.zip"
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
###########################################################################
|
|
77
|
+
# RUN BUILD SCRIPT
|
|
78
|
+
###########################################################################
|
|
79
|
+
|
|
80
|
+
& dotnet "$CakePath" $args
|
|
81
|
+
exit $LASTEXITCODE
|
data/tracks/fsharp/build.sh
CHANGED
|
@@ -1,33 +1,56 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
# Define directories.
|
|
4
|
+
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
|
|
5
|
+
TOOLS_DIR=$SCRIPT_DIR/tools
|
|
6
|
+
CAKE_VERSION=0.21.1
|
|
7
|
+
CAKE_DLL=$TOOLS_DIR/Cake.CoreCLR.$CAKE_VERSION/Cake.dll
|
|
8
|
+
DOTNET_VERSION=2.0.0
|
|
9
|
+
|
|
10
|
+
# Make sure the tools folder exist.
|
|
11
|
+
if [ ! -d "$TOOLS_DIR" ]; then
|
|
12
|
+
mkdir "$TOOLS_DIR"
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
###########################################################################
|
|
16
|
+
# INSTALL .NET CORE CLI
|
|
17
|
+
###########################################################################
|
|
18
|
+
|
|
19
|
+
if [[ ! $(command -v dotnet) ]] || [ ! $(dotnet --version) == "$DOTNET_VERSION" ] ; then
|
|
20
|
+
echo "Installing .NET CLI..."
|
|
21
|
+
|
|
22
|
+
if [ ! -d "$SCRIPT_DIR/.dotnet" ]; then
|
|
23
|
+
mkdir "$SCRIPT_DIR/.dotnet"
|
|
24
|
+
fi
|
|
25
|
+
curl -Lsfo "$SCRIPT_DIR/.dotnet/dotnet-install.sh" https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain/dotnet-install.sh
|
|
26
|
+
sudo bash "$SCRIPT_DIR/.dotnet/dotnet-install.sh" --version DOTNET_VERSION --install-dir .dotnet --no-path
|
|
27
|
+
export PATH="$SCRIPT_DIR/.dotnet":$PATH
|
|
28
|
+
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
|
|
29
|
+
export DOTNET_CLI_TELEMETRY_OPTOUT=1
|
|
30
|
+
"$SCRIPT_DIR/.dotnet/dotnet" --info
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# ###########################################################################
|
|
34
|
+
# # INSTALL CAKE
|
|
35
|
+
# ###########################################################################
|
|
36
|
+
|
|
37
|
+
if [ ! -f "$CAKE_DLL" ]; then
|
|
38
|
+
curl -Lsfo Cake.CoreCLR.zip "https://www.nuget.org/api/v2/package/Cake.CoreCLR/$CAKE_VERSION" && unzip -q Cake.CoreCLR.zip -d "$TOOLS_DIR/Cake.CoreCLR.$CAKE_VERSION" && rm -f Cake.CoreCLR.zip
|
|
39
|
+
if [ $? -ne 0 ]; then
|
|
40
|
+
echo "An error occured while installing Cake."
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
# Make sure that Cake has been installed.
|
|
46
|
+
if [ ! -f "$CAKE_DLL" ]; then
|
|
47
|
+
echo "Could not find Cake.exe at '$CAKE_DLL'."
|
|
48
|
+
exit 1
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
###########################################################################
|
|
52
|
+
# RUN BUILD SCRIPT
|
|
53
|
+
###########################################################################
|
|
54
|
+
|
|
55
|
+
# Start Cake
|
|
56
|
+
exec dotnet "$CAKE_DLL" "$@"
|
data/tracks/fsharp/config.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"language": "F#",
|
|
3
3
|
"active": true,
|
|
4
|
-
"blurb":
|
|
4
|
+
"blurb": "F# is a strongly-typed, functional language that is part of Microsoft's .NET language stack. Although F# is great for data science problems, it can elegantly handle almost every problem you throw at it.",
|
|
5
5
|
"exercises": [
|
|
6
6
|
{
|
|
7
7
|
"uuid": "302312cc-bd15-4ba0-8f2f-cbf411c40186",
|
|
@@ -102,25 +102,24 @@
|
|
|
102
102
|
]
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
|
-
"uuid": "
|
|
106
|
-
"slug": "
|
|
105
|
+
"uuid": "0ea0d92f-5510-4ba9-b419-3f5ad029b74f",
|
|
106
|
+
"slug": "beer-song",
|
|
107
107
|
"core": true,
|
|
108
|
-
"unlocked_by":
|
|
108
|
+
"unlocked_by": "raindrops",
|
|
109
109
|
"difficulty": 3,
|
|
110
110
|
"topics": [
|
|
111
|
-
"
|
|
112
|
-
"
|
|
111
|
+
"Text formatting",
|
|
112
|
+
"Algorithms"
|
|
113
113
|
]
|
|
114
114
|
},
|
|
115
115
|
{
|
|
116
|
-
"uuid": "
|
|
117
|
-
"slug": "
|
|
116
|
+
"uuid": "528a0023-8687-4524-8318-516d1e432d0d",
|
|
117
|
+
"slug": "queen-attack",
|
|
118
118
|
"core": true,
|
|
119
|
-
"unlocked_by":
|
|
119
|
+
"unlocked_by": null,
|
|
120
120
|
"difficulty": 3,
|
|
121
121
|
"topics": [
|
|
122
|
-
"
|
|
123
|
-
"Algorithms"
|
|
122
|
+
"Tuples"
|
|
124
123
|
]
|
|
125
124
|
},
|
|
126
125
|
{
|
|
@@ -135,13 +134,14 @@
|
|
|
135
134
|
]
|
|
136
135
|
},
|
|
137
136
|
{
|
|
138
|
-
"uuid": "
|
|
139
|
-
"slug": "
|
|
137
|
+
"uuid": "30c3a38e-1e44-4711-887e-fca301c26c1b",
|
|
138
|
+
"slug": "clock",
|
|
140
139
|
"core": true,
|
|
141
140
|
"unlocked_by": null,
|
|
142
141
|
"difficulty": 3,
|
|
143
142
|
"topics": [
|
|
144
|
-
"
|
|
143
|
+
"Time",
|
|
144
|
+
"Structural equality"
|
|
145
145
|
]
|
|
146
146
|
},
|
|
147
147
|
{
|