trackler 2.2.1.22 → 2.2.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/bash/exercises/bob/bob_test.sh +8 -6
- data/tracks/bash/exercises/bob/example.sh +30 -6
- data/tracks/coffeescript/docs/SNIPPET.txt +4 -0
- data/tracks/csharp/generators/Exercises/Allergies.cs +0 -2
- data/tracks/csharp/generators/Exercises/Anagram.cs +0 -2
- data/tracks/csharp/generators/Exercises/BinarySearch.cs +0 -2
- data/tracks/csharp/generators/Exercises/ComplexNumbers.cs +0 -2
- data/tracks/csharp/generators/Exercises/RailFenceCipher.cs +1 -2
- data/tracks/csharp/generators/Exercises/SpaceAge.cs +0 -3
- data/tracks/csharp/generators/Input/CanonicalDataCase.cs +37 -2
- data/tracks/dart/docs/SNIPPET.txt +5 -0
- data/tracks/ecmascript/exercises/simple-cipher/simple-cipher.spec.js +5 -1
- data/tracks/elm/docs/SNIPPET.txt +10 -0
- data/tracks/fortran/docs/SNIPPET.txt +9 -0
- data/tracks/fsharp/.gitignore +2 -2
- data/tracks/fsharp/.travis.yml +18 -5
- data/tracks/fsharp/build.cake +92 -0
- data/tracks/fsharp/build.ps1 +81 -0
- data/tracks/fsharp/build.sh +56 -33
- data/tracks/fsharp/config.json +14 -14
- data/tracks/fsharp/docs/INSTALLATION.md +14 -45
- data/tracks/fsharp/docs/TESTS.md +12 -25
- data/tracks/fsharp/exercises/Exercises.sln +648 -0
- data/tracks/fsharp/exercises/accumulate/Accumulate.fs +3 -0
- data/tracks/fsharp/exercises/accumulate/Accumulate.fsproj +22 -0
- data/tracks/fsharp/exercises/accumulate/AccumulateTest.fs +18 -22
- data/tracks/fsharp/exercises/accumulate/HINTS.md +1 -0
- data/tracks/fsharp/exercises/accumulate/Program.fs +1 -0
- data/tracks/fsharp/exercises/acronym/Acronym.fs +3 -0
- data/tracks/fsharp/exercises/acronym/Acronym.fsproj +22 -0
- data/tracks/fsharp/exercises/acronym/AcronymTest.fs +18 -24
- data/tracks/fsharp/exercises/acronym/Program.fs +1 -0
- data/tracks/fsharp/exercises/all-your-base/AllYourBase.fs +3 -0
- data/tracks/fsharp/exercises/all-your-base/AllYourBase.fsproj +22 -0
- data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +45 -64
- data/tracks/fsharp/exercises/all-your-base/Program.fs +1 -0
- data/tracks/fsharp/exercises/allergies/Allergies.fs +9 -0
- data/tracks/fsharp/exercises/allergies/Allergies.fsproj +22 -0
- data/tracks/fsharp/exercises/allergies/AllergiesTest.fs +47 -51
- data/tracks/fsharp/exercises/allergies/Program.fs +1 -0
- data/tracks/fsharp/exercises/alphametics/Alphametics.fs +3 -0
- data/tracks/fsharp/exercises/alphametics/Alphametics.fsproj +22 -0
- data/tracks/fsharp/exercises/alphametics/AlphameticsTest.fs +19 -25
- data/tracks/fsharp/exercises/alphametics/Example.fs +13 -13
- data/tracks/fsharp/exercises/alphametics/Program.fs +1 -0
- data/tracks/fsharp/exercises/anagram/Anagram.fs +3 -0
- data/tracks/fsharp/exercises/anagram/Anagram.fsproj +22 -0
- data/tracks/fsharp/exercises/anagram/AnagramTest.fs +22 -33
- data/tracks/fsharp/exercises/anagram/Program.fs +1 -0
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fs +3 -0
- data/tracks/fsharp/exercises/atbash-cipher/AtbashCipher.fsproj +22 -0
- data/tracks/fsharp/exercises/atbash-cipher/{AtbashTest.fs → AtbashCipherTest.fs} +18 -24
- data/tracks/fsharp/exercises/atbash-cipher/Program.fs +1 -0
- data/tracks/fsharp/exercises/bank-account/BankAccount.fs +11 -0
- data/tracks/fsharp/exercises/bank-account/BankAccount.fsproj +22 -0
- data/tracks/fsharp/exercises/bank-account/BankAccountTest.fs +16 -19
- data/tracks/fsharp/exercises/bank-account/Program.fs +1 -0
- data/tracks/fsharp/exercises/beer-song/BeerSong.fs +7 -0
- data/tracks/fsharp/exercises/beer-song/BeerSong.fsproj +22 -0
- data/tracks/fsharp/exercises/beer-song/BeerSongTest.fs +17 -22
- data/tracks/fsharp/exercises/beer-song/Program.fs +1 -0
- data/tracks/fsharp/exercises/binary-search/BinarySearch.fs +3 -0
- data/tracks/fsharp/exercises/binary-search/BinarySearch.fsproj +22 -0
- data/tracks/fsharp/exercises/binary-search/BinarySearchTest.fs +21 -28
- data/tracks/fsharp/exercises/binary-search/Program.fs +1 -0
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fs +15 -0
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fsproj +22 -0
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTreeTest.fs +31 -38
- data/tracks/fsharp/exercises/binary-search-tree/Program.fs +1 -0
- data/tracks/fsharp/exercises/bob/Bob.fs +3 -0
- data/tracks/fsharp/exercises/bob/Bob.fsproj +22 -0
- data/tracks/fsharp/exercises/bob/BobTest.fs +33 -46
- data/tracks/fsharp/exercises/bob/Program.fs +1 -0
- data/tracks/fsharp/exercises/book-store/BookStore.fs +3 -0
- data/tracks/fsharp/exercises/book-store/BookStore.fsproj +22 -0
- data/tracks/fsharp/exercises/book-store/BookStoreTest.fs +27 -37
- data/tracks/fsharp/exercises/book-store/Program.fs +1 -0
- data/tracks/fsharp/exercises/bowling/Bowling.fs +7 -0
- data/tracks/fsharp/exercises/bowling/Bowling.fsproj +22 -0
- data/tracks/fsharp/exercises/bowling/BowlingTest.fs +75 -97
- data/tracks/fsharp/exercises/bowling/Example.fs +1 -1
- data/tracks/fsharp/exercises/bowling/Program.fs +1 -0
- data/tracks/fsharp/exercises/bracket-push/BracketPush.fs +3 -0
- data/tracks/fsharp/exercises/bracket-push/BracketPush.fsproj +22 -0
- data/tracks/fsharp/exercises/bracket-push/BracketPushTest.fs +27 -37
- data/tracks/fsharp/exercises/bracket-push/Program.fs +1 -0
- data/tracks/fsharp/exercises/change/Change.fs +3 -0
- data/tracks/fsharp/exercises/change/Change.fsproj +22 -0
- data/tracks/fsharp/exercises/change/ChangeTest.fs +19 -25
- data/tracks/fsharp/exercises/change/Program.fs +1 -0
- data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fs +11 -0
- data/tracks/fsharp/exercises/circular-buffer/CircularBuffer.fsproj +22 -0
- data/tracks/fsharp/exercises/circular-buffer/CircularBufferTest.fs +36 -42
- data/tracks/fsharp/exercises/circular-buffer/Program.fs +1 -0
- data/tracks/fsharp/exercises/clock/Clock.fs +9 -0
- data/tracks/fsharp/exercises/clock/Clock.fsproj +22 -0
- data/tracks/fsharp/exercises/clock/ClockTest.fs +34 -48
- data/tracks/fsharp/exercises/clock/Program.fs +1 -0
- data/tracks/fsharp/exercises/connect/Connect.fs +3 -0
- data/tracks/fsharp/exercises/connect/Connect.fsproj +22 -0
- data/tracks/fsharp/exercises/connect/ConnectTest.fs +19 -25
- data/tracks/fsharp/exercises/connect/Program.fs +1 -0
- data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fs +44 -0
- data/tracks/fsharp/exercises/crypto-square/CryptoSquare.fsproj +22 -0
- data/tracks/fsharp/exercises/crypto-square/CryptoSquareTest.fs +28 -39
- data/tracks/fsharp/exercises/crypto-square/Program.fs +1 -0
- data/tracks/fsharp/exercises/custom-set/CustomSet.fs +29 -0
- data/tracks/fsharp/exercises/custom-set/CustomSet.fsproj +22 -0
- data/tracks/fsharp/exercises/custom-set/CustomSetTest.fs +77 -119
- data/tracks/fsharp/exercises/custom-set/Program.fs +1 -0
- data/tracks/fsharp/exercises/diamond/Diamond.fs +3 -0
- data/tracks/fsharp/exercises/diamond/Diamond.fsproj +22 -0
- data/tracks/fsharp/exercises/diamond/DiamondTest.fs +31 -27
- data/tracks/fsharp/exercises/diamond/Program.fs +1 -0
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fs +7 -0
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquares.fsproj +22 -0
- data/tracks/fsharp/exercises/difference-of-squares/DifferenceOfSquaresTest.fs +21 -28
- data/tracks/fsharp/exercises/difference-of-squares/Program.fs +1 -0
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fs +7 -0
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellman.fsproj +22 -0
- data/tracks/fsharp/exercises/diffie-hellman/DiffieHellmanTest.fs +16 -19
- data/tracks/fsharp/exercises/diffie-hellman/Program.fs +1 -0
- data/tracks/fsharp/exercises/dominoes/Dominoes.fs +3 -0
- data/tracks/fsharp/exercises/dominoes/Dominoes.fsproj +22 -0
- data/tracks/fsharp/exercises/dominoes/DominoesTest.fs +27 -37
- data/tracks/fsharp/exercises/dominoes/Program.fs +1 -0
- data/tracks/fsharp/exercises/dot-dsl/DotDsl.fs +15 -0
- data/tracks/fsharp/exercises/dot-dsl/DotDsl.fsproj +22 -0
- data/tracks/fsharp/exercises/dot-dsl/DotDslTest.fs +27 -31
- data/tracks/fsharp/exercises/dot-dsl/Program.fs +1 -0
- data/tracks/fsharp/exercises/error-handling/ErrorHandling.fs +11 -0
- data/tracks/fsharp/exercises/error-handling/ErrorHandling.fsproj +22 -0
- data/tracks/fsharp/exercises/error-handling/ErrorHandlingTest.fs +20 -25
- data/tracks/fsharp/exercises/error-handling/Program.fs +1 -0
- data/tracks/fsharp/exercises/etl/Etl.fs +3 -0
- data/tracks/fsharp/exercises/etl/Etl.fsproj +22 -0
- data/tracks/fsharp/exercises/etl/{ETLTest.fs → EtlTest.fs} +11 -13
- data/tracks/fsharp/exercises/etl/Program.fs +1 -0
- data/tracks/fsharp/exercises/food-chain/FoodChain.fs +5 -0
- data/tracks/fsharp/exercises/food-chain/FoodChain.fsproj +22 -0
- data/tracks/fsharp/exercises/food-chain/FoodChainTest.fs +13 -16
- data/tracks/fsharp/exercises/food-chain/Program.fs +1 -0
- data/tracks/fsharp/exercises/forth/Forth.fs +3 -0
- data/tracks/fsharp/exercises/forth/Forth.fsproj +22 -0
- data/tracks/fsharp/exercises/forth/ForthTest.fs +44 -57
- data/tracks/fsharp/exercises/forth/Program.fs +1 -0
- data/tracks/fsharp/exercises/gigasecond/Gigasecond.fs +3 -0
- data/tracks/fsharp/exercises/gigasecond/Gigasecond.fsproj +22 -0
- data/tracks/fsharp/exercises/gigasecond/GigasecondTest.fs +9 -10
- data/tracks/fsharp/exercises/gigasecond/Program.fs +1 -0
- data/tracks/fsharp/exercises/go-counting/GoCounting.fs +3 -0
- data/tracks/fsharp/exercises/go-counting/GoCounting.fsproj +22 -0
- data/tracks/fsharp/exercises/go-counting/GoCountingTest.fs +23 -30
- data/tracks/fsharp/exercises/go-counting/Program.fs +1 -0
- data/tracks/fsharp/exercises/grade-school/Example.fs +1 -1
- data/tracks/fsharp/exercises/grade-school/GradeSchool.fs +9 -0
- data/tracks/fsharp/exercises/grade-school/GradeSchool.fsproj +22 -0
- data/tracks/fsharp/exercises/grade-school/GradeSchoolTest.fs +17 -22
- data/tracks/fsharp/exercises/grade-school/Program.fs +1 -0
- data/tracks/fsharp/exercises/grains/Grains.fs +6 -0
- data/tracks/fsharp/exercises/grains/Grains.fsproj +22 -0
- data/tracks/fsharp/exercises/grains/GrainsTest.fs +19 -25
- data/tracks/fsharp/exercises/grains/Program.fs +1 -0
- data/tracks/fsharp/exercises/grep/Grep.fs +3 -0
- data/tracks/fsharp/exercises/grep/Grep.fsproj +22 -0
- data/tracks/fsharp/exercises/grep/GrepTest.fs +332 -348
- data/tracks/fsharp/exercises/grep/Program.fs +1 -0
- data/tracks/fsharp/exercises/hamming/Hamming.fs +3 -0
- data/tracks/fsharp/exercises/hamming/Hamming.fsproj +22 -0
- data/tracks/fsharp/exercises/hamming/HammingTest.fs +15 -19
- data/tracks/fsharp/exercises/hamming/Program.fs +1 -0
- data/tracks/fsharp/exercises/hangman/Hangman.fs +3 -0
- data/tracks/fsharp/exercises/hangman/Hangman.fsproj +22 -0
- data/tracks/fsharp/exercises/hangman/HangmanTest.fs +30 -34
- data/tracks/fsharp/exercises/hangman/Program.fs +1 -0
- data/tracks/fsharp/exercises/hello-world/HelloWorld.fs +3 -0
- data/tracks/fsharp/exercises/hello-world/HelloWorld.fsproj +22 -0
- data/tracks/fsharp/exercises/hello-world/HelloWorldTest.fs +5 -4
- data/tracks/fsharp/exercises/hello-world/Program.fs +1 -0
- data/tracks/fsharp/exercises/house/House.fs +3 -0
- data/tracks/fsharp/exercises/house/House.fsproj +22 -0
- data/tracks/fsharp/exercises/house/HouseTest.fs +5 -4
- data/tracks/fsharp/exercises/house/Program.fs +1 -0
- data/tracks/fsharp/exercises/isogram/Isogram.fs +3 -0
- data/tracks/fsharp/exercises/isogram/Isogram.fsproj +22 -0
- data/tracks/fsharp/exercises/isogram/IsogramTest.fs +21 -28
- data/tracks/fsharp/exercises/isogram/Program.fs +1 -0
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fs +9 -0
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGarden.fsproj +22 -0
- data/tracks/fsharp/exercises/kindergarten-garden/KindergartenGardenTest.fs +51 -0
- data/tracks/fsharp/exercises/kindergarten-garden/Program.fs +1 -0
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fs +3 -0
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProduct.fsproj +22 -0
- data/tracks/fsharp/exercises/largest-series-product/LargestSeriesProductTest.fs +27 -22
- data/tracks/fsharp/exercises/largest-series-product/Program.fs +1 -0
- data/tracks/fsharp/exercises/leap/Leap.fs +3 -0
- data/tracks/fsharp/exercises/leap/Leap.fsproj +22 -0
- data/tracks/fsharp/exercises/leap/LeapTest.fs +11 -13
- data/tracks/fsharp/exercises/leap/Program.fs +1 -0
- data/tracks/fsharp/exercises/ledger/Ledger.fsproj +22 -0
- data/tracks/fsharp/exercises/ledger/LedgerTest.fs +23 -22
- data/tracks/fsharp/exercises/ledger/Program.fs +1 -0
- data/tracks/fsharp/exercises/lens-person/LensPerson.fs +1 -22
- data/tracks/fsharp/exercises/lens-person/LensPerson.fsproj +23 -0
- data/tracks/fsharp/exercises/lens-person/LensPersonTest.fs +11 -13
- data/tracks/fsharp/exercises/lens-person/Program.fs +1 -0
- data/tracks/fsharp/exercises/linked-list/LinkedList.fs +13 -0
- data/tracks/fsharp/exercises/linked-list/LinkedList.fsproj +22 -0
- data/tracks/fsharp/exercises/linked-list/LinkedListTest.fs +28 -33
- data/tracks/fsharp/exercises/linked-list/Program.fs +1 -0
- data/tracks/fsharp/exercises/list-ops/ListOps.fs +17 -0
- data/tracks/fsharp/exercises/list-ops/ListOps.fsproj +22 -0
- data/tracks/fsharp/exercises/list-ops/ListOpsTest.fs +51 -73
- data/tracks/fsharp/exercises/list-ops/Program.fs +1 -0
- data/tracks/fsharp/exercises/luhn/Luhn.fs +3 -0
- data/tracks/fsharp/exercises/luhn/Luhn.fsproj +22 -0
- data/tracks/fsharp/exercises/luhn/LuhnTest.fs +28 -39
- data/tracks/fsharp/exercises/luhn/Program.fs +1 -0
- data/tracks/fsharp/exercises/markdown/Markdown.fsproj +22 -0
- data/tracks/fsharp/exercises/markdown/MarkdownTest.fs +21 -20
- data/tracks/fsharp/exercises/markdown/Program.fs +1 -0
- data/tracks/fsharp/exercises/matrix/Matrix.fs +7 -0
- data/tracks/fsharp/exercises/matrix/Matrix.fsproj +22 -0
- data/tracks/fsharp/exercises/matrix/MatrixTest.fs +76 -48
- data/tracks/fsharp/exercises/matrix/Program.fs +1 -0
- data/tracks/fsharp/exercises/meetup/Meetup.fs +7 -0
- data/tracks/fsharp/exercises/meetup/Meetup.fsproj +22 -0
- data/tracks/fsharp/exercises/meetup/MeetupTest.fs +67 -60
- data/tracks/fsharp/exercises/meetup/Program.fs +1 -0
- data/tracks/fsharp/exercises/minesweeper/Minesweeper.fs +3 -0
- data/tracks/fsharp/exercises/minesweeper/Minesweeper.fsproj +22 -0
- data/tracks/fsharp/exercises/minesweeper/MinesweeperTest.fs +17 -22
- data/tracks/fsharp/exercises/minesweeper/Program.fs +1 -0
- data/tracks/fsharp/exercises/nth-prime/NthPrime.fs +3 -0
- data/tracks/fsharp/exercises/nth-prime/NthPrime.fsproj +22 -0
- data/tracks/fsharp/exercises/nth-prime/NthPrimeTest.fs +25 -34
- data/tracks/fsharp/exercises/nth-prime/Program.fs +1 -0
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fs +5 -0
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCount.fsproj +22 -0
- data/tracks/fsharp/exercises/nucleotide-count/NucleotideCountTest.fs +17 -21
- data/tracks/fsharp/exercises/nucleotide-count/Program.fs +1 -0
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fs +3 -0
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbers.fsproj +22 -0
- data/tracks/fsharp/exercises/ocr-numbers/OcrNumbersTest.fs +33 -46
- data/tracks/fsharp/exercises/ocr-numbers/Program.fs +1 -0
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fs +5 -0
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProducts.fsproj +22 -0
- data/tracks/fsharp/exercises/palindrome-products/PalindromeProductsTest.fs +54 -0
- data/tracks/fsharp/exercises/palindrome-products/Program.fs +1 -0
- data/tracks/fsharp/exercises/pangram/Pangram.fs +3 -0
- data/tracks/fsharp/exercises/pangram/Pangram.fsproj +22 -0
- data/tracks/fsharp/exercises/pangram/PangramTest.fs +23 -31
- data/tracks/fsharp/exercises/pangram/Program.fs +1 -0
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fs +3 -0
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequency.fsproj +22 -0
- data/tracks/fsharp/exercises/parallel-letter-frequency/ParallelLetterFrequencyTest.fs +27 -35
- data/tracks/fsharp/exercises/parallel-letter-frequency/Program.fs +1 -0
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fs +3 -0
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangle.fsproj +22 -0
- data/tracks/fsharp/exercises/pascals-triangle/PascalsTriangleTest.fs +15 -19
- data/tracks/fsharp/exercises/pascals-triangle/Program.fs +1 -0
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fs +5 -0
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbers.fsproj +22 -0
- data/tracks/fsharp/exercises/perfect-numbers/PerfectNumbersTest.fs +18 -14
- data/tracks/fsharp/exercises/perfect-numbers/Program.fs +1 -0
- data/tracks/fsharp/exercises/phone-number/PhoneNumber.fs +3 -0
- data/tracks/fsharp/exercises/phone-number/PhoneNumber.fsproj +22 -0
- data/tracks/fsharp/exercises/phone-number/PhoneNumberTest.fs +23 -31
- data/tracks/fsharp/exercises/phone-number/Program.fs +1 -0
- data/tracks/fsharp/exercises/pig-latin/PigLatin.fs +3 -0
- data/tracks/fsharp/exercises/pig-latin/PigLatin.fsproj +22 -0
- data/tracks/fsharp/exercises/pig-latin/PigLatinTest.fs +39 -44
- data/tracks/fsharp/exercises/pig-latin/Program.fs +1 -0
- data/tracks/fsharp/exercises/poker/Poker.fs +3 -0
- data/tracks/fsharp/exercises/poker/Poker.fsproj +22 -0
- data/tracks/fsharp/exercises/poker/PokerTest.fs +40 -56
- data/tracks/fsharp/exercises/poker/Program.fs +1 -0
- data/tracks/fsharp/exercises/pov/Pov.fs +3 -0
- data/tracks/fsharp/exercises/pov/Pov.fsproj +22 -0
- data/tracks/fsharp/exercises/pov/PovTest.fs +23 -31
- data/tracks/fsharp/exercises/pov/Program.fs +1 -0
- data/tracks/fsharp/exercises/prime-factors/Example.fs +1 -1
- data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fs +3 -0
- data/tracks/fsharp/exercises/prime-factors/PrimeFactors.fsproj +22 -0
- data/tracks/fsharp/exercises/prime-factors/PrimeFactorsTest.fs +22 -30
- data/tracks/fsharp/exercises/prime-factors/Program.fs +1 -0
- data/tracks/fsharp/exercises/protein-translation/Program.fs +1 -0
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fs +3 -0
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslation.fsproj +22 -0
- data/tracks/fsharp/exercises/protein-translation/ProteinTranslationTest.fs +41 -36
- data/tracks/fsharp/exercises/proverb/Program.fs +1 -0
- data/tracks/fsharp/exercises/proverb/Proverb.fs +5 -0
- data/tracks/fsharp/exercises/proverb/Proverb.fsproj +22 -0
- data/tracks/fsharp/exercises/proverb/ProverbTest.fs +11 -13
- data/tracks/fsharp/exercises/pythagorean-triplet/Program.fs +1 -0
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fs +7 -0
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTriplet.fsproj +22 -0
- data/tracks/fsharp/exercises/pythagorean-triplet/PythagoreanTripletTest.fs +19 -20
- data/tracks/fsharp/exercises/queen-attack/Program.fs +1 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttack.fs +3 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttack.fsproj +22 -0
- data/tracks/fsharp/exercises/queen-attack/QueenAttackTest.fs +19 -25
- data/tracks/fsharp/exercises/rail-fence-cipher/Program.fs +1 -0
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fs +5 -0
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipher.fsproj +22 -0
- data/tracks/fsharp/exercises/rail-fence-cipher/RailFenceCipherTest.fs +15 -19
- data/tracks/fsharp/exercises/raindrops/Program.fs +1 -0
- data/tracks/fsharp/exercises/raindrops/Raindrops.fs +3 -0
- data/tracks/fsharp/exercises/raindrops/Raindrops.fsproj +22 -0
- data/tracks/fsharp/exercises/raindrops/RaindropsTest.fs +30 -24
- data/tracks/fsharp/exercises/react/Program.fs +1 -0
- data/tracks/fsharp/exercises/react/React.fs +3 -0
- data/tracks/fsharp/exercises/react/React.fsproj +22 -0
- data/tracks/fsharp/exercises/react/ReactTest.fs +26 -31
- data/tracks/fsharp/exercises/rectangles/Program.fs +1 -0
- data/tracks/fsharp/exercises/rectangles/Rectangles.fs +3 -0
- data/tracks/fsharp/exercises/rectangles/Rectangles.fsproj +22 -0
- data/tracks/fsharp/exercises/rectangles/RectanglesTest.fs +23 -31
- data/tracks/fsharp/exercises/rna-transcription/Program.fs +1 -0
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fs +3 -0
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscription.fsproj +22 -0
- data/tracks/fsharp/exercises/rna-transcription/RnaTranscriptionTest.fs +26 -0
- data/tracks/fsharp/exercises/robot-name/Program.fs +1 -0
- data/tracks/fsharp/exercises/robot-name/RobotName.fs +7 -0
- data/tracks/fsharp/exercises/robot-name/RobotName.fsproj +22 -0
- data/tracks/fsharp/exercises/robot-name/RobotNameTest.fs +12 -13
- data/tracks/fsharp/exercises/robot-simulator/Program.fs +1 -0
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fs +13 -0
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulator.fsproj +22 -0
- data/tracks/fsharp/exercises/robot-simulator/RobotSimulatorTest.fs +16 -20
- data/tracks/fsharp/exercises/roman-numerals/Program.fs +1 -0
- data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fs +3 -0
- data/tracks/fsharp/exercises/roman-numerals/RomanNumerals.fsproj +22 -0
- data/tracks/fsharp/exercises/roman-numerals/RomanNumeralsTest.fs +28 -0
- data/tracks/fsharp/exercises/run-length-encoding/Program.fs +1 -0
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fs +5 -0
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncoding.fsproj +22 -0
- data/tracks/fsharp/exercises/run-length-encoding/RunLengthEncodingTest.fs +17 -22
- data/tracks/fsharp/exercises/saddle-points/Program.fs +1 -0
- data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fs +3 -0
- data/tracks/fsharp/exercises/saddle-points/SaddlePoints.fsproj +22 -0
- data/tracks/fsharp/exercises/saddle-points/{SaddlePointTest.fs → SaddlePointsTest.fs} +13 -16
- data/tracks/fsharp/exercises/say/Program.fs +1 -0
- data/tracks/fsharp/exercises/say/Say.fs +3 -0
- data/tracks/fsharp/exercises/say/Say.fsproj +22 -0
- data/tracks/fsharp/exercises/say/SayTest.fs +35 -49
- data/tracks/fsharp/exercises/scale-generator/Program.fs +1 -0
- data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fs +3 -0
- data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fsproj +22 -0
- data/tracks/fsharp/exercises/scale-generator/ScaleGeneratorTest.fs +31 -43
- data/tracks/fsharp/exercises/scrabble-score/Program.fs +1 -0
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fs +3 -0
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScore.fsproj +22 -0
- data/tracks/fsharp/exercises/scrabble-score/ScrabbleScoreTest.fs +18 -24
- data/tracks/fsharp/exercises/secret-handshake/Program.fs +1 -0
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fs +3 -0
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshake.fsproj +22 -0
- data/tracks/fsharp/exercises/secret-handshake/SecretHandshakeTest.fs +17 -22
- data/tracks/fsharp/exercises/series/Program.fs +1 -0
- data/tracks/fsharp/exercises/series/Series.fs +3 -0
- data/tracks/fsharp/exercises/series/Series.fsproj +22 -0
- data/tracks/fsharp/exercises/series/SeriesTest.fs +53 -55
- data/tracks/fsharp/exercises/sgf-parsing/Program.fs +1 -0
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fs +3 -0
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsing.fsproj +22 -0
- data/tracks/fsharp/exercises/sgf-parsing/SgfParsingTest.fs +27 -37
- data/tracks/fsharp/exercises/sieve/Program.fs +1 -0
- data/tracks/fsharp/exercises/sieve/Sieve.fs +3 -0
- data/tracks/fsharp/exercises/sieve/Sieve.fsproj +22 -0
- data/tracks/fsharp/exercises/sieve/SieveTest.fs +19 -21
- data/tracks/fsharp/exercises/simple-cipher/Program.fs +1 -0
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fs +7 -0
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipher.fsproj +22 -0
- data/tracks/fsharp/exercises/simple-cipher/SimpleCipherTest.fs +39 -54
- data/tracks/fsharp/exercises/simple-linked-list/Program.fs +1 -0
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fs +36 -0
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedList.fsproj +22 -0
- data/tracks/fsharp/exercises/simple-linked-list/SimpleLinkedListTest.fs +36 -40
- data/tracks/fsharp/exercises/space-age/Program.fs +1 -0
- data/tracks/fsharp/exercises/space-age/SpaceAge.fs +5 -0
- data/tracks/fsharp/exercises/space-age/SpaceAge.fsproj +22 -0
- data/tracks/fsharp/exercises/space-age/SpaceAgeTest.fs +26 -32
- data/tracks/fsharp/exercises/strain/Program.fs +1 -0
- data/tracks/fsharp/exercises/strain/Strain.fs +5 -0
- data/tracks/fsharp/exercises/strain/Strain.fsproj +22 -0
- data/tracks/fsharp/exercises/strain/StrainTest.fs +28 -47
- data/tracks/fsharp/exercises/sublist/Program.fs +1 -0
- data/tracks/fsharp/exercises/sublist/Sublist.fs +5 -0
- data/tracks/fsharp/exercises/sublist/Sublist.fsproj +22 -0
- data/tracks/fsharp/exercises/sublist/SublistTest.fs +39 -55
- data/tracks/fsharp/exercises/sum-of-multiples/Program.fs +1 -0
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fs +3 -0
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiples.fsproj +22 -0
- data/tracks/fsharp/exercises/sum-of-multiples/SumOfMultiplesTest.fs +15 -19
- data/tracks/fsharp/exercises/tournament/Program.fs +1 -0
- data/tracks/fsharp/exercises/tournament/Tournament.fs +3 -0
- data/tracks/fsharp/exercises/tournament/Tournament.fsproj +22 -0
- data/tracks/fsharp/exercises/tournament/TournamentTest.fs +9 -10
- data/tracks/fsharp/exercises/transpose/Program.fs +1 -0
- data/tracks/fsharp/exercises/transpose/Transpose.fs +3 -0
- data/tracks/fsharp/exercises/transpose/Transpose.fsproj +22 -0
- data/tracks/fsharp/exercises/transpose/TransposeTest.fs +25 -34
- data/tracks/fsharp/exercises/tree-building/Program.fs +1 -0
- data/tracks/fsharp/exercises/tree-building/TreeBuilding.fsproj +22 -0
- data/tracks/fsharp/exercises/tree-building/TreeBuildingTest.fs +84 -82
- data/tracks/fsharp/exercises/triangle/Program.fs +1 -0
- data/tracks/fsharp/exercises/triangle/Triangle.fs +8 -0
- data/tracks/fsharp/exercises/triangle/Triangle.fsproj +22 -0
- data/tracks/fsharp/exercises/triangle/TriangleTest.fs +31 -43
- data/tracks/fsharp/exercises/twelve-days/Program.fs +1 -0
- data/tracks/fsharp/exercises/twelve-days/TwelveDays.fs +7 -0
- data/tracks/fsharp/exercises/twelve-days/TwelveDays.fsproj +22 -0
- data/tracks/fsharp/exercises/twelve-days/TwelveDaysTest.fs +31 -43
- data/tracks/fsharp/exercises/two-bucket/Program.fs +1 -0
- data/tracks/fsharp/exercises/two-bucket/TwoBucket.fs +3 -0
- data/tracks/fsharp/exercises/two-bucket/TwoBucket.fsproj +22 -0
- data/tracks/fsharp/exercises/two-bucket/TwoBucketTest.fs +11 -13
- data/tracks/fsharp/exercises/two-fer/Program.fs +1 -0
- data/tracks/fsharp/exercises/two-fer/TwoFer.fs +3 -0
- data/tracks/fsharp/exercises/two-fer/TwoFer.fsproj +22 -0
- data/tracks/fsharp/exercises/two-fer/TwoFerTest.fs +9 -10
- data/tracks/fsharp/exercises/variable-length-quantity/Program.fs +1 -0
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fs +3 -0
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantity.fsproj +22 -0
- data/tracks/fsharp/exercises/variable-length-quantity/VariableLengthQuantityTest.fs +42 -50
- data/tracks/fsharp/exercises/word-count/Program.fs +1 -0
- data/tracks/fsharp/exercises/word-count/WordCount.fs +3 -0
- data/tracks/fsharp/exercises/word-count/WordCount.fsproj +22 -0
- data/tracks/fsharp/exercises/word-count/WordCountTest.fs +27 -37
- data/tracks/fsharp/exercises/word-search/Program.fs +1 -0
- data/tracks/fsharp/exercises/word-search/WordSearch.fs +3 -0
- data/tracks/fsharp/exercises/word-search/WordSearch.fsproj +22 -0
- data/tracks/fsharp/exercises/word-search/WordSearchTest.fs +23 -31
- data/tracks/fsharp/exercises/wordy/Program.fs +1 -0
- data/tracks/fsharp/exercises/wordy/Wordy.fs +3 -0
- data/tracks/fsharp/exercises/wordy/Wordy.fsproj +22 -0
- data/tracks/fsharp/exercises/wordy/WordyTest.fs +34 -48
- data/tracks/fsharp/exercises/zebra-puzzle/Example.fs +1 -1
- data/tracks/fsharp/exercises/zebra-puzzle/Program.fs +1 -0
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fs +3 -0
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzle.fsproj +22 -0
- data/tracks/fsharp/exercises/zebra-puzzle/ZebraPuzzleTest.fs +9 -9
- data/tracks/fsharp/exercises/zipper/Program.fs +1 -0
- data/tracks/fsharp/exercises/zipper/Zipper.fs +3 -0
- data/tracks/fsharp/exercises/zipper/Zipper.fsproj +22 -0
- data/tracks/fsharp/exercises/zipper/ZipperTest.fs +19 -25
- data/tracks/javascript/exercises/simple-linked-list/example.js +4 -3
- data/tracks/javascript/exercises/simple-linked-list/simple-linked-list.spec.js +3 -0
- data/tracks/nim/docs/SNIPPET.txt +2 -0
- data/tracks/perl5/docs/SNIPPET.txt +9 -0
- data/tracks/php/docs/SNIPPET.txt +6 -0
- data/tracks/pony/docs/SNIPPET.txt +2 -0
- data/tracks/powershell/docs/SNIPPET.txt +4 -0
- data/tracks/prolog/docs/SNIPPET.txt +6 -0
- data/tracks/python/exercises/simple-cipher/README.md +1 -1
- data/tracks/vimscript/docs/SNIPPET.txt +4 -0
- metadata +334 -17
- data/tracks/fsharp/.paket/paket.bootstrapper.exe +0 -0
- data/tracks/fsharp/build.cmd +0 -14
- data/tracks/fsharp/build.fsx +0 -65
- data/tracks/fsharp/exercises/app.config +0 -11
- data/tracks/fsharp/exercises/exercises.fsproj +0 -225
- data/tracks/fsharp/exercises/kindergarten-garden/KinderGartenGardenTest.fs +0 -55
- data/tracks/fsharp/exercises/paket.references +0 -4
- data/tracks/fsharp/exercises/palindrome-products/PalindromeTest.fs +0 -60
- data/tracks/fsharp/exercises/rna-transcription/RNATranscriptionTest.fs +0 -29
- data/tracks/fsharp/exercises/roman-numerals/RomanNumeralTest.fs +0 -26
- data/tracks/fsharp/paket.dependencies +0 -8
- data/tracks/fsharp/paket.lock +0 -11
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module CustomSet
|
|
2
|
+
|
|
3
|
+
// TODO: define the Set type
|
|
4
|
+
|
|
5
|
+
let empty = failwith "You need to implement this function."
|
|
6
|
+
|
|
7
|
+
let singleton value = { items = [value] }
|
|
8
|
+
|
|
9
|
+
let isEmpty set = set.items.IsEmpty
|
|
10
|
+
|
|
11
|
+
let size set = set.items.Length
|
|
12
|
+
|
|
13
|
+
let fromList list = { items = list |> List.sort |> List.distinct }
|
|
14
|
+
|
|
15
|
+
let toList set = set.items
|
|
16
|
+
|
|
17
|
+
let contains value set = List.contains value set.items
|
|
18
|
+
|
|
19
|
+
let insert value set = value::set.items |> fromList
|
|
20
|
+
|
|
21
|
+
let union left right = left.items @ right.items |> fromList
|
|
22
|
+
|
|
23
|
+
let intersection left right = left.items |> List.filter (fun x -> List.contains x right.items) |> fromList
|
|
24
|
+
|
|
25
|
+
let difference left right = left.items |> List.filter (fun x -> List.contains x right.items |> not) |> fromList
|
|
26
|
+
|
|
27
|
+
let isSubsetOf left right = left.items |> List.forall (fun x -> List.contains x right.items)
|
|
28
|
+
|
|
29
|
+
let isDisjointFrom left right = left.items |> List.exists (fun x -> List.contains x right.items) |> not
|
|
@@ -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="CustomSet.fs" />
|
|
11
|
+
<Compile Include="CustomSetTest.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,271 +1,229 @@
|
|
|
1
|
-
|
|
1
|
+
module CustomSetTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
|
|
5
6
|
open CustomSet
|
|
6
7
|
|
|
7
|
-
[<
|
|
8
|
+
[<Fact>]
|
|
8
9
|
let ``Sets with no elements are empty`` () =
|
|
9
10
|
let actual = empty
|
|
10
|
-
|
|
11
|
+
isEmpty actual |> should equal true
|
|
11
12
|
|
|
12
|
-
[<
|
|
13
|
-
[<Ignore("Remove to run test")>]
|
|
13
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
14
14
|
let ``Sets with elements are not empty`` () =
|
|
15
15
|
let actual = singleton 1
|
|
16
|
-
|
|
16
|
+
isEmpty actual |> should equal false
|
|
17
17
|
|
|
18
|
-
[<
|
|
19
|
-
[<Ignore("Remove to run test")>]
|
|
18
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
20
19
|
let ``Nothing is contained in an empty set`` () =
|
|
21
20
|
let actual = empty
|
|
22
|
-
|
|
21
|
+
contains 1 actual |> should equal false
|
|
23
22
|
|
|
24
|
-
[<
|
|
25
|
-
[<Ignore("Remove to run test")>]
|
|
23
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
26
24
|
let ``Detect if the element is in the set`` () =
|
|
27
25
|
let actual = fromList [1; 2; 3]
|
|
28
|
-
|
|
26
|
+
contains 1 actual |> should equal true
|
|
29
27
|
|
|
30
|
-
[<
|
|
31
|
-
[<Ignore("Remove to run test")>]
|
|
28
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
32
29
|
let ``Detect if the element is not in the set`` () =
|
|
33
30
|
let actual = fromList [1; 2; 3]
|
|
34
|
-
|
|
31
|
+
contains 4 actual |> should equal false
|
|
35
32
|
|
|
36
|
-
[<
|
|
37
|
-
[<Ignore("Remove to run test")>]
|
|
33
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
38
34
|
let ``Empty set is a subset of another empty set`` () =
|
|
39
35
|
let left = empty
|
|
40
36
|
let right = empty
|
|
41
|
-
|
|
37
|
+
isSubsetOf left right |> should equal true
|
|
42
38
|
|
|
43
|
-
[<
|
|
44
|
-
[<Ignore("Remove to run test")>]
|
|
39
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
45
40
|
let ``Empty set is a subset of non-empty set`` () =
|
|
46
41
|
let left = empty
|
|
47
42
|
let right = singleton 1
|
|
48
|
-
|
|
43
|
+
isSubsetOf left right |> should equal true
|
|
49
44
|
|
|
50
|
-
[<
|
|
51
|
-
[<Ignore("Remove to run test")>]
|
|
45
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
52
46
|
let ``Non-empty set is not a subset of empty set`` () =
|
|
53
47
|
let left = singleton 1
|
|
54
48
|
let right = empty
|
|
55
|
-
|
|
49
|
+
isSubsetOf left right |> should equal false
|
|
56
50
|
|
|
57
|
-
[<
|
|
58
|
-
[<Ignore("Remove to run test")>]
|
|
51
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
59
52
|
let ``Set is a subset of set with exact same elements`` () =
|
|
60
53
|
let left = fromList [1; 2; 3]
|
|
61
54
|
let right = fromList [1; 2; 3]
|
|
62
|
-
|
|
55
|
+
isSubsetOf left right |> should equal true
|
|
63
56
|
|
|
64
|
-
[<
|
|
65
|
-
[<Ignore("Remove to run test")>]
|
|
57
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
66
58
|
let ``Set is a subset of larger set with same elements`` () =
|
|
67
59
|
let left = fromList [1; 2; 3]
|
|
68
60
|
let right = fromList [4; 1; 2; 3]
|
|
69
|
-
|
|
61
|
+
isSubsetOf left right |> should equal true
|
|
70
62
|
|
|
71
|
-
[<
|
|
72
|
-
[<Ignore("Remove to run test")>]
|
|
63
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
73
64
|
let ``Set is not a subset of set that does not contain its elements`` () =
|
|
74
65
|
let left = fromList [1; 2; 3]
|
|
75
66
|
let right = fromList [4; 1; 3]
|
|
76
|
-
|
|
67
|
+
isSubsetOf left right |> should equal false
|
|
77
68
|
|
|
78
|
-
[<
|
|
79
|
-
[<Ignore("Remove to run test")>]
|
|
69
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
80
70
|
let ``The empty set is disjoint with itself`` () =
|
|
81
71
|
let left = empty
|
|
82
72
|
let right = empty
|
|
83
|
-
|
|
73
|
+
isDisjointFrom left right |> should equal true
|
|
84
74
|
|
|
85
|
-
[<
|
|
86
|
-
[<Ignore("Remove to run test")>]
|
|
75
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
87
76
|
let ``Empty set is disjoint with non-empty set`` () =
|
|
88
77
|
let left = empty
|
|
89
78
|
let right = singleton 1
|
|
90
|
-
|
|
79
|
+
isDisjointFrom left right |> should equal true
|
|
91
80
|
|
|
92
|
-
[<
|
|
93
|
-
[<Ignore("Remove to run test")>]
|
|
81
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
94
82
|
let ``Non-empty set is disjoint with empty set`` () =
|
|
95
83
|
let left = singleton 1
|
|
96
84
|
let right = empty
|
|
97
|
-
|
|
85
|
+
isDisjointFrom left right |> should equal true
|
|
98
86
|
|
|
99
|
-
[<
|
|
100
|
-
[<Ignore("Remove to run test")>]
|
|
87
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
101
88
|
let ``Sets are not disjoint if they share an element`` () =
|
|
102
89
|
let left = fromList [1; 2]
|
|
103
90
|
let right = fromList [2; 3]
|
|
104
|
-
|
|
91
|
+
isDisjointFrom left right |> should equal false
|
|
105
92
|
|
|
106
|
-
[<
|
|
107
|
-
[<Ignore("Remove to run test")>]
|
|
93
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
108
94
|
let ``Sets are disjoint if they share no elements`` () =
|
|
109
95
|
let left = fromList [1; 2]
|
|
110
96
|
let right = fromList [3; 4]
|
|
111
|
-
|
|
97
|
+
isDisjointFrom left right |> should equal true
|
|
112
98
|
|
|
113
|
-
[<
|
|
114
|
-
[<Ignore("Remove to run test")>]
|
|
99
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
115
100
|
let ``Empty sets are equal`` () =
|
|
116
101
|
let left = empty
|
|
117
102
|
let right = empty
|
|
118
|
-
|
|
103
|
+
(left |> should equal right)
|
|
119
104
|
|
|
120
|
-
[<
|
|
121
|
-
[<Ignore("Remove to run test")>]
|
|
105
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
122
106
|
let ``Empty set is not equal to non-empty set`` () =
|
|
123
107
|
let left = empty
|
|
124
108
|
let right = fromList [1; 2; 3]
|
|
125
|
-
|
|
109
|
+
left |> should not' (equal right)
|
|
126
110
|
|
|
127
|
-
[<
|
|
128
|
-
[<Ignore("Remove to run test")>]
|
|
111
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
129
112
|
let ``Non-empty set is not equal to empty set`` () =
|
|
130
113
|
let left = fromList [1; 2; 3]
|
|
131
114
|
let right = empty
|
|
132
|
-
|
|
115
|
+
left |> should not' (equal right)
|
|
133
116
|
|
|
134
|
-
[<
|
|
135
|
-
[<Ignore("Remove to run test")>]
|
|
117
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
136
118
|
let ``Sets with the same elements are equal`` () =
|
|
137
119
|
let left = fromList [1; 2]
|
|
138
120
|
let right = fromList [2; 1]
|
|
139
|
-
|
|
121
|
+
(left |> should equal right)
|
|
140
122
|
|
|
141
|
-
[<
|
|
142
|
-
[<Ignore("Remove to run test")>]
|
|
123
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
143
124
|
let ``Sets with different elements are not equal`` () =
|
|
144
125
|
let left = fromList [1; 2; 3]
|
|
145
126
|
let right = fromList [1; 2; 4]
|
|
146
|
-
|
|
127
|
+
left |> should not' (equal right)
|
|
147
128
|
|
|
148
|
-
[<
|
|
149
|
-
[<Ignore("Remove to run test")>]
|
|
129
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
150
130
|
let ``Add to empty set`` () =
|
|
151
131
|
let actual = empty |> insert 3
|
|
152
132
|
let expected = fromList [3]
|
|
153
|
-
|
|
133
|
+
actual |> should equal expected
|
|
154
134
|
|
|
155
|
-
[<
|
|
156
|
-
[<Ignore("Remove to run test")>]
|
|
135
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
157
136
|
let ``Add to non-empty set`` () =
|
|
158
137
|
let actual = fromList [1; 2; 4] |> insert 3
|
|
159
138
|
let expected = fromList [1; 2; 3; 4]
|
|
160
|
-
|
|
139
|
+
actual |> should equal expected
|
|
161
140
|
|
|
162
|
-
[<
|
|
163
|
-
[<Ignore("Remove to run test")>]
|
|
141
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
164
142
|
let ``Adding an existing element does not change the set`` () =
|
|
165
143
|
let actual = fromList [1; 2; 3] |> insert 3
|
|
166
144
|
let expected = fromList [1; 2; 3]
|
|
167
|
-
|
|
145
|
+
actual |> should equal expected
|
|
168
146
|
|
|
169
|
-
[<
|
|
170
|
-
[<Ignore("Remove to run test")>]
|
|
147
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
171
148
|
let ``Intersection of two empty sets is an empty set`` () =
|
|
172
149
|
let left = empty
|
|
173
150
|
let right = empty
|
|
174
|
-
|
|
175
|
-
Assert.That(intersection left right = expected)
|
|
151
|
+
intersection left right |> isEmpty |> should equal true
|
|
176
152
|
|
|
177
|
-
[<
|
|
178
|
-
[<Ignore("Remove to run test")>]
|
|
153
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
179
154
|
let ``Intersection of an empty set and non-empty set is an empty set`` () =
|
|
180
155
|
let left = empty
|
|
181
156
|
let right = fromList [3; 2; 5]
|
|
182
|
-
|
|
183
|
-
Assert.That(intersection left right = expected)
|
|
157
|
+
intersection left right |> isEmpty |> should equal true
|
|
184
158
|
|
|
185
|
-
[<
|
|
186
|
-
[<Ignore("Remove to run test")>]
|
|
159
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
187
160
|
let ``Intersection of a non-empty set and an empty set is an empty set`` () =
|
|
188
161
|
let left = fromList [1; 2; 3; 4]
|
|
189
162
|
let right = empty
|
|
190
|
-
|
|
191
|
-
Assert.That(intersection left right = expected)
|
|
163
|
+
intersection left right |> isEmpty |> should equal true
|
|
192
164
|
|
|
193
|
-
[<
|
|
194
|
-
[<Ignore("Remove to run test")>]
|
|
165
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
195
166
|
let ``Intersection of two sets with no shared elements is an empty set`` () =
|
|
196
167
|
let left = fromList [1; 2; 3]
|
|
197
168
|
let right = fromList [4; 5; 6]
|
|
198
|
-
|
|
199
|
-
Assert.That(intersection left right = expected)
|
|
169
|
+
intersection left right |> isEmpty |> should equal true
|
|
200
170
|
|
|
201
|
-
[<
|
|
202
|
-
[<Ignore("Remove to run test")>]
|
|
171
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
203
172
|
let ``Intersection of two sets with shared elements is a set of the shared elements`` () =
|
|
204
173
|
let left = fromList [1; 2; 3; 4]
|
|
205
174
|
let right = fromList [3; 2; 5]
|
|
206
175
|
let expected = fromList [2; 3]
|
|
207
|
-
|
|
176
|
+
intersection left right |> should equal expected
|
|
208
177
|
|
|
209
|
-
[<
|
|
210
|
-
[<Ignore("Remove to run test")>]
|
|
178
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
211
179
|
let ``Difference of two empty sets is an empty set`` () =
|
|
212
180
|
let left = empty
|
|
213
181
|
let right = empty
|
|
214
|
-
|
|
215
|
-
Assert.That(difference left right = expected)
|
|
182
|
+
difference left right |> isEmpty |> should equal true
|
|
216
183
|
|
|
217
|
-
[<
|
|
218
|
-
[<Ignore("Remove to run test")>]
|
|
184
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
219
185
|
let ``Difference of an empty set and non-empty set is an empty set`` () =
|
|
220
186
|
let left = empty
|
|
221
187
|
let right = fromList [3; 2; 5]
|
|
222
|
-
|
|
223
|
-
Assert.That(difference left right = expected)
|
|
188
|
+
difference left right |> isEmpty |> should equal true
|
|
224
189
|
|
|
225
|
-
[<
|
|
226
|
-
[<Ignore("Remove to run test")>]
|
|
190
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
227
191
|
let ``Difference of a non-empty set and an empty set is an empty set`` () =
|
|
228
192
|
let left = fromList [1; 2; 3; 4]
|
|
229
193
|
let right = empty
|
|
230
194
|
let expected = fromList [1; 2; 3; 4]
|
|
231
|
-
|
|
195
|
+
difference left right |> should equal expected
|
|
232
196
|
|
|
233
|
-
[<
|
|
234
|
-
[<Ignore("Remove to run test")>]
|
|
197
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
235
198
|
let ``Difference of two non-empty sets is a set of elements that are only in the first set`` () =
|
|
236
199
|
let left = fromList [3; 2; 1]
|
|
237
200
|
let right = fromList [2; 4]
|
|
238
201
|
let expected = fromList [1; 3]
|
|
239
|
-
|
|
202
|
+
difference left right |> should equal expected
|
|
240
203
|
|
|
241
|
-
[<
|
|
242
|
-
[<Ignore("Remove to run test")>]
|
|
204
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
243
205
|
let ``Union of two empty sets is an empty set`` () =
|
|
244
206
|
let left = empty
|
|
245
207
|
let right = empty
|
|
246
|
-
|
|
247
|
-
Assert.That(union left right = expected)
|
|
208
|
+
union left right |> isEmpty |> should equal true
|
|
248
209
|
|
|
249
|
-
[<
|
|
250
|
-
[<Ignore("Remove to run test")>]
|
|
210
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
251
211
|
let ``Union of an empty set and non-empty set is the non-empty set`` () =
|
|
252
212
|
let left = empty
|
|
253
213
|
let right = fromList [2]
|
|
254
214
|
let expected = fromList [2]
|
|
255
|
-
|
|
215
|
+
union left right |> should equal expected
|
|
256
216
|
|
|
257
|
-
[<
|
|
258
|
-
[<Ignore("Remove to run test")>]
|
|
217
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
259
218
|
let ``Union of a non-empty set and empty set is the non-empty set`` () =
|
|
260
219
|
let left = fromList [1; 3]
|
|
261
220
|
let right = empty
|
|
262
221
|
let expected = fromList [1; 3]
|
|
263
|
-
|
|
222
|
+
union left right |> should equal expected
|
|
264
223
|
|
|
265
|
-
[<
|
|
266
|
-
[<Ignore("Remove to run test")>]
|
|
224
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
267
225
|
let ``Union of non-empty sets contains all unique elements`` () =
|
|
268
226
|
let left = fromList [1; 3]
|
|
269
227
|
let right = fromList [2; 3]
|
|
270
228
|
let expected = fromList [3; 2; 1]
|
|
271
|
-
|
|
229
|
+
union left right |> 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="Diamond.fs" />
|
|
11
|
+
<Compile Include="DiamondTest.fs" />
|
|
12
|
+
<Compile Include="Program.fs" />
|
|
13
|
+
</ItemGroup>
|
|
14
|
+
|
|
15
|
+
<ItemGroup>
|
|
16
|
+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
|
|
17
|
+
<PackageReference Include="xunit" Version="2.3.0-beta5-build3769" />
|
|
18
|
+
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta5-build3769" />
|
|
19
|
+
<PackageReference Include="FsUnit.xUnit" Version="3.0.0" />
|
|
20
|
+
</ItemGroup>
|
|
21
|
+
|
|
22
|
+
</Project>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
module DiamondTest
|
|
2
2
|
|
|
3
3
|
open Diamond
|
|
4
4
|
open System
|
|
5
|
-
open
|
|
5
|
+
open Xunit
|
|
6
|
+
open FsUnit.Xunit
|
|
6
7
|
|
|
7
8
|
type DiamondTest() =
|
|
8
9
|
let split (x: string) = x.Split([| '\n' |], StringSplitOptions.None)
|
|
@@ -12,26 +13,27 @@ type DiamondTest() =
|
|
|
12
13
|
let leadingSpaces (x:string) = x.Substring(0, x.IndexOfAny [|'A'..'Z'|])
|
|
13
14
|
|
|
14
15
|
let trailingSpaces (x:string) = x.Substring(x.LastIndexOfAny [|'A'..'Z'|] + 1)
|
|
15
|
-
|
|
16
|
-
[<
|
|
16
|
+
|
|
17
|
+
[<Theory>]
|
|
18
|
+
[<MemberData("Letters")>]
|
|
17
19
|
member this.``First row contains 'A'`` (letter:char) =
|
|
18
20
|
let actual = make letter
|
|
19
21
|
let rows = actual |> split
|
|
20
22
|
let firstRowCharacters = rows |> Seq.head |> trim
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
firstRowCharacters |> should equal "A"
|
|
23
25
|
|
|
24
|
-
[<
|
|
25
|
-
[<
|
|
26
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
27
|
+
[<MemberData("Letters")>]
|
|
26
28
|
member this.``All rows must have symmetric contour`` (letter:char) =
|
|
27
29
|
let actual = make letter
|
|
28
30
|
let rows = actual |> split
|
|
29
31
|
let symmetric (row:string) = leadingSpaces row = trailingSpaces row
|
|
30
|
-
|
|
31
|
-
Assert.That(rows, Is.All.Matches(symmetric))
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
rows |> Array.iter (fun x -> symmetric x |> should equal true)
|
|
34
|
+
|
|
35
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
36
|
+
[<MemberData("Letters")>]
|
|
35
37
|
member this.``Top of figure has letters in correct order`` (letter:char) =
|
|
36
38
|
let actual = make letter
|
|
37
39
|
|
|
@@ -40,14 +42,13 @@ type DiamondTest() =
|
|
|
40
42
|
let firstNonSpaceLetters =
|
|
41
43
|
rows
|
|
42
44
|
|> Seq.take expected.Length
|
|
43
|
-
|> Seq.map trim
|
|
44
|
-
|> Seq.map Seq.head
|
|
45
|
+
|> Seq.map (trim >> Seq.head)
|
|
45
46
|
|> Seq.toList
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
expected |> should equal firstNonSpaceLetters
|
|
48
49
|
|
|
49
|
-
[<
|
|
50
|
-
[<
|
|
50
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
51
|
+
[<MemberData("Letters")>]
|
|
51
52
|
member this.``Figure is symmetric around the horizontal axis`` (letter:char) =
|
|
52
53
|
let actual = make letter
|
|
53
54
|
|
|
@@ -63,10 +64,10 @@ type DiamondTest() =
|
|
|
63
64
|
|> Seq.takeWhile (fun x -> not (x.Contains(string letter)))
|
|
64
65
|
|> List.ofSeq
|
|
65
66
|
|
|
66
|
-
|
|
67
|
+
top |> should equal bottom
|
|
67
68
|
|
|
68
|
-
[<
|
|
69
|
-
[<
|
|
69
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
70
|
+
[<MemberData("Letters")>]
|
|
70
71
|
member this.``Diamond has square shape`` (letter:char) =
|
|
71
72
|
let actual = make letter
|
|
72
73
|
|
|
@@ -74,10 +75,10 @@ type DiamondTest() =
|
|
|
74
75
|
let expected = rows.Length
|
|
75
76
|
let correctWidth (x:string) = x.Length = expected
|
|
76
77
|
|
|
77
|
-
|
|
78
|
+
rows |> Array.iter (fun x -> correctWidth x |> should equal true)
|
|
78
79
|
|
|
79
|
-
[<
|
|
80
|
-
[<
|
|
80
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
81
|
+
[<MemberData("Letters")>]
|
|
81
82
|
member this.``All rows except top and bottom have two identical letters`` (letter:char) =
|
|
82
83
|
let actual = make letter
|
|
83
84
|
|
|
@@ -91,10 +92,10 @@ type DiamondTest() =
|
|
|
91
92
|
let identicalCharacters = row.Replace(" ", "") |> Seq.distinct |> Seq.length = 1
|
|
92
93
|
twoCharacters && identicalCharacters
|
|
93
94
|
|
|
94
|
-
|
|
95
|
+
rows |> Array.iter (fun x -> twoIdenticalLetters x |> should equal true)
|
|
95
96
|
|
|
96
|
-
[<
|
|
97
|
-
[<
|
|
97
|
+
[<Theory(Skip = "Remove to run test")>]
|
|
98
|
+
[<MemberData("Letters")>]
|
|
98
99
|
member this.``Bottom left corner spaces are triangle`` (letter:char) =
|
|
99
100
|
let actual = make letter
|
|
100
101
|
|
|
@@ -116,6 +117,9 @@ type DiamondTest() =
|
|
|
116
117
|
|> Seq.take spaceCounts.Length
|
|
117
118
|
|> Seq.toList
|
|
118
119
|
|
|
119
|
-
|
|
120
|
+
spaceCounts |> should equal expected
|
|
120
121
|
|
|
121
|
-
static member Letters =
|
|
122
|
+
static member Letters =
|
|
123
|
+
let theoryData = new TheoryData<char>()
|
|
124
|
+
[ 'A' .. 'Z' ] |> List.iter (fun c -> theoryData.Add(c))
|
|
125
|
+
theoryData
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
module DifferenceOfSquares
|
|
2
|
+
|
|
3
|
+
let squareOfSums (number: int): int = failwith "You need to implement this function."
|
|
4
|
+
|
|
5
|
+
let sumOfSquares (number: int): int = failwith "You need to implement this function."
|
|
6
|
+
|
|
7
|
+
let difference (number: int): int = failwith "You need to implement this function."
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<PropertyGroup>
|
|
4
|
+
<TargetFramework>netcoreapp2.0</TargetFramework>
|
|
5
|
+
|
|
6
|
+
<IsPackable>false</IsPackable>
|
|
7
|
+
</PropertyGroup>
|
|
8
|
+
|
|
9
|
+
<ItemGroup>
|
|
10
|
+
<Compile Include="DifferenceOfSquares.fs" />
|
|
11
|
+
<Compile Include="DifferenceOfSquaresTest.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,48 +1,41 @@
|
|
|
1
|
-
|
|
1
|
+
module DifferenceOfSquaresTest
|
|
2
2
|
|
|
3
|
-
open
|
|
3
|
+
open Xunit
|
|
4
|
+
open FsUnit.Xunit
|
|
4
5
|
open DifferenceOfSquares
|
|
5
6
|
|
|
6
|
-
[<
|
|
7
|
+
[<Fact>]
|
|
7
8
|
let ``Square of sums to 5`` () =
|
|
8
|
-
|
|
9
|
+
squareOfSums 5 |> should equal 225
|
|
9
10
|
|
|
10
|
-
[<
|
|
11
|
-
[<Ignore("Remove to run test")>]
|
|
11
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
12
12
|
let ``Sum of squares to 5`` () =
|
|
13
|
-
|
|
13
|
+
sumOfSquares 5 |> should equal 55
|
|
14
14
|
|
|
15
|
-
[<
|
|
16
|
-
[<Ignore("Remove to run test")>]
|
|
15
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
17
16
|
let ``Difference of sums to 5`` () =
|
|
18
|
-
|
|
17
|
+
difference 5 |> should equal 170
|
|
19
18
|
|
|
20
|
-
[<
|
|
21
|
-
[<Ignore("Remove to run test")>]
|
|
19
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
22
20
|
let ``Square of sums to 10`` () =
|
|
23
|
-
|
|
21
|
+
squareOfSums 10 |> should equal 3025
|
|
24
22
|
|
|
25
|
-
[<
|
|
26
|
-
[<Ignore("Remove to run test")>]
|
|
23
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
27
24
|
let ``Sum of squares to 10`` () =
|
|
28
|
-
|
|
25
|
+
sumOfSquares 10 |> should equal 385
|
|
29
26
|
|
|
30
|
-
[<
|
|
31
|
-
[<Ignore("Remove to run test")>]
|
|
27
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
32
28
|
let ``Difference of sums to 10`` () =
|
|
33
|
-
|
|
29
|
+
difference 10 |> should equal 2640
|
|
34
30
|
|
|
35
|
-
[<
|
|
36
|
-
[<Ignore("Remove to run test")>]
|
|
31
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
37
32
|
let ``Square of sums to 100`` () =
|
|
38
|
-
|
|
33
|
+
squareOfSums 100 |> should equal 25502500
|
|
39
34
|
|
|
40
|
-
[<
|
|
41
|
-
[<Ignore("Remove to run test")>]
|
|
35
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
42
36
|
let ``Sum of squares to 100`` () =
|
|
43
|
-
|
|
37
|
+
sumOfSquares 100 |> should equal 338350
|
|
44
38
|
|
|
45
|
-
[<
|
|
46
|
-
[<Ignore("Remove to run test")>]
|
|
39
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
47
40
|
let ``Difference of sums to 100`` () =
|
|
48
|
-
|
|
41
|
+
difference 100 |> should equal 25164150
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module Program = let [<EntryPoint>] main _ = 0
|