trackler 2.2.1.105 → 2.2.1.106
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/problem-specifications/.travis.yml +1 -41
- data/problem-specifications/exercises/bowling/canonical-data.json +17 -1
- data/problem-specifications/exercises/circular-buffer/canonical-data.json +317 -278
- data/problem-specifications/exercises/forth/canonical-data.json +155 -67
- data/problem-specifications/exercises/grains/canonical-data.json +32 -11
- data/problem-specifications/exercises/grep/canonical-data.json +106 -64
- data/problem-specifications/exercises/house/canonical-data.json +57 -29
- data/problem-specifications/exercises/isogram/canonical-data.json +28 -10
- data/problem-specifications/exercises/list-ops/canonical-data.json +77 -39
- data/problem-specifications/exercises/pov/canonical-data.json +386 -355
- data/problem-specifications/exercises/trinary/canonical-data.json +34 -12
- data/problem-specifications/exercises/two-bucket/description.md +1 -1
- data/problem-specifications/exercises/word-search/canonical-data.json +309 -269
- data/problem-specifications/exercises/zipper/canonical-data.json +337 -311
- data/tracks/bash/docs/ABOUT.md +22 -2
- data/tracks/c/exercises/bob/README.md +2 -0
- data/tracks/c/exercises/bob/src/example.c +4 -2
- data/tracks/c/exercises/bob/test/test_bob.c +82 -12
- data/tracks/c/exercises/palindrome-products/src/example.c +100 -27
- data/tracks/c/exercises/palindrome-products/src/example.h +19 -4
- data/tracks/c/exercises/palindrome-products/test/test_palindrome_products.c +178 -10
- data/tracks/common-lisp/exercises/bob/README.md +2 -0
- data/tracks/common-lisp/exercises/bob/bob-test.lisp +45 -8
- data/tracks/common-lisp/exercises/bob/example.lisp +11 -7
- data/tracks/cpp/docs/INSTALLATION.md +1 -1
- data/tracks/cpp/exercises/leap/leap_test.cpp +1 -1
- data/tracks/elixir/exercises/pig-latin/example.exs +1 -2
- data/tracks/elixir/exercises/pig-latin/pig_latin_test.exs +13 -4
- data/tracks/elm/config.json +4 -4
- data/tracks/elm/exercises/bob/Bob.example.elm +3 -1
- data/tracks/elm/exercises/bob/README.md +2 -0
- data/tracks/elm/exercises/bob/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/phone-number/PhoneNumber.example.elm +33 -18
- data/tracks/elm/exercises/phone-number/tests/Tests.elm +40 -19
- data/tracks/elm/exercises/space-age/tests/Tests.elm +8 -8
- data/tracks/fsharp/exercises/all-your-base/AllYourBaseTest.fs +2 -2
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTree.fs +3 -7
- data/tracks/fsharp/exercises/binary-search-tree/BinarySearchTreeTest.fs +63 -37
- data/tracks/fsharp/exercises/binary-search-tree/Example.fs +5 -5
- data/tracks/fsharp/exercises/circular-buffer/CircularBufferTest.fs +0 -13
- data/tracks/fsharp/exercises/complex-numbers/ComplexNumbersTest.fs +7 -1
- data/tracks/fsharp/exercises/react/ReactTest.fs +0 -12
- data/tracks/fsharp/exercises/scale-generator/Example.fs +11 -7
- data/tracks/fsharp/exercises/scale-generator/ScaleGenerator.fs +1 -1
- data/tracks/fsharp/exercises/scale-generator/ScaleGeneratorTest.fs +34 -49
- data/tracks/fsharp/generators/Common.fs +1 -1
- data/tracks/fsharp/generators/Exercise.fs +3 -2
- data/tracks/fsharp/generators/Generators.fs +95 -29
- data/tracks/fsharp/generators/Templates/_TestFunction.liquid +1 -1
- data/tracks/fsharp/generators/Templates/_TestFunctionBody.liquid +3 -1
- data/tracks/fsharp/generators/Templates/_TestMember.liquid +1 -1
- data/tracks/fsharp/generators/Templates/_TestMemberBody.liquid +3 -1
- data/tracks/go/exercises/simple-linked-list/linked_list_test.go +17 -13
- data/tracks/haskell/config.json +10 -0
- data/tracks/haskell/exercises/all-your-base/package.yaml +1 -1
- data/tracks/haskell/exercises/all-your-base/test/Tests.hs +1 -1
- data/tracks/haskell/exercises/bowling/package.yaml +1 -1
- data/tracks/haskell/exercises/bowling/test/Tests.hs +8 -0
- data/tracks/haskell/exercises/complex-numbers/package.yaml +1 -1
- data/tracks/haskell/exercises/diamond/examples/success-standard/src/Diamond.hs +2 -2
- data/tracks/haskell/exercises/diamond/package.yaml +1 -1
- data/tracks/haskell/exercises/diamond/src/Diamond.hs +1 -1
- data/tracks/haskell/exercises/diamond/test/Tests.hs +1 -1
- data/tracks/haskell/exercises/forth/package.yaml +1 -1
- data/tracks/haskell/exercises/grains/package.yaml +1 -1
- data/tracks/haskell/exercises/isogram/package.yaml +1 -1
- data/tracks/haskell/exercises/list-ops/package.yaml +1 -1
- data/tracks/haskell/exercises/list-ops/test/Tests.hs +81 -76
- data/tracks/haskell/exercises/pov/package.yaml +1 -1
- data/tracks/haskell/exercises/protein-translation/README.md +102 -0
- data/tracks/haskell/exercises/protein-translation/examples/success-standard/package.yaml +17 -0
- data/tracks/haskell/exercises/protein-translation/examples/success-standard/src/ProteinTranslation.hs +24 -0
- data/tracks/haskell/exercises/protein-translation/package.yaml +20 -0
- data/tracks/haskell/exercises/protein-translation/src/ProteinTranslation.hs +4 -0
- data/tracks/haskell/exercises/protein-translation/stack.yaml +1 -0
- data/tracks/haskell/exercises/protein-translation/test/Tests.hs +119 -0
- data/tracks/haskell/exercises/zipper/package.yaml +1 -1
- data/tracks/java/.github/PULL_REQUEST_TEMPLATE.md +1 -1
- data/tracks/java/config.json +13 -0
- data/tracks/java/exercises/atbash-cipher/src/test/java/AtbashTest.java +78 -62
- data/tracks/java/exercises/binary/.meta/version +1 -0
- data/tracks/java/exercises/binary/src/test/java/BinaryTest.java +97 -32
- data/tracks/java/exercises/bracket-push/.meta/version +1 -1
- data/tracks/java/exercises/isbn-verifier/.meta/version +1 -1
- data/tracks/java/exercises/isbn-verifier/src/test/java/IsbnVerifierTest.java +6 -0
- data/tracks/java/exercises/matrix/.meta/src/reference/java/Matrix.java +0 -8
- data/tracks/java/exercises/matrix/.meta/version +2 -0
- data/tracks/java/exercises/matrix/src/test/java/MatrixTest.java +95 -193
- data/tracks/java/exercises/octal/src/test/java/OctalTest.java +81 -32
- data/tracks/java/exercises/pascals-triangle/.meta/version +1 -1
- data/tracks/java/exercises/phone-number/.meta/version +1 -1
- data/tracks/java/exercises/pig-latin/.meta/version +1 -1
- data/tracks/java/exercises/pig-latin/src/test/java/PigLatinTranslatorTest.java +116 -55
- data/tracks/java/exercises/prime-factors/src/test/java/PrimeFactorsCalculatorTest.java +42 -24
- data/tracks/java/exercises/raindrops/.meta/version +1 -1
- data/tracks/java/exercises/raindrops/src/test/java/RaindropConverterTest.java +97 -41
- data/tracks/java/exercises/reverse-string/.meta/version +1 -1
- data/tracks/java/exercises/roman-numerals/src/test/java/RomanNumeralsTest.java +118 -37
- data/tracks/java/exercises/run-length-encoding/.meta/version +1 -0
- data/tracks/java/exercises/scrabble-score/src/test/java/ScrabbleScoreTest.java +71 -29
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/java/exercises/two-bucket/.meta/src/reference/java/TwoBucket.java +145 -0
- data/tracks/java/exercises/two-bucket/.meta/version +1 -0
- data/tracks/java/exercises/two-bucket/README.md +48 -0
- data/tracks/java/exercises/two-bucket/build.gradle +18 -0
- data/{problem-specifications/exercises/circular-buffer/USE_OLD_SCHEMA → tracks/java/exercises/two-bucket/src/main/java/.keep} +0 -0
- data/tracks/java/exercises/two-bucket/src/test/java/TwoBucketTest.java +77 -0
- data/tracks/javascript/.eslintignore +0 -9
- data/tracks/javascript/exercises/binary-search/example.js +1 -1
- data/tracks/javascript/exercises/binary-search-tree/example.js +2 -2
- data/tracks/javascript/exercises/bracket-push/example.js +1 -1
- data/tracks/javascript/exercises/leap/example.js +7 -3
- data/tracks/javascript/exercises/leap/leap.js +2 -2
- data/tracks/javascript/exercises/list-ops/example.js +1 -1
- data/tracks/javascript/exercises/luhn/example.js +2 -2
- data/tracks/javascript/exercises/pythagorean-triplet/example.js +2 -1
- data/tracks/javascript/exercises/roman-numerals/example.js +3 -2
- data/tracks/julia/config.json +13 -0
- data/tracks/julia/exercises/isbn-verifier/README.md +51 -0
- data/tracks/julia/exercises/isbn-verifier/example.jl +26 -0
- data/{problem-specifications/exercises/forth/USE_OLD_SCHEMA → tracks/julia/exercises/isbn-verifier/isbn-verifier.jl} +0 -0
- data/tracks/julia/exercises/isbn-verifier/runtests.jl +73 -0
- data/tracks/perl5/.travis.yml +8 -1
- data/tracks/perl5/README.md +9 -11
- data/tracks/perl5/bin/exercise-gen.pl +14 -29
- data/tracks/perl5/config.json +1 -0
- data/tracks/perl5/cpanfile +2 -1
- data/tracks/perl5/exercises/accumulate/{Example.pm → .meta/solutions/Accumulate.pm} +1 -1
- data/tracks/perl5/exercises/accumulate/.meta/solutions/accumulate.t +1 -0
- data/tracks/perl5/exercises/accumulate/accumulate.t +1 -1
- data/tracks/perl5/exercises/all-your-base/{Example.pm → .meta/solutions/AllYourBase.pm} +1 -1
- data/tracks/perl5/exercises/all-your-base/.meta/solutions/all-your-base.t +1 -0
- data/tracks/perl5/exercises/all-your-base/all-your-base.t +1 -1
- data/tracks/perl5/exercises/allergies/{Example.pm → .meta/solutions/Allergies.pm} +1 -1
- data/tracks/perl5/exercises/allergies/.meta/solutions/allergies.t +1 -0
- data/tracks/perl5/exercises/allergies/allergies.t +75 -8
- data/tracks/perl5/exercises/anagram/{Example.pm → .meta/solutions/Anagram.pm} +1 -1
- data/tracks/perl5/exercises/anagram/.meta/solutions/anagram.t +1 -0
- data/tracks/perl5/exercises/anagram/anagram.t +61 -8
- data/tracks/perl5/exercises/atbash-cipher/{Example.pm → .meta/solutions/Cipher.pm} +1 -1
- data/tracks/perl5/exercises/atbash-cipher/.meta/solutions/cipher.t +1 -0
- data/tracks/perl5/exercises/atbash-cipher/cipher.t +81 -8
- data/tracks/perl5/exercises/beer-song/{Example.pm → .meta/solutions/Beer.pm} +1 -1
- data/tracks/perl5/exercises/beer-song/.meta/solutions/beer.t +1 -0
- data/tracks/perl5/exercises/beer-song/beer.t +80 -7
- data/tracks/perl5/exercises/binary/{Example.pm → .meta/solutions/Binary.pm} +1 -1
- data/tracks/perl5/exercises/binary/.meta/solutions/binary.t +1 -0
- data/tracks/perl5/exercises/binary/binary.t +1 -1
- data/tracks/perl5/exercises/binary-search/{Example.pm → .meta/solutions/BinarySearch.pm} +1 -1
- data/tracks/perl5/exercises/binary-search/.meta/solutions/binary-search.t +1 -0
- data/tracks/perl5/exercises/binary-search/binary-search.t +1 -1
- data/tracks/perl5/exercises/binary-search-tree/{Example.pm → .meta/solutions/BinarySearchTree.pm} +1 -1
- data/tracks/perl5/exercises/binary-search-tree/.meta/solutions/binary_search_tree.t +1 -0
- data/tracks/perl5/exercises/binary-search-tree/binary_search_tree.t +1 -1
- data/tracks/perl5/exercises/bob/{example.yaml → .meta/exercise-data.yaml} +0 -1
- data/tracks/perl5/exercises/bob/{Example.pm → .meta/solutions/Bob.pm} +0 -0
- data/tracks/perl5/exercises/bob/.meta/solutions/bob.t +1 -0
- data/tracks/perl5/exercises/bob/bob.t +1 -2
- data/tracks/perl5/exercises/clock/{Example.pm → .meta/solutions/Clock.pm} +2 -2
- data/tracks/perl5/exercises/clock/.meta/solutions/clock.t +1 -0
- data/tracks/perl5/exercises/clock/clock.t +1 -1
- data/tracks/perl5/exercises/crypto-square/{Example.pm → .meta/solutions/Crypto.pm} +1 -1
- data/tracks/perl5/exercises/crypto-square/.meta/solutions/crypto.t +1 -0
- data/tracks/perl5/exercises/crypto-square/crypto.t +1 -1
- data/tracks/perl5/exercises/custom-set/{Example.pm → .meta/solutions/CustomSet.pm} +1 -1
- data/tracks/perl5/exercises/custom-set/.meta/solutions/custom-set.t +1 -0
- data/tracks/perl5/exercises/custom-set/custom-set.t +1 -1
- data/tracks/perl5/exercises/difference-of-squares/{Example.pm → .meta/solutions/Squares.pm} +1 -1
- data/tracks/perl5/exercises/difference-of-squares/.meta/solutions/difference_of_squares.t +1 -0
- data/tracks/perl5/exercises/difference-of-squares/difference_of_squares.t +1 -1
- data/tracks/perl5/exercises/etl/{Example.pm → .meta/solutions/ETL.pm} +1 -1
- data/tracks/perl5/exercises/etl/.meta/solutions/etl.t +1 -0
- data/tracks/perl5/exercises/etl/etl.t +1 -1
- data/tracks/perl5/exercises/food-chain/{Example.pm → .meta/solutions/FoodChainSong.pm} +1 -1
- data/tracks/perl5/exercises/food-chain/.meta/solutions/food_chain.t +1 -0
- data/tracks/perl5/exercises/food-chain/food_chain.t +1 -1
- data/tracks/perl5/exercises/gigasecond/{Example.pm → .meta/solutions/Gigasecond.pm} +1 -1
- data/tracks/perl5/exercises/gigasecond/.meta/solutions/gigasecond.t +1 -0
- data/tracks/perl5/exercises/gigasecond/gigasecond.t +1 -1
- data/tracks/perl5/exercises/grade-school/{Example.pm → .meta/solutions/GradeSchool.pm} +1 -1
- data/tracks/perl5/exercises/grade-school/.meta/solutions/grade_school.t +1 -0
- data/tracks/perl5/exercises/grade-school/grade_school.t +1 -1
- data/tracks/perl5/exercises/grains/{Example.pm → .meta/solutions/Grains.pm} +1 -1
- data/tracks/perl5/exercises/grains/.meta/solutions/grains.t +1 -0
- data/tracks/perl5/exercises/grains/grains.t +54 -6
- data/tracks/perl5/exercises/hamming/{Example.pm → .meta/solutions/Hamming.pm} +1 -1
- data/tracks/perl5/exercises/hamming/.meta/solutions/hamming.t +1 -0
- data/tracks/perl5/exercises/hamming/hamming.t +1 -1
- data/tracks/perl5/exercises/hello-world/{example.yaml → .meta/exercise-data.yaml} +0 -1
- data/tracks/perl5/exercises/hello-world/{Example.pm → .meta/solutions/HelloWorld.pm} +0 -0
- data/tracks/perl5/exercises/hello-world/.meta/solutions/hello-world.t +1 -0
- data/tracks/perl5/exercises/hello-world/hello-world.t +1 -2
- data/tracks/perl5/exercises/hexadecimal/{Example.pm → .meta/solutions/Hexadecimal.pm} +1 -1
- data/tracks/perl5/exercises/hexadecimal/.meta/solutions/hexadecimal.t +1 -0
- data/tracks/perl5/exercises/hexadecimal/hexadecimal.t +1 -1
- data/tracks/perl5/exercises/house/{Example.pm → .meta/solutions/House.pm} +1 -1
- data/tracks/perl5/exercises/house/.meta/solutions/house.t +1 -0
- data/tracks/perl5/exercises/house/house.t +1 -1
- data/tracks/perl5/exercises/kindergarten-garden/{Example.pm → .meta/solutions/Kindergarten.pm} +1 -1
- data/tracks/perl5/exercises/kindergarten-garden/.meta/solutions/kindergarten.t +1 -0
- data/tracks/perl5/exercises/kindergarten-garden/kindergarten.t +1 -1
- data/tracks/perl5/exercises/largest-series-product/{Example.pm → .meta/solutions/Series.pm} +1 -1
- data/tracks/perl5/exercises/largest-series-product/.meta/solutions/series_product.t +1 -0
- data/tracks/perl5/exercises/largest-series-product/series_product.t +1 -1
- data/tracks/perl5/exercises/leap/{example.yaml → .meta/exercise-data.yaml} +0 -1
- data/tracks/perl5/exercises/leap/{Example.pm → .meta/solutions/Leap.pm} +0 -0
- data/tracks/perl5/exercises/leap/.meta/solutions/leap.t +1 -0
- data/tracks/perl5/exercises/leap/leap.t +1 -2
- data/tracks/perl5/exercises/linked-list/{Example.pm → .meta/solutions/Deque.pm} +1 -1
- data/tracks/perl5/exercises/linked-list/.meta/solutions/deque.t +1 -0
- data/tracks/perl5/exercises/linked-list/deque.t +60 -7
- data/tracks/perl5/exercises/list-ops/{Example.pm → .meta/solutions/ListOps.pm} +1 -1
- data/tracks/perl5/exercises/list-ops/.meta/solutions/list-ops.t +1 -0
- data/tracks/perl5/exercises/list-ops/list-ops.t +1 -1
- data/tracks/perl5/exercises/luhn/{example.yaml → .meta/exercise-data.yaml} +0 -0
- data/tracks/perl5/exercises/luhn/{Example.pm → .meta/solutions/Luhn.pm} +0 -0
- data/tracks/perl5/exercises/luhn/.meta/solutions/luhn.t +1 -0
- data/tracks/perl5/exercises/luhn/luhn.t +1 -2
- data/tracks/perl5/exercises/matrix/{Example.pm → .meta/solutions/Matrix.pm} +1 -1
- data/tracks/perl5/exercises/matrix/.meta/solutions/matrix.t +1 -0
- data/tracks/perl5/exercises/matrix/matrix.t +1 -1
- data/tracks/perl5/exercises/meetup/{Example.pm → .meta/solutions/Meetup.pm} +1 -1
- data/tracks/perl5/exercises/meetup/.meta/solutions/meetup.t +1 -0
- data/tracks/perl5/exercises/meetup/meetup.t +1 -1
- data/tracks/perl5/exercises/minesweeper/{Example.pm → .meta/solutions/Minesweeper.pm} +1 -1
- data/tracks/perl5/exercises/minesweeper/.meta/solutions/minesweeper.t +1 -0
- data/tracks/perl5/exercises/minesweeper/minesweeper.t +1 -1
- data/tracks/perl5/exercises/nucleotide-count/{Example.pm → .meta/solutions/NucleotideCount.pm} +1 -1
- data/tracks/perl5/exercises/nucleotide-count/.meta/solutions/nucleotide_count.t +1 -0
- data/tracks/perl5/exercises/nucleotide-count/nucleotide_count.t +1 -1
- data/tracks/perl5/exercises/ocr-numbers/{Example.pm → .meta/solutions/OCR.pm} +1 -1
- data/tracks/perl5/exercises/ocr-numbers/.meta/solutions/ocr.t +1 -0
- data/tracks/perl5/exercises/ocr-numbers/ocr.t +1 -1
- data/tracks/perl5/exercises/palindrome-products/{Example.pm → .meta/solutions/Palindrome.pm} +1 -1
- data/tracks/perl5/exercises/palindrome-products/.meta/solutions/palindrome.t +1 -0
- data/tracks/perl5/exercises/palindrome-products/palindrome.t +1 -1
- data/tracks/perl5/exercises/pascals-triangle/{Example.pm → .meta/solutions/Triangle.pm} +1 -1
- data/tracks/perl5/exercises/pascals-triangle/.meta/solutions/triangle.t +1 -0
- data/tracks/perl5/exercises/pascals-triangle/triangle.t +51 -7
- data/tracks/perl5/exercises/phone-number/{example.yaml → .meta/exercise-data.yaml} +0 -0
- data/tracks/perl5/exercises/phone-number/{Example.pm → .meta/solutions/PhoneNumber.pm} +0 -0
- data/tracks/perl5/exercises/phone-number/.meta/solutions/phone-number.t +1 -0
- data/tracks/perl5/exercises/phone-number/phone-number.t +1 -2
- data/tracks/perl5/exercises/pig-latin/{Example.pm → .meta/solutions/PigLatin.pm} +1 -1
- data/tracks/perl5/exercises/pig-latin/.meta/solutions/piglatin.t +1 -0
- data/tracks/perl5/exercises/pig-latin/piglatin.t +1 -1
- data/tracks/perl5/exercises/point-mutations/{Example.pm → .meta/solutions/DNA.pm} +1 -1
- data/tracks/perl5/exercises/point-mutations/.meta/solutions/dna.t +1 -0
- data/tracks/perl5/exercises/point-mutations/dna.t +75 -7
- data/tracks/perl5/exercises/prime-factors/{Example.pm → .meta/solutions/Prime.pm} +1 -1
- data/tracks/perl5/exercises/prime-factors/.meta/solutions/prime.t +1 -0
- data/tracks/perl5/exercises/prime-factors/prime.t +63 -7
- data/tracks/perl5/exercises/proverb/{Example.pm → .meta/solutions/Proverb.pm} +1 -1
- data/tracks/perl5/exercises/proverb/.meta/solutions/proverb.t +1 -0
- data/tracks/perl5/exercises/proverb/proverb.t +58 -7
- data/tracks/perl5/exercises/pythagorean-triplet/{Example.pm → .meta/solutions/Triplet.pm} +2 -2
- data/tracks/perl5/exercises/pythagorean-triplet/.meta/solutions/triplet.t +1 -0
- data/tracks/perl5/exercises/pythagorean-triplet/triplet.t +1 -1
- data/tracks/perl5/exercises/queen-attack/{Example.pm → .meta/solutions/Queens.pm} +1 -1
- data/tracks/perl5/exercises/queen-attack/.meta/solutions/queen.t +1 -0
- data/tracks/perl5/exercises/queen-attack/queen.t +186 -8
- data/tracks/perl5/exercises/raindrops/{Example.pm → .meta/solutions/Raindrops.pm} +1 -1
- data/tracks/perl5/exercises/raindrops/.meta/solutions/raindrops.t +1 -0
- data/tracks/perl5/exercises/raindrops/raindrops.t +89 -7
- data/tracks/perl5/exercises/rna-transcription/{Example.pm → .meta/solutions/DNA.pm} +1 -1
- data/tracks/perl5/exercises/rna-transcription/.meta/solutions/rna.t +1 -0
- data/tracks/perl5/exercises/rna-transcription/rna.t +1 -1
- data/tracks/perl5/exercises/robot-name/{Example.pm → .meta/solutions/RobotName.pm} +1 -1
- data/tracks/perl5/exercises/robot-name/.meta/solutions/robot_name.t +1 -0
- data/tracks/perl5/exercises/robot-name/robot_name.t +1 -1
- data/tracks/perl5/exercises/robot-simulator/{Example.pm → .meta/solutions/Robot.pm} +1 -1
- data/tracks/perl5/exercises/robot-simulator/.meta/solutions/robot_simulator.t +1 -0
- data/tracks/perl5/exercises/robot-simulator/robot_simulator.t +1 -1
- data/tracks/perl5/exercises/roman-numerals/{Example.pm → .meta/solutions/Decimal.pm} +1 -1
- data/tracks/perl5/exercises/roman-numerals/.meta/solutions/roman.t +1 -0
- data/tracks/perl5/exercises/roman-numerals/roman.t +1 -1
- data/tracks/perl5/exercises/saddle-points/{Example.pm → .meta/solutions/Matrix.pm} +1 -1
- data/tracks/perl5/exercises/saddle-points/.meta/solutions/saddle_points.t +1 -0
- data/tracks/perl5/exercises/saddle-points/saddle_points.t +1 -1
- data/tracks/perl5/exercises/say/{Example.pm → .meta/solutions/Say.pm} +1 -1
- data/tracks/perl5/exercises/say/.meta/solutions/say.t +1 -0
- data/tracks/perl5/exercises/say/say.t +1 -1
- data/tracks/perl5/exercises/scrabble-score/{Example.pm → .meta/solutions/Word.pm} +1 -1
- data/tracks/perl5/exercises/scrabble-score/.meta/solutions/scrabble.t +1 -0
- data/tracks/perl5/exercises/scrabble-score/scrabble.t +1 -1
- data/tracks/perl5/exercises/secret-handshake/{Example.pm → .meta/solutions/SecretHandshake.pm} +1 -1
- data/tracks/perl5/exercises/secret-handshake/.meta/solutions/handshake.t +1 -0
- data/tracks/perl5/exercises/secret-handshake/handshake.t +1 -1
- data/tracks/perl5/exercises/series/{Example.pm → .meta/solutions/Series.pm} +1 -1
- data/tracks/perl5/exercises/series/.meta/solutions/series.t +1 -0
- data/tracks/perl5/exercises/series/series.t +1 -1
- data/tracks/perl5/exercises/sieve/{Example.pm → .meta/solutions/Sieve.pm} +1 -1
- data/tracks/perl5/exercises/sieve/.meta/solutions/sieve.t +1 -0
- data/tracks/perl5/exercises/sieve/sieve.t +1 -1
- data/tracks/perl5/exercises/simple-cipher/{Example.pm → .meta/solutions/Cipher.pm} +1 -1
- data/tracks/perl5/exercises/simple-cipher/.meta/solutions/cipher.t +1 -0
- data/tracks/perl5/exercises/simple-cipher/cipher.t +1 -1
- data/tracks/perl5/exercises/simple-linked-list/{Example.pm → .meta/solutions/LinkedList.pm} +1 -1
- data/tracks/perl5/exercises/simple-linked-list/.meta/solutions/simple_linked_list.t +1 -0
- data/tracks/perl5/exercises/simple-linked-list/simple_linked_list.t +1 -1
- data/tracks/perl5/exercises/space-age/{Example.pm → .meta/solutions/SpaceAge.pm} +1 -1
- data/tracks/perl5/exercises/space-age/.meta/solutions/space.t +1 -0
- data/tracks/perl5/exercises/space-age/space.t +1 -1
- data/tracks/perl5/exercises/strain/{Example.pm → .meta/solutions/Strain.pm} +1 -1
- data/tracks/perl5/exercises/strain/.meta/solutions/strain.t +1 -0
- data/tracks/perl5/exercises/strain/strain.t +1 -1
- data/tracks/perl5/exercises/sublist/{Example.pm → .meta/solutions/Sublist.pm} +1 -1
- data/tracks/perl5/exercises/sublist/.meta/solutions/sublist.t +1 -0
- data/tracks/perl5/exercises/sublist/sublist.t +1 -1
- data/tracks/perl5/exercises/sum-of-multiples/{Example.pm → .meta/solutions/SumOfMultiples.pm} +1 -1
- data/tracks/perl5/exercises/sum-of-multiples/.meta/solutions/sum_of_multiples.t +1 -0
- data/tracks/perl5/exercises/sum-of-multiples/sum_of_multiples.t +1 -1
- data/tracks/perl5/exercises/triangle/{Example.pm → .meta/solutions/Triangle.pm} +1 -1
- data/tracks/perl5/exercises/triangle/.meta/solutions/triangle.t +1 -0
- data/tracks/perl5/exercises/triangle/triangle.t +87 -8
- data/tracks/perl5/exercises/trinary/{Example.pm → .meta/solutions/Trinary.pm} +1 -1
- data/tracks/perl5/exercises/trinary/.meta/solutions/trinary.t +1 -0
- data/tracks/perl5/exercises/trinary/trinary.t +1 -1
- data/tracks/perl5/exercises/twelve-days/{Example.pm → .meta/solutions/TwelveDays.pm} +1 -1
- data/tracks/perl5/exercises/twelve-days/.meta/solutions/song.t +1 -0
- data/tracks/perl5/exercises/twelve-days/song.t +1 -1
- data/tracks/perl5/exercises/word-count/{Example.pm → .meta/solutions/Phrase.pm} +1 -1
- data/tracks/perl5/exercises/word-count/.meta/solutions/word_count.t +1 -0
- data/tracks/perl5/exercises/word-count/word_count.t +1 -1
- data/tracks/perl5/exercises/wordy/{Example.pm → .meta/solutions/Wordy.pm} +1 -1
- data/tracks/perl5/exercises/wordy/.meta/solutions/wordy.t +1 -0
- data/tracks/perl5/exercises/wordy/wordy.t +87 -9
- data/tracks/perl5/lib/Exercism/Generator.pm +48 -0
- data/tracks/perl5/t/generated-tests.t +26 -0
- data/tracks/perl5/templates/test.mustache +4 -17
- data/tracks/perl6/.proverc +1 -0
- data/tracks/perl6/.travis.yml +6 -10
- data/tracks/perl6/README.md +1 -3
- data/tracks/perl6/bin/exercise-gen.pl6 +2 -0
- data/tracks/perl6/exercises/accumulate/.meta/solutions/accumulate.t +1 -0
- data/tracks/perl6/exercises/acronym/.meta/solutions/acronym.t +1 -0
- data/tracks/perl6/exercises/all-your-base/.meta/solutions/all-your-base.t +1 -0
- data/tracks/perl6/exercises/allergies/.meta/solutions/allergies.t +1 -0
- data/tracks/perl6/exercises/anagram/.meta/solutions/anagram.t +1 -0
- data/tracks/perl6/exercises/atbash-cipher/.meta/solutions/atbash-cipher.t +1 -0
- data/tracks/perl6/exercises/bob/.meta/solutions/bob.t +1 -0
- data/tracks/perl6/exercises/clock/.meta/solutions/clock.t +1 -0
- data/tracks/perl6/exercises/etl/.meta/solutions/etl.t +1 -0
- data/tracks/perl6/exercises/flatten-array/.meta/solutions/flatten-array.t +1 -0
- data/tracks/perl6/exercises/grade-school/.meta/solutions/grade-school.t +1 -0
- data/tracks/perl6/exercises/grains/.meta/solutions/grains.t +1 -0
- data/tracks/perl6/exercises/hamming/.meta/solutions/hamming.t +1 -0
- data/tracks/perl6/exercises/hello-world/.meta/solutions/hello-world.t +1 -0
- data/tracks/perl6/exercises/leap/.meta/solutions/leap.t +1 -0
- data/tracks/perl6/exercises/linked-list/.meta/solutions/linked-list.t +1 -0
- data/tracks/perl6/exercises/luhn/.meta/solutions/luhn.t +1 -0
- data/tracks/perl6/exercises/meetup/.meta/solutions/meetup.t +1 -0
- data/tracks/perl6/exercises/nucleotide-count/.meta/solutions/nucleotide-count.t +1 -0
- data/tracks/perl6/exercises/pangram/.meta/solutions/pangram.t +1 -0
- data/tracks/perl6/exercises/phone-number/.meta/solutions/phone-number.t +1 -0
- data/tracks/perl6/exercises/raindrops/.meta/solutions/raindrops.t +1 -0
- data/tracks/perl6/exercises/rna-transcription/.meta/solutions/rna-transcription.t +1 -0
- data/tracks/perl6/exercises/robot-name/.meta/solutions/robot-name.t +1 -0
- data/tracks/perl6/exercises/roman-numerals/.meta/solutions/roman-numerals.t +1 -0
- data/tracks/perl6/exercises/scrabble-score/.meta/solutions/scrabble-score.t +1 -0
- data/tracks/perl6/exercises/space-age/.meta/solutions/space-age.t +1 -0
- data/tracks/perl6/exercises/two-fer/.meta/solutions/two-fer.t +1 -0
- data/tracks/perl6/exercises/word-count/.meta/solutions/word-count.t +1 -0
- data/tracks/perl6/exercises/wordy/.meta/solutions/wordy.t +1 -0
- data/tracks/python/config/exercise_readme.go.tmpl +23 -4
- data/tracks/python/exercises/accumulate/README.md +2 -3
- data/tracks/python/exercises/acronym/README.md +2 -3
- data/tracks/python/exercises/acronym/acronym_test.py +2 -5
- data/tracks/python/exercises/all-your-base/README.md +2 -4
- data/tracks/python/exercises/allergies/README.md +2 -3
- data/tracks/python/exercises/allergies/allergies_test.py +1 -1
- data/tracks/python/exercises/alphametics/README.md +2 -4
- data/tracks/python/exercises/anagram/README.md +2 -3
- data/tracks/python/exercises/anagram/anagram_test.py +2 -16
- data/tracks/python/exercises/armstrong-numbers/README.md +16 -2
- data/tracks/python/exercises/atbash-cipher/README.md +2 -3
- data/tracks/python/exercises/atbash-cipher/atbash_cipher_test.py +1 -1
- data/tracks/python/exercises/beer-song/README.md +2 -3
- data/tracks/python/exercises/binary/README.md +2 -3
- data/tracks/python/exercises/binary-search/README.md +2 -3
- data/tracks/python/exercises/binary-search-tree/README.md +2 -3
- data/tracks/python/exercises/bob/README.md +4 -3
- data/tracks/python/exercises/book-store/README.md +2 -3
- data/tracks/python/exercises/bowling/README.md +2 -3
- data/tracks/python/exercises/bracket-push/README.md +2 -3
- data/tracks/python/exercises/change/README.md +2 -3
- data/tracks/python/exercises/circular-buffer/README.md +2 -3
- data/tracks/python/exercises/clock/README.md +2 -3
- data/tracks/python/exercises/collatz-conjecture/README.md +2 -3
- data/tracks/python/exercises/complex-numbers/README.md +3 -3
- data/tracks/python/exercises/connect/README.md +2 -4
- data/tracks/python/exercises/crypto-square/README.md +2 -3
- data/tracks/python/exercises/crypto-square/crypto_square_test.py +1 -1
- data/tracks/python/exercises/custom-set/README.md +17 -3
- data/tracks/python/exercises/diamond/README.md +2 -3
- data/tracks/python/exercises/difference-of-squares/README.md +2 -3
- data/tracks/python/exercises/difference-of-squares/difference_of_squares_test.py +1 -1
- data/tracks/python/exercises/diffie-hellman/README.md +2 -3
- data/tracks/python/exercises/dominoes/README.md +2 -4
- data/tracks/python/exercises/dot-dsl/README.md +20 -5
- data/tracks/python/exercises/error-handling/README.md +2 -4
- data/tracks/python/exercises/etl/README.md +2 -3
- data/tracks/python/exercises/flatten-array/README.md +2 -3
- data/tracks/python/exercises/flatten-array/flatten_array_test.py +1 -1
- data/tracks/python/exercises/food-chain/README.md +2 -3
- data/tracks/python/exercises/forth/README.md +2 -4
- data/tracks/python/exercises/gigasecond/README.md +2 -3
- data/tracks/python/exercises/gigasecond/gigasecond_test.py +1 -2
- data/tracks/python/exercises/go-counting/README.md +2 -4
- data/tracks/python/exercises/grade-school/README.md +2 -3
- data/tracks/python/exercises/grains/README.md +2 -3
- data/tracks/python/exercises/grep/README.md +2 -3
- data/tracks/python/exercises/hamming/README.md +2 -3
- data/tracks/python/exercises/hamming/hamming_test.py +1 -1
- data/tracks/python/exercises/hello-world/README.md +2 -3
- data/tracks/python/exercises/hello-world/hello_world_test.py +1 -1
- data/tracks/python/exercises/hexadecimal/README.md +2 -3
- data/tracks/python/exercises/house/README.md +2 -3
- data/tracks/python/exercises/isbn-verifier/README.md +48 -20
- data/tracks/python/exercises/isogram/README.md +2 -3
- data/tracks/python/exercises/kindergarten-garden/README.md +2 -3
- data/tracks/python/exercises/kindergarten-garden/kindergarten_garden_test.py +1 -1
- data/tracks/python/exercises/largest-series-product/README.md +2 -3
- data/tracks/python/exercises/largest-series-product/largest_series_product_test.py +1 -1
- data/tracks/python/exercises/leap/README.md +2 -3
- data/tracks/python/exercises/leap/leap_test.py +1 -1
- data/tracks/python/exercises/linked-list/README.md +2 -3
- data/tracks/python/exercises/list-ops/README.md +2 -4
- data/tracks/python/exercises/luhn/README.md +2 -3
- data/tracks/python/exercises/markdown/README.md +2 -4
- data/tracks/python/exercises/matrix/README.md +2 -3
- data/tracks/python/exercises/matrix/example.py +6 -3
- data/tracks/python/exercises/matrix/matrix.py +6 -0
- data/tracks/python/exercises/matrix/matrix_test.py +25 -15
- data/tracks/python/exercises/meetup/README.md +2 -3
- data/tracks/python/exercises/meetup/meetup_test.py +1 -2
- data/tracks/python/exercises/minesweeper/README.md +2 -4
- data/tracks/python/exercises/nth-prime/README.md +2 -3
- data/tracks/python/exercises/nucleotide-count/README.md +2 -3
- data/tracks/python/exercises/ocr-numbers/README.md +2 -3
- data/tracks/python/exercises/octal/README.md +2 -3
- data/tracks/python/exercises/palindrome-products/README.md +2 -3
- data/tracks/python/exercises/pangram/README.md +2 -3
- data/tracks/python/exercises/pangram/pangram_test.py +1 -1
- data/tracks/python/exercises/parallel-letter-frequency/README.md +2 -4
- data/tracks/python/exercises/pascals-triangle/README.md +2 -3
- data/tracks/python/exercises/perfect-numbers/README.md +2 -3
- data/tracks/python/exercises/phone-number/README.md +2 -3
- data/tracks/python/exercises/pig-latin/README.md +2 -3
- data/tracks/python/exercises/pig-latin/pig_latin_test.py +1 -1
- data/tracks/python/exercises/point-mutations/README.md +2 -3
- data/tracks/python/exercises/poker/README.md +2 -3
- data/tracks/python/exercises/pov/README.md +2 -5
- data/tracks/python/exercises/prime-factors/README.md +2 -3
- data/tracks/python/exercises/prime-factors/prime_factors_test.py +1 -1
- data/tracks/python/exercises/protein-translation/README.md +4 -5
- data/tracks/python/exercises/proverb/README.md +2 -2
- data/tracks/python/exercises/pythagorean-triplet/README.md +2 -3
- data/tracks/python/exercises/queen-attack/README.md +2 -3
- data/tracks/python/exercises/rail-fence-cipher/README.md +2 -3
- data/tracks/python/exercises/rail-fence-cipher/rail_fence_cipher.py +2 -6
- data/tracks/python/exercises/raindrops/README.md +2 -3
- data/tracks/python/exercises/react/README.md +2 -4
- data/tracks/python/exercises/rectangles/README.md +2 -4
- data/tracks/python/exercises/reverse-string/README.md +28 -0
- data/tracks/python/exercises/reverse-string/reverse_string_test.py +1 -1
- data/tracks/python/exercises/rna-transcription/README.md +3 -4
- data/tracks/python/exercises/rna-transcription/rna_transcription_test.py +3 -25
- data/tracks/python/exercises/robot-name/README.md +2 -3
- data/tracks/python/exercises/robot-simulator/README.md +2 -3
- data/tracks/python/exercises/robot-simulator/robot_simulator_test.py +1 -1
- data/tracks/python/exercises/roman-numerals/README.md +2 -3
- data/tracks/python/exercises/rotational-cipher/README.md +2 -3
- data/tracks/python/exercises/rotational-cipher/rotational_cipher_test.py +1 -1
- data/tracks/python/exercises/run-length-encoding/README.md +2 -3
- data/tracks/python/exercises/saddle-points/README.md +2 -3
- data/tracks/python/exercises/say/README.md +2 -3
- data/tracks/python/exercises/say/say_test.py +1 -1
- data/tracks/python/exercises/scale-generator/README.md +2 -4
- data/tracks/python/exercises/scrabble-score/README.md +2 -3
- data/tracks/python/exercises/scrabble-score/scrabble_score_test.py +1 -1
- data/tracks/python/exercises/secret-handshake/README.md +3 -4
- data/tracks/python/exercises/series/README.md +2 -3
- data/tracks/python/exercises/sieve/README.md +2 -3
- data/tracks/python/exercises/sieve/sieve_test.py +1 -1
- data/tracks/python/exercises/simple-cipher/README.md +6 -9
- data/tracks/python/exercises/simple-linked-list/README.md +2 -3
- data/tracks/python/exercises/space-age/README.md +2 -3
- data/tracks/python/exercises/space-age/space_age_test.py +1 -1
- data/tracks/python/exercises/spiral-matrix/README.md +20 -8
- data/tracks/python/exercises/strain/README.md +2 -3
- data/tracks/python/exercises/sublist/README.md +2 -4
- data/tracks/python/exercises/sublist/sublist_test.py +1 -1
- data/tracks/python/exercises/sum-of-multiples/README.md +2 -3
- data/tracks/python/exercises/sum-of-multiples/sum_of_multiples_test.py +1 -1
- data/tracks/python/exercises/tournament/README.md +2 -4
- data/tracks/python/exercises/transpose/README.md +2 -3
- data/tracks/python/exercises/tree-building/README.md +2 -4
- data/tracks/python/exercises/triangle/README.md +2 -3
- data/tracks/python/exercises/trinary/README.md +2 -3
- data/tracks/python/exercises/twelve-days/README.md +2 -3
- data/tracks/python/exercises/two-bucket/README.md +2 -3
- data/tracks/python/exercises/two-fer/README.md +3 -4
- data/tracks/python/exercises/variable-length-quantity/README.md +2 -3
- data/tracks/python/exercises/word-count/README.md +2 -3
- data/tracks/python/exercises/word-search/README.md +2 -4
- data/tracks/python/exercises/wordy/README.md +2 -3
- data/tracks/python/exercises/zebra-puzzle/README.md +2 -3
- data/tracks/python/exercises/zipper/README.md +2 -4
- data/tracks/ruby/docs/24pullrequests.md +1 -1
- data/tracks/rust/exercises/robot-name/Cargo-example.toml +6 -0
- data/tracks/rust/exercises/robot-name/Cargo.toml +0 -1
- data/tracks/scala/exercises/beer-song/example.scala +3 -3
- data/tracks/scala/exercises/beer-song/src/test/scala/BeerSongTest.scala +29 -30
- data/tracks/scala/exercises/binary-search/src/test/scala/BinarySearchTest.scala +3 -3
- data/tracks/scala/exercises/book-store/example.scala +1 -1
- data/tracks/scala/exercises/book-store/src/test/scala/BookStoreTest.scala +19 -15
- data/tracks/scala/testgen/src/main/scala/BeerSongTestGenerator.scala +21 -3
- data/tracks/scala/testgen/src/main/scala/BinarySearchTestGenerator.scala +3 -5
- data/tracks/scala/testgen/src/main/scala/BookStoreTestGenerator.scala +3 -3
- data/tracks/swift/.travis.yml +2 -2
- data/tracks/swift/config.json +12 -0
- data/tracks/swift/exercises/scale-generator/Package.swift +5 -0
- data/tracks/swift/exercises/scale-generator/README.md +65 -0
- data/tracks/swift/exercises/scale-generator/Sources/ScaleGenerator.swift +1 -0
- data/tracks/swift/exercises/scale-generator/Sources/ScaleGeneratorExample.swift +78 -0
- data/tracks/swift/exercises/scale-generator/Tests/LinuxMain.swift +6 -0
- data/tracks/swift/exercises/scale-generator/Tests/ScaleGeneratorTests/ScaleGeneratorTests.swift +116 -0
- metadata +197 -101
- data/problem-specifications/exercises/grains/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/grep/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/house/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/isogram/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/list-ops/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/pov/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/trinary/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/word-search/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/exercises/zipper/USE_OLD_SCHEMA +0 -0
- data/problem-specifications/old-schema.json +0 -137
- data/tracks/c/exercises/bob/.meta/description.md +0 -10
- data/tracks/elm/exercises/bob/.meta/description.md +0 -10
- data/tracks/perl5/exercises/allergies/cases.json +0 -69
- data/tracks/perl5/exercises/anagram/cases.json +0 -56
- data/tracks/perl5/exercises/atbash-cipher/cases.json +0 -75
- data/tracks/perl5/exercises/beer-song/cases.json +0 -74
- data/tracks/perl5/exercises/grains/cases.json +0 -49
- data/tracks/perl5/exercises/linked-list/cases.json +0 -54
- data/tracks/perl5/exercises/pascals-triangle/cases.json +0 -45
- data/tracks/perl5/exercises/point-mutations/cases.json +0 -69
- data/tracks/perl5/exercises/prime-factors/cases.json +0 -57
- data/tracks/perl5/exercises/proverb/cases.json +0 -52
- data/tracks/perl5/exercises/queen-attack/cases.json +0 -182
- data/tracks/perl5/exercises/raindrops/cases.json +0 -83
- data/tracks/perl5/exercises/triangle/cases.json +0 -82
- data/tracks/perl5/exercises/wordy/cases.json +0 -82
- data/tracks/python/docs/EXERCISE_README_INSERT.md +0 -23
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// This file was auto-generated based on version 1.
|
|
1
|
+
// This file was auto-generated based on version 1.3.0 of the canonical data.
|
|
2
2
|
|
|
3
3
|
module ComplexNumbersTest
|
|
4
4
|
|
|
@@ -166,3 +166,9 @@ let ``Exponential of a purely real number`` () =
|
|
|
166
166
|
real sut |> should (equalWithin 0.000000001) Math.E
|
|
167
167
|
imaginary sut |> should (equalWithin 0.000000001) 0.0
|
|
168
168
|
|
|
169
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
170
|
+
let ``Exponential of a number with real and imaginary part`` () =
|
|
171
|
+
let sut = exp (create (Math.Log(2.0)) Math.PI)
|
|
172
|
+
real sut |> should (equalWithin 0.000000001) -2.0
|
|
173
|
+
imaginary sut |> should (equalWithin 0.000000001) 0.0
|
|
174
|
+
|
|
@@ -12,7 +12,6 @@ let ``Input cells have a value`` () =
|
|
|
12
12
|
let reactor = new Reactor()
|
|
13
13
|
let input = reactor.createInputCell 10
|
|
14
14
|
input.Value |> should equal 10
|
|
15
|
-
|
|
16
15
|
|
|
17
16
|
[<Fact(Skip = "Remove to run test")>]
|
|
18
17
|
let ``An input cell's value can be set`` () =
|
|
@@ -20,7 +19,6 @@ let ``An input cell's value can be set`` () =
|
|
|
20
19
|
let input = reactor.createInputCell 4
|
|
21
20
|
input.Value <- 20
|
|
22
21
|
input.Value |> should equal 20
|
|
23
|
-
|
|
24
22
|
|
|
25
23
|
[<Fact(Skip = "Remove to run test")>]
|
|
26
24
|
let ``Compute cells calculate initial value`` () =
|
|
@@ -28,7 +26,6 @@ let ``Compute cells calculate initial value`` () =
|
|
|
28
26
|
let input = reactor.createInputCell 1
|
|
29
27
|
let output = reactor.createComputeCell [input] (fun values -> values.[0] + 1)
|
|
30
28
|
output.Value |> should equal 2
|
|
31
|
-
|
|
32
29
|
|
|
33
30
|
[<Fact(Skip = "Remove to run test")>]
|
|
34
31
|
let ``Compute cells take inputs in the right order`` () =
|
|
@@ -37,7 +34,6 @@ let ``Compute cells take inputs in the right order`` () =
|
|
|
37
34
|
let two = reactor.createInputCell 2
|
|
38
35
|
let output = reactor.createComputeCell [one; two] (fun values -> values.[0] + values.[1] * 10)
|
|
39
36
|
output.Value |> should equal 21
|
|
40
|
-
|
|
41
37
|
|
|
42
38
|
[<Fact(Skip = "Remove to run test")>]
|
|
43
39
|
let ``Compute cells update value when dependencies are changed`` () =
|
|
@@ -46,7 +42,6 @@ let ``Compute cells update value when dependencies are changed`` () =
|
|
|
46
42
|
let output = reactor.createComputeCell [input] (fun values -> values.[0] + 1)
|
|
47
43
|
input.Value <- 3
|
|
48
44
|
output.Value |> should equal 4
|
|
49
|
-
|
|
50
45
|
|
|
51
46
|
[<Fact(Skip = "Remove to run test")>]
|
|
52
47
|
let ``Compute cells can depend on other compute cells`` () =
|
|
@@ -58,7 +53,6 @@ let ``Compute cells can depend on other compute cells`` () =
|
|
|
58
53
|
output.Value |> should equal 32
|
|
59
54
|
input.Value <- 3
|
|
60
55
|
output.Value |> should equal 96
|
|
61
|
-
|
|
62
56
|
|
|
63
57
|
[<Fact(Skip = "Remove to run test")>]
|
|
64
58
|
let ``Compute cells fire callbacks`` () =
|
|
@@ -70,7 +64,6 @@ let ``Compute cells fire callbacks`` () =
|
|
|
70
64
|
output.Changed.AddHandler callback1Handler
|
|
71
65
|
input.Value <- 3
|
|
72
66
|
callback1 |> should equal [4]
|
|
73
|
-
|
|
74
67
|
|
|
75
68
|
[<Fact(Skip = "Remove to run test")>]
|
|
76
69
|
let ``Callback cells only fire on change`` () =
|
|
@@ -84,7 +77,6 @@ let ``Callback cells only fire on change`` () =
|
|
|
84
77
|
callback1 |> should equal List.empty<int>
|
|
85
78
|
input.Value <- 4
|
|
86
79
|
callback1 |> should equal [222]
|
|
87
|
-
|
|
88
80
|
|
|
89
81
|
[<Fact(Skip = "Remove to run test")>]
|
|
90
82
|
let ``Callbacks can be added and removed`` () =
|
|
@@ -106,7 +98,6 @@ let ``Callbacks can be added and removed`` () =
|
|
|
106
98
|
callback1 |> should equal [32]
|
|
107
99
|
callback2 |> should equal [32; 42]
|
|
108
100
|
callback3 |> should equal [42]
|
|
109
|
-
|
|
110
101
|
|
|
111
102
|
[<Fact(Skip = "Remove to run test")>]
|
|
112
103
|
let ``Removing a callback multiple times doesn't interfere with other callbacks`` () =
|
|
@@ -125,7 +116,6 @@ let ``Removing a callback multiple times doesn't interfere with other callbacks`
|
|
|
125
116
|
input.Value <- 2
|
|
126
117
|
callback1 |> should equal List.empty<int>
|
|
127
118
|
callback2 |> should equal [3]
|
|
128
|
-
|
|
129
119
|
|
|
130
120
|
[<Fact(Skip = "Remove to run test")>]
|
|
131
121
|
let ``Callbacks should only be called once even if multiple dependencies change`` () =
|
|
@@ -140,7 +130,6 @@ let ``Callbacks should only be called once even if multiple dependencies change`
|
|
|
140
130
|
output.Changed.AddHandler callback1Handler
|
|
141
131
|
input.Value <- 4
|
|
142
132
|
callback1 |> should equal [10]
|
|
143
|
-
|
|
144
133
|
|
|
145
134
|
[<Fact(Skip = "Remove to run test")>]
|
|
146
135
|
let ``Callbacks should not be called if dependencies change but output value doesn't change`` () =
|
|
@@ -157,5 +146,4 @@ let ``Callbacks should not be called if dependencies change but output value doe
|
|
|
157
146
|
input.Value <- 4
|
|
158
147
|
input.Value <- 5
|
|
159
148
|
callback1 |> should equal List.empty<int>
|
|
160
|
-
|
|
161
149
|
|
|
@@ -11,13 +11,17 @@ let intervals = [('m', 1); ('M', 2); ('A', 3)] |> Map.ofList
|
|
|
11
11
|
|
|
12
12
|
let skipInterval interval scale = List.skip (Map.find interval intervals) scale
|
|
13
13
|
|
|
14
|
-
let pitches tonic
|
|
14
|
+
let pitches tonic intervals =
|
|
15
15
|
let scale = if List.contains tonic flatKeys then flatChromaticScale else chromaticScale
|
|
16
16
|
let index = List.findIndex (fun pitch -> String.Equals(pitch, tonic, StringComparison.InvariantCultureIgnoreCase)) scale
|
|
17
17
|
let shiftedScale = shift index scale
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
|
|
19
|
+
match intervals with
|
|
20
|
+
| None ->
|
|
21
|
+
shiftedScale
|
|
22
|
+
| Some x ->
|
|
23
|
+
x
|
|
24
|
+
|> List.ofSeq
|
|
25
|
+
|> List.fold (fun (acc, remainder) item -> (List.head remainder :: acc, skipInterval item remainder)) ([], shiftedScale)
|
|
26
|
+
|> fst
|
|
27
|
+
|> List.rev
|
|
@@ -1,92 +1,77 @@
|
|
|
1
|
-
// This file was
|
|
1
|
+
// This file was auto-generated based on version 1.0.0 of the canonical data.
|
|
2
2
|
|
|
3
3
|
module ScaleGeneratorTest
|
|
4
4
|
|
|
5
|
-
open Xunit
|
|
6
5
|
open FsUnit.Xunit
|
|
6
|
+
open Xunit
|
|
7
7
|
|
|
8
8
|
open ScaleGenerator
|
|
9
9
|
|
|
10
10
|
[<Fact>]
|
|
11
|
-
let ``
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
let ``Chromatic scale with sharps`` () =
|
|
12
|
+
pitches "C" None |> should equal ["C"; "C#"; "D"; "D#"; "E"; "F"; "F#"; "G"; "G#"; "A"; "A#"; "B"]
|
|
13
|
+
|
|
14
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
15
|
+
let ``Chromatic scale with flats`` () =
|
|
16
|
+
pitches "F" None |> should equal ["F"; "Gb"; "G"; "Ab"; "A"; "Bb"; "B"; "C"; "Db"; "D"; "Eb"; "E"]
|
|
17
|
+
|
|
18
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
19
|
+
let ``Simple major scale`` () =
|
|
20
|
+
pitches "C" (Some "MMmMMMm") |> should equal ["C"; "D"; "E"; "F"; "G"; "A"; "B"]
|
|
15
21
|
|
|
16
22
|
[<Fact(Skip = "Remove to run test")>]
|
|
17
|
-
let ``
|
|
18
|
-
|
|
19
|
-
let expected = ["G"; "A"; "B"; "C"; "D"; "E"; "F#"]
|
|
20
|
-
major |> should equal expected
|
|
23
|
+
let ``Major scale with sharps`` () =
|
|
24
|
+
pitches "G" (Some "MMmMMMm") |> should equal ["G"; "A"; "B"; "C"; "D"; "E"; "F#"]
|
|
21
25
|
|
|
22
26
|
[<Fact(Skip = "Remove to run test")>]
|
|
23
|
-
let ``
|
|
24
|
-
|
|
25
|
-
let expected = ["F#"; "G#"; "A"; "B"; "C#"; "D"; "E"]
|
|
26
|
-
minor |> should equal expected
|
|
27
|
+
let ``Major scale with flats`` () =
|
|
28
|
+
pitches "F" (Some "MMmMMMm") |> should equal ["F"; "G"; "A"; "Bb"; "C"; "D"; "E"]
|
|
27
29
|
|
|
28
30
|
[<Fact(Skip = "Remove to run test")>]
|
|
29
|
-
let ``
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
let ``Minor scale with sharps`` () =
|
|
32
|
+
pitches "f#" (Some "MmMMmMM") |> should equal ["F#"; "G#"; "A"; "B"; "C#"; "D"; "E"]
|
|
33
|
+
|
|
34
|
+
[<Fact(Skip = "Remove to run test")>]
|
|
35
|
+
let ``Minor scale with flats`` () =
|
|
36
|
+
pitches "bb" (Some "MmMMmMM") |> should equal ["Bb"; "C"; "Db"; "Eb"; "F"; "Gb"; "Ab"]
|
|
37
|
+
|
|
34
38
|
[<Fact(Skip = "Remove to run test")>]
|
|
35
39
|
let ``Dorian mode`` () =
|
|
36
|
-
|
|
37
|
-
let expected = ["D"; "E"; "F"; "G"; "A"; "B"; "C"]
|
|
38
|
-
dorian |> should equal expected
|
|
40
|
+
pitches "d" (Some "MmMMMmM") |> should equal ["D"; "E"; "F"; "G"; "A"; "B"; "C"]
|
|
39
41
|
|
|
40
42
|
[<Fact(Skip = "Remove to run test")>]
|
|
41
43
|
let ``Mixolydian mode`` () =
|
|
42
|
-
|
|
43
|
-
let expected = ["Eb"; "F"; "G"; "Ab"; "Bb"; "C"; "Db"]
|
|
44
|
-
mixolydian |> should equal expected
|
|
44
|
+
pitches "Eb" (Some "MMmMMmM") |> should equal ["Eb"; "F"; "G"; "Ab"; "Bb"; "C"; "Db"]
|
|
45
45
|
|
|
46
46
|
[<Fact(Skip = "Remove to run test")>]
|
|
47
47
|
let ``Lydian mode`` () =
|
|
48
|
-
|
|
49
|
-
let expected = ["A"; "B"; "C#"; "D#"; "E"; "F#"; "G#"]
|
|
50
|
-
lydian |> should equal expected
|
|
48
|
+
pitches "a" (Some "MMMmMMm") |> should equal ["A"; "B"; "C#"; "D#"; "E"; "F#"; "G#"]
|
|
51
49
|
|
|
52
50
|
[<Fact(Skip = "Remove to run test")>]
|
|
53
51
|
let ``Phrygian mode`` () =
|
|
54
|
-
|
|
55
|
-
let expected = ["E"; "F"; "G"; "A"; "B"; "C"; "D"]
|
|
56
|
-
phrygian |> should equal expected
|
|
52
|
+
pitches "e" (Some "mMMMmMM") |> should equal ["E"; "F"; "G"; "A"; "B"; "C"; "D"]
|
|
57
53
|
|
|
58
54
|
[<Fact(Skip = "Remove to run test")>]
|
|
59
55
|
let ``Locrian mode`` () =
|
|
60
|
-
|
|
61
|
-
let expected = ["G"; "Ab"; "Bb"; "C"; "Db"; "Eb"; "F"]
|
|
62
|
-
locrian |> should equal expected
|
|
56
|
+
pitches "g" (Some "mMMmMMM") |> should equal ["G"; "Ab"; "Bb"; "C"; "Db"; "Eb"; "F"]
|
|
63
57
|
|
|
64
58
|
[<Fact(Skip = "Remove to run test")>]
|
|
65
59
|
let ``Harmonic minor`` () =
|
|
66
|
-
|
|
67
|
-
let expected = ["D"; "E"; "F"; "G"; "A"; "Bb"; "Db"]
|
|
68
|
-
harmonicMinor |> should equal expected
|
|
60
|
+
pitches "d" (Some "MmMMmAm") |> should equal ["D"; "E"; "F"; "G"; "A"; "Bb"; "Db"]
|
|
69
61
|
|
|
70
62
|
[<Fact(Skip = "Remove to run test")>]
|
|
71
63
|
let ``Octatonic`` () =
|
|
72
|
-
|
|
73
|
-
let expected = ["C"; "D"; "D#"; "F"; "F#"; "G#"; "A"; "B"]
|
|
74
|
-
octatonic |> should equal expected
|
|
64
|
+
pitches "C" (Some "MmMmMmMm") |> should equal ["C"; "D"; "D#"; "F"; "F#"; "G#"; "A"; "B"]
|
|
75
65
|
|
|
76
66
|
[<Fact(Skip = "Remove to run test")>]
|
|
77
67
|
let ``Hexatonic`` () =
|
|
78
|
-
|
|
79
|
-
let expected = ["Db"; "Eb"; "F"; "G"; "A"; "B"]
|
|
80
|
-
hexatonic |> should equal expected
|
|
68
|
+
pitches "Db" (Some "MMMMMM") |> should equal ["Db"; "Eb"; "F"; "G"; "A"; "B"]
|
|
81
69
|
|
|
82
70
|
[<Fact(Skip = "Remove to run test")>]
|
|
83
71
|
let ``Pentatonic`` () =
|
|
84
|
-
|
|
85
|
-
let expected = ["A"; "B"; "C#"; "E"; "F#"]
|
|
86
|
-
pentatonic |> should equal expected
|
|
72
|
+
pitches "A" (Some "MMAMA") |> should equal ["A"; "B"; "C#"; "E"; "F#"]
|
|
87
73
|
|
|
88
74
|
[<Fact(Skip = "Remove to run test")>]
|
|
89
75
|
let ``Enigmatic`` () =
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
enigmatic |> should equal expected
|
|
76
|
+
pitches "G" (Some "mAMMMmm") |> should equal ["G"; "G#"; "B"; "C#"; "D#"; "F"; "F#"]
|
|
77
|
+
|
|
@@ -56,7 +56,7 @@ type GeneratorExercise() =
|
|
|
56
56
|
abstract member RenderExpected : CanonicalDataCase * string * obj -> string
|
|
57
57
|
abstract member RenderInput : CanonicalDataCase * string * obj -> string
|
|
58
58
|
abstract member RenderArrange : CanonicalDataCase -> string list
|
|
59
|
-
abstract member RenderAssert : CanonicalDataCase -> string
|
|
59
|
+
abstract member RenderAssert : CanonicalDataCase -> string list
|
|
60
60
|
abstract member RenderSut : CanonicalDataCase -> string
|
|
61
61
|
abstract member RenderSutParameters : CanonicalDataCase -> string list
|
|
62
62
|
abstract member RenderSutParameter : CanonicalDataCase * string * obj -> string
|
|
@@ -252,7 +252,8 @@ type GeneratorExercise() =
|
|
|
252
252
|
|
|
253
253
|
canonicalDataCase
|
|
254
254
|
|> this.ToTestMethodBodyAssert
|
|
255
|
-
|> renderPartialTemplate template
|
|
255
|
+
|> renderPartialTemplate template
|
|
256
|
+
|> List.singleton
|
|
256
257
|
|
|
257
258
|
default this.RenderSut canonicalDataCase =
|
|
258
259
|
let parameters = this.RenderSutParameters canonicalDataCase
|
|
@@ -26,24 +26,23 @@ type Allergies() =
|
|
|
26
26
|
|
|
27
27
|
let toAllergen (jToken: JToken) = sprintf "Allergen.%s" (jToken.ToString() |> String.humanize)
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
Input = updatedInput
|
|
38
|
-
Expected = jToken.["result"].ToObject<bool>() |> box }
|
|
39
|
-
|> this.RenderAssert
|
|
40
|
-
|> indent 1
|
|
29
|
+
let renderAllergicToAssert canonicalDataCase (jToken: JToken) =
|
|
30
|
+
let substance = jToken.["substance"] |> toAllergen
|
|
31
|
+
let score = canonicalDataCase.Input.["score"] :?> int64
|
|
32
|
+
let sut = sprintf "allergicTo %d %s" score substance
|
|
33
|
+
let expected = jToken.Value<bool>("result") |> formatBool
|
|
34
|
+
|
|
35
|
+
{ Sut = sut; Expected = expected }
|
|
36
|
+
|> renderPartialTemplate "AssertEqual"
|
|
41
37
|
|
|
38
|
+
override __.RenderAssert canonicalDataCase =
|
|
39
|
+
match canonicalDataCase.Property with
|
|
40
|
+
| "allergicTo" ->
|
|
42
41
|
canonicalDataCase.Expected :?> JArray
|
|
43
|
-
|> Seq.map
|
|
44
|
-
|>
|
|
45
|
-
|
|
46
|
-
base.
|
|
42
|
+
|> Seq.map (renderAllergicToAssert canonicalDataCase)
|
|
43
|
+
|> Seq.toList
|
|
44
|
+
| _ ->
|
|
45
|
+
base.RenderAssert canonicalDataCase
|
|
47
46
|
|
|
48
47
|
override __.RenderExpected (canonicalDataCase, key, value) =
|
|
49
48
|
if (canonicalDataCase.Property = "list") then
|
|
@@ -118,6 +117,60 @@ type BinarySearch() =
|
|
|
118
117
|
| _ ->
|
|
119
118
|
base.RenderValueWithoutIdentifier (canonicalDataCase, key, value)
|
|
120
119
|
|
|
120
|
+
type BinarySearchTree() =
|
|
121
|
+
inherit GeneratorExercise()
|
|
122
|
+
|
|
123
|
+
let rec renderAssertions previousPaths (tree: JObject) =
|
|
124
|
+
let previousPath = previousPaths |> List.rev |> String.concat " |> "
|
|
125
|
+
let rootPath = List.length previousPaths = 1
|
|
126
|
+
|
|
127
|
+
let renderDataAssertions =
|
|
128
|
+
let dataPath = if rootPath then "data" else "Option.map data"
|
|
129
|
+
let data = tree.["data"]
|
|
130
|
+
|
|
131
|
+
match data.Type with
|
|
132
|
+
| JTokenType.Null ->
|
|
133
|
+
let expected = if rootPath then failwith "Invalid data" else "None"
|
|
134
|
+
[ sprintf "%s |> %s |> should equal %s" previousPath dataPath expected ]
|
|
135
|
+
| _ ->
|
|
136
|
+
let data = (data :?> JValue).ToObject<int>()
|
|
137
|
+
let expected = if rootPath then string data else sprintf "(Some %d)" data
|
|
138
|
+
[ sprintf "%s |> %s |> should equal %s" previousPath dataPath expected ]
|
|
139
|
+
|
|
140
|
+
let renderNodeAssertions nodeName (node: JToken) =
|
|
141
|
+
let nodePath = if rootPath then nodeName else sprintf "Option.bind %s" nodeName
|
|
142
|
+
|
|
143
|
+
match node.Type with
|
|
144
|
+
| JTokenType.Null ->
|
|
145
|
+
[ sprintf "%s |> %s |> should equal None" previousPath nodePath ]
|
|
146
|
+
| _ ->
|
|
147
|
+
renderAssertions (nodePath :: previousPaths) (node :?> JObject)
|
|
148
|
+
|
|
149
|
+
[ renderDataAssertions
|
|
150
|
+
renderNodeAssertions "left" tree.["left"]
|
|
151
|
+
renderNodeAssertions "right" tree.["right"] ]
|
|
152
|
+
|> List.concat
|
|
153
|
+
|
|
154
|
+
override __.RenderAssert canonicalDataCase =
|
|
155
|
+
match canonicalDataCase.Property with
|
|
156
|
+
| "data" ->
|
|
157
|
+
canonicalDataCase.Expected :?> JObject
|
|
158
|
+
|> renderAssertions ["treeData"]
|
|
159
|
+
| _ -> base.RenderAssert canonicalDataCase
|
|
160
|
+
|
|
161
|
+
override __.RenderInput (_, _, value) =
|
|
162
|
+
value :?> JArray
|
|
163
|
+
|> Seq.map string
|
|
164
|
+
|> formatList
|
|
165
|
+
|> sprintf "create %s"
|
|
166
|
+
|
|
167
|
+
override __.RenderExpected (canonicalDataCase, key, value) =
|
|
168
|
+
match value with
|
|
169
|
+
| :? JArray as jArray -> jArray |> Seq.map string |> formatList
|
|
170
|
+
| _ -> base.RenderExpected (canonicalDataCase, key, value)
|
|
171
|
+
|
|
172
|
+
override this.PropertiesWithIdentifier canonicalDataCase = this.PropertiesUsedAsSutParameter canonicalDataCase
|
|
173
|
+
|
|
121
174
|
type Bob() =
|
|
122
175
|
inherit GeneratorExercise()
|
|
123
176
|
|
|
@@ -136,7 +189,7 @@ type Bowling() =
|
|
|
136
189
|
|
|
137
190
|
override __.RenderSut _ ="score game"
|
|
138
191
|
|
|
139
|
-
override __.RenderSetup
|
|
192
|
+
override __.RenderSetup _ =
|
|
140
193
|
"let rollMany rolls game = List.fold (fun game pins -> roll pins game) game rolls"
|
|
141
194
|
|
|
142
195
|
override __.RenderArrange canonicalDataCase =
|
|
@@ -180,7 +233,7 @@ type CircularBuffer() =
|
|
|
180
233
|
|
|
181
234
|
override __.AdditionalNamespaces = [ "System" ]
|
|
182
235
|
|
|
183
|
-
override __.RenderAssert _ =
|
|
236
|
+
override __.RenderAssert _ = []
|
|
184
237
|
|
|
185
238
|
member __.ExceptionCheck command =
|
|
186
239
|
sprintf "(fun () -> %s |> ignore) |> should throw typeof<Exception>" command
|
|
@@ -273,10 +326,11 @@ type ComplexNumbers() =
|
|
|
273
326
|
|
|
274
327
|
let renderNumber (input: JToken) =
|
|
275
328
|
match string input with
|
|
276
|
-
| "e"
|
|
277
|
-
| "pi"
|
|
278
|
-
|
|
|
279
|
-
|
|
|
329
|
+
| "e" -> "Math.E"
|
|
330
|
+
| "pi" -> "Math.PI"
|
|
331
|
+
| "ln(2)" -> "(Math.Log(2.0))"
|
|
332
|
+
| i when i.IndexOf('.') = -1 -> sprintf "%s.0" i
|
|
333
|
+
| float -> float
|
|
280
334
|
|
|
281
335
|
let renderComplexNumber (input: JArray) =
|
|
282
336
|
sprintf "(create %s %s)" (renderNumber input.[0]) (renderNumber input.[1])
|
|
@@ -294,9 +348,8 @@ type ComplexNumbers() =
|
|
|
294
348
|
{ Sut = sprintf "%s sut" testedFunction; Expected = expected }
|
|
295
349
|
|> renderPartialTemplate "AssertEqualWithin"
|
|
296
350
|
|
|
297
|
-
[
|
|
298
|
-
|
|
299
|
-
|> String.concat "\n"
|
|
351
|
+
[ jArray.[0] |> renderNumber |> renderAssertion "real"
|
|
352
|
+
jArray.[1] |> renderNumber |> renderAssertion "imaginary" ]
|
|
300
353
|
| _ ->
|
|
301
354
|
base.RenderAssert(canonicalDataCase)
|
|
302
355
|
|
|
@@ -1012,10 +1065,7 @@ type React() =
|
|
|
1012
1065
|
)
|
|
1013
1066
|
|> Seq.toList
|
|
1014
1067
|
|
|
1015
|
-
override __.RenderAssert _ =
|
|
1016
|
-
// skip this method
|
|
1017
|
-
// because for this task we have multiple assert statements
|
|
1018
|
-
""
|
|
1068
|
+
override __.RenderAssert _ = []
|
|
1019
1069
|
|
|
1020
1070
|
override this.RenderArrange canonicalDataCase =
|
|
1021
1071
|
let initialVars = this.RenderCells canonicalDataCase
|
|
@@ -1157,6 +1207,22 @@ type Say() =
|
|
|
1157
1207
|
|
|
1158
1208
|
override __.RenderInput (_, _, value) = sprintf "%sL" (string value)
|
|
1159
1209
|
|
|
1210
|
+
type ScaleGenerator() =
|
|
1211
|
+
inherit GeneratorExercise()
|
|
1212
|
+
|
|
1213
|
+
override __.MapCanonicalDataCaseInput (canonicalDataCase, properties) =
|
|
1214
|
+
let input = base.MapCanonicalDataCaseInput (canonicalDataCase, properties)
|
|
1215
|
+
match Map.tryFind "intervals" input with
|
|
1216
|
+
| Some _ -> input
|
|
1217
|
+
| None -> Map.add "intervals" null input
|
|
1218
|
+
|
|
1219
|
+
override __.RenderInput (canonicalDataCase, key, value) =
|
|
1220
|
+
match key with
|
|
1221
|
+
| "intervals" -> value |> Option.ofObj |> formatValue |> parenthesizeOption
|
|
1222
|
+
| _ -> base.RenderInput (canonicalDataCase, key, value)
|
|
1223
|
+
|
|
1224
|
+
override __.PropertiesUsedAsSutParameter _ = ["tonic"; "intervals"]
|
|
1225
|
+
|
|
1160
1226
|
type ScrabbleScore() =
|
|
1161
1227
|
inherit GeneratorExercise()
|
|
1162
1228
|
|
|
@@ -165,10 +165,9 @@ func BenchmarkNewList(b *testing.B) {
|
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
func BenchmarkListSize(b *testing.B) {
|
|
168
|
+
list := New(array1To10)
|
|
169
|
+
b.ResetTimer()
|
|
168
170
|
for i := 0; i < b.N; i++ {
|
|
169
|
-
b.StopTimer()
|
|
170
|
-
list := New(array1To10)
|
|
171
|
-
b.StartTimer()
|
|
172
171
|
_ = list.Size()
|
|
173
172
|
}
|
|
174
173
|
}
|
|
@@ -176,35 +175,40 @@ func BenchmarkListSize(b *testing.B) {
|
|
|
176
175
|
func BenchmarkListPush(b *testing.B) {
|
|
177
176
|
for i := 0; i < b.N; i++ {
|
|
178
177
|
b.StopTimer()
|
|
179
|
-
list := New(
|
|
178
|
+
list := New([]int{})
|
|
180
179
|
b.StartTimer()
|
|
181
|
-
|
|
180
|
+
for k := 0; k < 1000; k++ {
|
|
181
|
+
list.Push(k)
|
|
182
|
+
}
|
|
182
183
|
}
|
|
183
184
|
}
|
|
184
185
|
|
|
185
186
|
func BenchmarkListPop(b *testing.B) {
|
|
186
187
|
for i := 0; i < b.N; i++ {
|
|
187
188
|
b.StopTimer()
|
|
188
|
-
list := New(
|
|
189
|
+
list := New([]int{})
|
|
190
|
+
for k := 0; k < 1000; k++ {
|
|
191
|
+
list.Push(k)
|
|
192
|
+
}
|
|
189
193
|
b.StartTimer()
|
|
190
|
-
|
|
194
|
+
for k := 0; k < 1000; k++ {
|
|
195
|
+
_, _ = list.Pop()
|
|
196
|
+
}
|
|
191
197
|
}
|
|
192
198
|
}
|
|
193
199
|
|
|
194
200
|
func BenchmarkListToArray(b *testing.B) {
|
|
201
|
+
list := New(array1To10)
|
|
202
|
+
b.ResetTimer()
|
|
195
203
|
for i := 0; i < b.N; i++ {
|
|
196
|
-
b.StopTimer()
|
|
197
|
-
list := New(array1To10)
|
|
198
|
-
b.StartTimer()
|
|
199
204
|
_ = list.Array()
|
|
200
205
|
}
|
|
201
206
|
}
|
|
202
207
|
|
|
203
208
|
func BenchmarkListReverse(b *testing.B) {
|
|
209
|
+
list := New(array1To10)
|
|
210
|
+
b.ResetTimer()
|
|
204
211
|
for i := 0; i < b.N; i++ {
|
|
205
|
-
b.StopTimer()
|
|
206
|
-
list := New(array1To10)
|
|
207
|
-
b.StartTimer()
|
|
208
212
|
_ = list.Reverse()
|
|
209
213
|
}
|
|
210
214
|
}
|
data/tracks/haskell/config.json
CHANGED
|
@@ -314,6 +314,16 @@
|
|
|
314
314
|
"topics": [
|
|
315
315
|
]
|
|
316
316
|
},
|
|
317
|
+
{
|
|
318
|
+
"uuid": "f750e380-fe16-42c0-8b3d-8acd7e443a6e",
|
|
319
|
+
"slug": "protein-translation",
|
|
320
|
+
"core": false,
|
|
321
|
+
"unlocked_by": null,
|
|
322
|
+
"difficulty": 3,
|
|
323
|
+
"topics": [
|
|
324
|
+
"Maybe"
|
|
325
|
+
]
|
|
326
|
+
},
|
|
317
327
|
{
|
|
318
328
|
"uuid": "67c53230-82e8-4207-a811-abec27bef381",
|
|
319
329
|
"slug": "anagram",
|
|
@@ -136,5 +136,13 @@ cases = [ Case { description = "should be able to score a game with all zeros"
|
|
|
136
136
|
, rolls = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3]
|
|
137
137
|
, expected = Left IncompleteGame
|
|
138
138
|
}
|
|
139
|
+
, Case { description = "cannot roll after bonus roll for spare"
|
|
140
|
+
, rolls = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 2, 2]
|
|
141
|
+
, expected = Left $ InvalidRoll 21 2
|
|
142
|
+
}
|
|
143
|
+
, Case { description = "cannot roll after bonus rolls for strike"
|
|
144
|
+
, rolls = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 3, 2, 2]
|
|
145
|
+
, expected = Left $ InvalidRoll 21 2
|
|
146
|
+
}
|
|
139
147
|
]
|
|
140
148
|
|
|
@@ -9,8 +9,8 @@ oneRow :: Char -> (Int, Int) -> String
|
|
|
9
9
|
oneRow c (0, y) = pad y ++ [c] ++ pad y
|
|
10
10
|
oneRow c (x, y) = pad y ++ [c] ++ pad x ++ [c] ++ pad y
|
|
11
11
|
|
|
12
|
-
diamond :: Char -> [String]
|
|
13
|
-
diamond = (\x -> x ++ tail (reverse x)) . mkTop . subtract 64 . ord
|
|
12
|
+
diamond :: Char -> Maybe [String]
|
|
13
|
+
diamond = Just . (\x -> x ++ tail (reverse x)) . mkTop . subtract 64 . ord
|
|
14
14
|
where rows x = zip (0 : take (x-1) [1, 3..]) [x-1, x-2..0]
|
|
15
15
|
mkTop = zipWith oneRow abc . rows
|
|
16
16
|
abc = map chr [65..90]
|