trackler 2.2.1.116 → 2.2.1.117
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/config.json +25 -0
- data/tracks/c/exercises/acronym/makefile +1 -1
- data/tracks/c/exercises/all-your-base/makefile +1 -1
- data/tracks/c/exercises/allergies/makefile +1 -1
- data/tracks/c/exercises/anagram/makefile +1 -1
- data/tracks/c/exercises/atbash-cipher/makefile +1 -1
- data/tracks/c/exercises/beer-song/makefile +1 -1
- data/tracks/c/exercises/binary-search-tree/README.md +53 -0
- data/tracks/c/exercises/binary-search-tree/makefile +25 -0
- data/tracks/c/exercises/binary-search-tree/src/example.c +102 -0
- data/tracks/c/exercises/binary-search-tree/src/example.h +16 -0
- data/tracks/c/exercises/binary-search-tree/test/test_binary_search_tree.c +217 -0
- data/tracks/c/exercises/binary-search-tree/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/binary-search-tree/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/binary-search-tree/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/binary-search/makefile +1 -1
- data/tracks/c/exercises/binary/makefile +1 -1
- data/tracks/c/exercises/bob/makefile +1 -1
- data/tracks/c/exercises/bracket-push/makefile +1 -1
- data/tracks/c/exercises/clock/makefile +1 -1
- data/tracks/c/exercises/collatz-conjecture/makefile +1 -1
- data/tracks/c/exercises/complex-numbers/makefile +1 -1
- data/tracks/c/exercises/crypto-square/makefile +1 -1
- data/tracks/c/exercises/diamond/README.md +52 -0
- data/tracks/c/exercises/diamond/makefile +25 -0
- data/tracks/c/exercises/diamond/src/example.c +47 -0
- data/tracks/c/exercises/diamond/src/example.h +6 -0
- data/tracks/c/exercises/diamond/test/test_diamond.c +158 -0
- data/tracks/c/exercises/diamond/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/diamond/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/diamond/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/difference-of-squares/makefile +1 -1
- data/tracks/c/exercises/etl/makefile +1 -1
- data/tracks/c/exercises/gigasecond/makefile +1 -1
- data/tracks/c/exercises/grains/makefile +1 -1
- data/tracks/c/exercises/hamming/makefile +1 -1
- data/tracks/c/exercises/hello-world/makefile +1 -1
- data/tracks/c/exercises/isogram/makefile +1 -1
- data/tracks/c/exercises/largest-series-product/makefile +1 -1
- data/tracks/c/exercises/leap/makefile +1 -1
- data/tracks/c/exercises/luhn/makefile +1 -1
- data/tracks/c/exercises/meetup/makefile +1 -1
- data/tracks/c/exercises/minesweeper/makefile +1 -1
- data/tracks/c/exercises/nth-prime/makefile +1 -1
- data/tracks/c/exercises/nucleotide-count/makefile +1 -1
- data/tracks/c/exercises/palindrome-products/makefile +1 -1
- data/tracks/c/exercises/pangram/makefile +1 -1
- data/tracks/c/exercises/pascals-triangle/makefile +1 -1
- data/tracks/c/exercises/perfect-numbers/makefile +1 -1
- data/tracks/c/exercises/phone-number/makefile +1 -1
- data/tracks/c/exercises/pig-latin/makefile +1 -1
- data/tracks/c/exercises/prime-factors/makefile +1 -1
- data/tracks/c/exercises/queen-attack/makefile +1 -1
- data/tracks/c/exercises/raindrops/makefile +1 -1
- data/tracks/c/exercises/react/makefile +1 -1
- data/tracks/c/exercises/rna-transcription/makefile +1 -1
- data/tracks/c/exercises/robot-simulator/makefile +1 -1
- data/tracks/c/exercises/roman-numerals/makefile +1 -1
- data/tracks/c/exercises/run-length-encoding/makefile +1 -1
- data/tracks/c/exercises/say/makefile +1 -1
- data/tracks/c/exercises/scrabble-score/makefile +1 -1
- data/tracks/c/exercises/secret-handshake/makefile +1 -1
- data/tracks/c/exercises/series/makefile +1 -1
- data/tracks/c/exercises/sieve/makefile +1 -1
- data/tracks/c/exercises/space-age/makefile +1 -1
- data/tracks/c/exercises/sublist/makefile +1 -1
- data/tracks/c/exercises/sum-of-multiples/makefile +1 -1
- data/tracks/c/exercises/triangle/makefile +1 -1
- data/tracks/c/exercises/two-fer/makefile +1 -1
- data/tracks/c/exercises/word-count/makefile +1 -1
- data/tracks/c/exercises/wordy/makefile +1 -1
- data/tracks/ceylon/.travis.yml +9 -0
- data/tracks/ceylon/README.md +5 -6
- data/tracks/ceylon/exercises/anagram/example/Anagram.ceylon +6 -6
- data/tracks/ceylon/exercises/anagram/source/anagram/Anagram.ceylon +1 -1
- data/tracks/ceylon/exercises/anagram/source/anagram/AnagramTest.ceylon +34 -31
- data/tracks/ceylon/exercises/anagram/source/anagram/module.ceylon +1 -1
- data/tracks/ceylon/exercises/bracket-push/example/Brackets.ceylon +14 -12
- data/tracks/ceylon/exercises/bracket-push/example/module.ceylon +2 -2
- data/tracks/ceylon/exercises/bracket-push/source/bracketpush/Brackets.ceylon +1 -1
- data/tracks/ceylon/exercises/bracket-push/source/bracketpush/BracketsTest.ceylon +34 -31
- data/tracks/ceylon/exercises/bracket-push/source/bracketpush/module.ceylon +1 -1
- data/tracks/ceylon/exercises/hamming/example/Hamming.ceylon +4 -4
- data/tracks/ceylon/exercises/hamming/source/hamming/Hamming.ceylon +1 -1
- data/tracks/ceylon/exercises/hamming/source/hamming/HammingTest.ceylon +41 -38
- data/tracks/ceylon/exercises/hamming/source/hamming/module.ceylon +1 -1
- data/tracks/ceylon/exercises/largest-series-product/example/Series.ceylon +9 -9
- data/tracks/ceylon/exercises/largest-series-product/source/largestseriesproduct/Series.ceylon +1 -1
- data/tracks/ceylon/exercises/largest-series-product/source/largestseriesproduct/SeriesTest.ceylon +41 -38
- data/tracks/ceylon/exercises/largest-series-product/source/largestseriesproduct/module.ceylon +1 -1
- data/tracks/ceylon/exercises/leap/example/Leap.ceylon +1 -1
- data/tracks/ceylon/exercises/leap/source/leap/Leap.ceylon +1 -1
- data/tracks/ceylon/exercises/leap/source/leap/LeapTest.ceylon +7 -4
- data/tracks/ceylon/exercises/leap/source/leap/module.ceylon +1 -1
- data/tracks/ceylon/exercises/react/example/Reactor.ceylon +90 -87
- data/tracks/ceylon/exercises/react/example/module.ceylon +2 -2
- data/tracks/ceylon/exercises/react/source/react/Reactor.ceylon +24 -24
- data/tracks/ceylon/exercises/react/source/react/ReactorTest.ceylon +159 -138
- data/tracks/ceylon/exercises/react/source/react/module.ceylon +1 -1
- data/tracks/ceylon/exercises/rna-transcription/example/RNA.ceylon +11 -9
- data/tracks/ceylon/exercises/rna-transcription/source/rnatranscription/RNA.ceylon +1 -1
- data/tracks/ceylon/exercises/rna-transcription/source/rnatranscription/RNATest.ceylon +28 -25
- data/tracks/ceylon/exercises/rna-transcription/source/rnatranscription/module.ceylon +1 -1
- data/tracks/ceylon/exercises/sieve/example/Sieve.ceylon +21 -19
- data/tracks/ceylon/exercises/sieve/example/module.ceylon +2 -2
- data/tracks/ceylon/exercises/sieve/source/sieve/Sieve.ceylon +1 -1
- data/tracks/ceylon/exercises/sieve/source/sieve/SieveTest.ceylon +18 -15
- data/tracks/ceylon/exercises/sieve/source/sieve/module.ceylon +1 -1
- data/tracks/csharp/exercises/clock/README.md +0 -6
- data/tracks/fsharp/config.json +2 -2
- data/tracks/go/config.json +27 -12
- data/tracks/go/exercises/all-your-base/cases_test.go +3 -3
- data/tracks/go/exercises/dominoes/.meta/gen.go +6 -6
- data/tracks/go/exercises/dominoes/.meta/hints.md +5 -5
- data/tracks/go/exercises/dominoes/README.md +5 -5
- data/tracks/go/exercises/dominoes/cases_test.go +13 -13
- data/tracks/go/exercises/dominoes/dominoes_test.go +5 -5
- data/tracks/go/exercises/dominoes/example.go +25 -25
- data/tracks/go/exercises/pig-latin/README.md +4 -4
- data/tracks/go/exercises/rectangles/README.md +0 -1
- data/tracks/go/exercises/two-bucket/README.md +1 -1
- data/tracks/go/exercises/word-count/cases_test.go +2 -2
- data/tracks/go/exercises/yacht/.meta/description.md +34 -0
- data/tracks/go/exercises/yacht/.meta/gen.go +58 -0
- data/tracks/go/exercises/yacht/.meta/metadata.yml +5 -0
- data/tracks/go/exercises/yacht/README.md +61 -0
- data/tracks/go/exercises/yacht/cases_test.go +169 -0
- data/tracks/go/exercises/yacht/example.go +74 -0
- data/tracks/go/exercises/yacht/yacht_test.go +25 -0
- data/tracks/haskell/config.json +10 -0
- data/tracks/haskell/exercises/go-counting/README.md +2 -0
- data/tracks/haskell/exercises/go-counting/package.yaml +1 -1
- data/tracks/haskell/exercises/go-counting/test/Tests.hs +15 -19
- data/tracks/haskell/exercises/poker/README.md +66 -0
- data/tracks/haskell/exercises/poker/examples/success-standard/package.yaml +16 -0
- data/tracks/haskell/exercises/poker/examples/success-standard/src/Poker.hs +49 -0
- data/tracks/haskell/exercises/poker/package.yaml +20 -0
- data/tracks/haskell/exercises/poker/src/Poker.hs +4 -0
- data/tracks/haskell/exercises/poker/stack.yaml +1 -0
- data/tracks/haskell/exercises/poker/test/Tests.hs +174 -0
- data/tracks/java/exercises/clock/.meta/version +1 -1
- data/tracks/java/exercises/complex-numbers/.meta/version +1 -1
- data/tracks/java/exercises/complex-numbers/src/test/java/ComplexNumberTest.java +56 -48
- data/tracks/java/exercises/crypto-square/.meta/version +1 -1
- data/tracks/java/exercises/markdown/.meta/version +1 -1
- data/tracks/javascript/.eslintignore +0 -2
- data/tracks/javascript/exercises/linked-list/example.js +6 -6
- data/tracks/javascript/exercises/saddle-points/example.js +32 -53
- data/tracks/lua/README.md +1 -1
- data/tracks/lua/bin/test-all +1 -1
- data/tracks/lua/config/exercise_readme.go.tmpl +1 -1
- data/tracks/lua/docs/INSTALLATION.md +3 -3
- data/tracks/lua/docs/TESTS.md +1 -1
- data/tracks/lua/exercises/accumulate/.busted +5 -0
- data/tracks/lua/exercises/accumulate/README.md +1 -1
- data/tracks/lua/exercises/acronym/.busted +5 -0
- data/tracks/lua/exercises/acronym/README.md +1 -1
- data/tracks/lua/exercises/all-your-base/.busted +5 -0
- data/tracks/lua/exercises/all-your-base/README.md +1 -1
- data/tracks/lua/exercises/allergies/.busted +5 -0
- data/tracks/lua/exercises/allergies/README.md +1 -1
- data/tracks/lua/exercises/alphametics/.busted +5 -0
- data/tracks/lua/exercises/alphametics/README.md +1 -1
- data/tracks/lua/exercises/anagram/.busted +5 -0
- data/tracks/lua/exercises/anagram/README.md +1 -1
- data/tracks/lua/exercises/atbash-cipher/.busted +5 -0
- data/tracks/lua/exercises/atbash-cipher/README.md +1 -1
- data/tracks/lua/exercises/bank-account/.busted +5 -0
- data/tracks/lua/exercises/bank-account/README.md +1 -1
- data/tracks/lua/exercises/beer-song/.busted +5 -0
- data/tracks/lua/exercises/beer-song/README.md +1 -1
- data/tracks/lua/exercises/binary-search-tree/.busted +5 -0
- data/tracks/lua/exercises/binary-search-tree/README.md +1 -1
- data/tracks/lua/exercises/binary-search/.busted +5 -0
- data/tracks/lua/exercises/binary-search/README.md +1 -1
- data/tracks/lua/exercises/binary/.busted +5 -0
- data/tracks/lua/exercises/binary/README.md +1 -1
- data/tracks/lua/exercises/bob/.busted +5 -0
- data/tracks/lua/exercises/bob/README.md +1 -1
- data/tracks/lua/exercises/bowling/.busted +5 -0
- data/tracks/lua/exercises/bowling/README.md +1 -1
- data/tracks/lua/exercises/bracket-push/.busted +5 -0
- data/tracks/lua/exercises/bracket-push/README.md +1 -1
- data/tracks/lua/exercises/change/.busted +5 -0
- data/tracks/lua/exercises/change/README.md +1 -1
- data/tracks/lua/exercises/circular-buffer/.busted +5 -0
- data/tracks/lua/exercises/circular-buffer/README.md +1 -1
- data/tracks/lua/exercises/clock/.busted +5 -0
- data/tracks/lua/exercises/clock/README.md +1 -1
- data/tracks/lua/exercises/collatz-conjecture/.busted +5 -0
- data/tracks/lua/exercises/collatz-conjecture/README.md +1 -1
- data/tracks/lua/exercises/crypto-square/.busted +5 -0
- data/tracks/lua/exercises/crypto-square/README.md +1 -1
- data/tracks/lua/exercises/custom-set/.busted +5 -0
- data/tracks/lua/exercises/custom-set/README.md +1 -1
- data/tracks/lua/exercises/diamond/.busted +5 -0
- data/tracks/lua/exercises/diamond/README.md +1 -1
- data/tracks/lua/exercises/difference-of-squares/.busted +5 -0
- data/tracks/lua/exercises/difference-of-squares/README.md +1 -1
- data/tracks/lua/exercises/etl/.busted +5 -0
- data/tracks/lua/exercises/etl/README.md +1 -1
- data/tracks/lua/exercises/flatten-array/.busted +5 -0
- data/tracks/lua/exercises/flatten-array/README.md +1 -1
- data/tracks/lua/exercises/food-chain/.busted +5 -0
- data/tracks/lua/exercises/food-chain/README.md +1 -1
- data/tracks/lua/exercises/gigasecond/.busted +5 -0
- data/tracks/lua/exercises/gigasecond/README.md +1 -1
- data/tracks/lua/exercises/grade-school/.busted +5 -0
- data/tracks/lua/exercises/grade-school/README.md +1 -1
- data/tracks/lua/exercises/grains/.busted +5 -0
- data/tracks/lua/exercises/grains/README.md +1 -1
- data/tracks/lua/exercises/hamming/.busted +5 -0
- data/tracks/lua/exercises/hamming/README.md +1 -1
- data/tracks/lua/exercises/hello-world/.busted +5 -0
- data/tracks/lua/exercises/hello-world/README.md +1 -1
- data/tracks/lua/exercises/house/.busted +5 -0
- data/tracks/lua/exercises/house/README.md +1 -1
- data/tracks/lua/exercises/isbn-verifier/.busted +5 -0
- data/tracks/lua/exercises/isbn-verifier/README.md +1 -1
- data/tracks/lua/exercises/isogram/.busted +5 -0
- data/tracks/lua/exercises/isogram/README.md +1 -1
- data/tracks/lua/exercises/kindergarten-garden/.busted +5 -0
- data/tracks/lua/exercises/kindergarten-garden/README.md +1 -1
- data/tracks/lua/exercises/largest-series-product/.busted +5 -0
- data/tracks/lua/exercises/largest-series-product/README.md +1 -1
- data/tracks/lua/exercises/leap/.busted +5 -0
- data/tracks/lua/exercises/leap/README.md +1 -1
- data/tracks/lua/exercises/linked-list/.busted +5 -0
- data/tracks/lua/exercises/linked-list/README.md +1 -1
- data/tracks/lua/exercises/list-ops/.busted +5 -0
- data/tracks/lua/exercises/list-ops/README.md +1 -1
- data/tracks/lua/exercises/luhn/.busted +5 -0
- data/tracks/lua/exercises/luhn/README.md +1 -1
- data/tracks/lua/exercises/matrix/.busted +5 -0
- data/tracks/lua/exercises/matrix/README.md +1 -1
- data/tracks/lua/exercises/meetup/.busted +5 -0
- data/tracks/lua/exercises/meetup/README.md +1 -1
- data/tracks/lua/exercises/minesweeper/.busted +5 -0
- data/tracks/lua/exercises/minesweeper/README.md +1 -1
- data/tracks/lua/exercises/nth-prime/.busted +5 -0
- data/tracks/lua/exercises/nth-prime/README.md +1 -1
- data/tracks/lua/exercises/nucleotide-count/.busted +5 -0
- data/tracks/lua/exercises/nucleotide-count/README.md +1 -1
- data/tracks/lua/exercises/ocr-numbers/.busted +5 -0
- data/tracks/lua/exercises/ocr-numbers/README.md +1 -1
- data/tracks/lua/exercises/octal/.busted +5 -0
- data/tracks/lua/exercises/octal/README.md +1 -1
- data/tracks/lua/exercises/pangram/.busted +5 -0
- data/tracks/lua/exercises/pangram/README.md +1 -1
- data/tracks/lua/exercises/pascals-triangle/.busted +5 -0
- data/tracks/lua/exercises/pascals-triangle/README.md +1 -1
- data/tracks/lua/exercises/perfect-numbers/.busted +5 -0
- data/tracks/lua/exercises/perfect-numbers/README.md +1 -1
- data/tracks/lua/exercises/phone-number/.busted +5 -0
- data/tracks/lua/exercises/phone-number/README.md +1 -1
- data/tracks/lua/exercises/pig-latin/.busted +5 -0
- data/tracks/lua/exercises/pig-latin/README.md +1 -1
- data/tracks/lua/exercises/pov/.busted +5 -0
- data/tracks/lua/exercises/pov/README.md +1 -1
- data/tracks/lua/exercises/prime-factors/.busted +5 -0
- data/tracks/lua/exercises/prime-factors/README.md +1 -1
- data/tracks/lua/exercises/protein-translation/.busted +5 -0
- data/tracks/lua/exercises/protein-translation/README.md +1 -1
- data/tracks/lua/exercises/pythagorean-triplet/.busted +5 -0
- data/tracks/lua/exercises/pythagorean-triplet/README.md +1 -1
- data/tracks/lua/exercises/queen-attack/.busted +5 -0
- data/tracks/lua/exercises/queen-attack/README.md +1 -1
- data/tracks/lua/exercises/rail-fence-cipher/.busted +5 -0
- data/tracks/lua/exercises/rail-fence-cipher/README.md +1 -1
- data/tracks/lua/exercises/raindrops/.busted +5 -0
- data/tracks/lua/exercises/raindrops/README.md +1 -1
- data/tracks/lua/exercises/react/.busted +5 -0
- data/tracks/lua/exercises/react/README.md +1 -1
- data/tracks/lua/exercises/rectangles/.busted +5 -0
- data/tracks/lua/exercises/rectangles/README.md +1 -1
- data/tracks/lua/exercises/reverse-string/.busted +5 -0
- data/tracks/lua/exercises/reverse-string/README.md +1 -1
- data/tracks/lua/exercises/reverse-string/reverse-string_spec.lua +0 -1
- data/tracks/lua/exercises/rna-transcription/.busted +5 -0
- data/tracks/lua/exercises/rna-transcription/README.md +1 -1
- data/tracks/lua/exercises/robot-name/.busted +5 -0
- data/tracks/lua/exercises/robot-name/README.md +1 -1
- data/tracks/lua/exercises/robot-simulator/.busted +5 -0
- data/tracks/lua/exercises/robot-simulator/README.md +1 -1
- data/tracks/lua/exercises/roman-numerals/.busted +5 -0
- data/tracks/lua/exercises/roman-numerals/README.md +1 -1
- data/tracks/lua/exercises/run-length-encoding/.busted +5 -0
- data/tracks/lua/exercises/run-length-encoding/README.md +1 -1
- data/tracks/lua/exercises/say/.busted +5 -0
- data/tracks/lua/exercises/say/README.md +1 -1
- data/tracks/lua/exercises/scrabble-score/.busted +5 -0
- data/tracks/lua/exercises/scrabble-score/README.md +1 -1
- data/tracks/lua/exercises/secret-handshake/.busted +5 -0
- data/tracks/lua/exercises/secret-handshake/README.md +1 -1
- data/tracks/lua/exercises/series/.busted +5 -0
- data/tracks/lua/exercises/series/README.md +1 -1
- data/tracks/lua/exercises/sieve/.busted +5 -0
- data/tracks/lua/exercises/sieve/README.md +1 -1
- data/tracks/lua/exercises/space-age/.busted +5 -0
- data/tracks/lua/exercises/space-age/README.md +1 -1
- data/tracks/lua/exercises/sublist/.busted +5 -0
- data/tracks/lua/exercises/sublist/README.md +1 -1
- data/tracks/lua/exercises/sum-of-multiples/.busted +5 -0
- data/tracks/lua/exercises/sum-of-multiples/README.md +1 -1
- data/tracks/lua/exercises/tournament/.busted +5 -0
- data/tracks/lua/exercises/tournament/README.md +1 -1
- data/tracks/lua/exercises/transpose/.busted +5 -0
- data/tracks/lua/exercises/transpose/README.md +1 -1
- data/tracks/lua/exercises/triangle/.busted +5 -0
- data/tracks/lua/exercises/triangle/README.md +1 -1
- data/tracks/lua/exercises/variable-length-quantity/.busted +5 -0
- data/tracks/lua/exercises/variable-length-quantity/README.md +1 -1
- data/tracks/lua/exercises/word-count/.busted +5 -0
- data/tracks/lua/exercises/word-count/README.md +1 -1
- data/tracks/lua/exercises/word-search/.busted +5 -0
- data/tracks/lua/exercises/word-search/README.md +1 -1
- data/tracks/ocaml/.gitignore +1 -1
- data/tracks/ocaml/exercises/space-age/test.ml +0 -1
- data/tracks/ocaml/tools/test-generator/Makefile +13 -3
- data/tracks/ocaml/tools/test-generator/jbuild +3 -0
- data/tracks/ocaml/tools/test-generator/templates/ocaml/acronym/test.ml +1 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/all-your-base/test.ml +1 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/atbash-cipher/test.ml +1 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/beer-song/test.ml +3 -3
- data/tracks/ocaml/tools/test-generator/templates/ocaml/binary-search/test.ml +1 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/bowling/test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/bracket-push/test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/change/test.ml +2 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/connect/test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/difference-of-squares/test.ml +0 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/dominoes/test.ml +9 -4
- data/tracks/ocaml/tools/test-generator/templates/ocaml/etl/test.ml +1 -3
- data/tracks/ocaml/tools/test-generator/templates/ocaml/forth/test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/hamming/test.ml +6 -6
- data/tracks/ocaml/tools/test-generator/templates/ocaml/hello-world/test.ml +1 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/leap/test.ml +1 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/luhn/test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/minesweeper/test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/pangram/test.ml +1 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/phone-number/test.ml +2 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/prime-factors/test.ml +2 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/raindrops/test.ml +1 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/rectangles/test.ml +1 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/roman-numerals/test.ml +1 -2
- data/tracks/ocaml/tools/test-generator/templates/ocaml/run-length-encoding/test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/say/test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/space-age/test.ml +2 -3
- data/tracks/ocaml/tools/test-generator/templates/ocaml/triangle/test.ml +1 -1
- data/tracks/ocaml/tools/test-generator/templates/ocaml/word-count/test.ml +1 -1
- data/tracks/perl5/exercises/largest-series-product/series_product.t +2 -2
- data/tracks/r/config.json +3 -3
- data/tracks/rust/exercises/alphametics/src/lib.rs +2 -2
- data/tracks/rust/exercises/book-store/src/lib.rs +2 -2
- data/tracks/rust/exercises/crypto-square/src/lib.rs +2 -2
- data/tracks/rust/exercises/decimal/src/lib.rs +2 -2
- data/tracks/rust/exercises/diffie-hellman/src/lib.rs +6 -6
- data/tracks/rust/exercises/isbn-verifier/src/lib.rs +2 -2
- data/tracks/rust/exercises/pig-latin/README.md +4 -4
- data/tracks/rust/exercises/poker/src/lib.rs +2 -2
- data/tracks/rust/exercises/series/src/lib.rs +2 -2
- data/tracks/scala/exercises/triangle/src/test/scala/TriangleTest.scala +2 -2
- data/tracks/scala/exercises/variable-length-quantity/src/test/scala/VariableLengthQuantityTest.scala +1 -1
- data/tracks/scala/exercises/word-count/example.scala +1 -1
- data/tracks/scala/exercises/word-count/src/test/scala/WordCountTest.scala +17 -11
- data/tracks/scala/exercises/wordy/src/test/scala/WordyTest.scala +19 -18
- data/tracks/scala/testgen/src/main/scala/TriangleTestGenerator.scala +6 -6
- data/tracks/scala/testgen/src/main/scala/VariableLengthQuantityTestGenerator.scala +6 -7
- data/tracks/scala/testgen/src/main/scala/WordCountTestGenerator.scala +5 -9
- data/tracks/scala/testgen/src/main/scala/WordyTestGenerator.scala +3 -3
- data/tracks/typescript/circle.yml +17 -0
- data/tracks/typescript/config.json +55 -0
- data/tracks/typescript/exercises/flatten-array/README.md +43 -0
- data/tracks/typescript/exercises/flatten-array/flatten-array.example.ts +14 -0
- data/tracks/typescript/exercises/flatten-array/flatten-array.test.ts +33 -0
- data/tracks/typescript/exercises/flatten-array/flatten-array.ts +0 -0
- data/tracks/typescript/exercises/flatten-array/package.json +36 -0
- data/tracks/typescript/exercises/flatten-array/tsconfig.json +22 -0
- data/tracks/typescript/exercises/flatten-array/tslint.json +127 -0
- data/tracks/typescript/exercises/flatten-array/yarn.lock +2624 -0
- data/tracks/typescript/exercises/grains/README.md +59 -0
- data/tracks/typescript/exercises/grains/grains.example.ts +21 -0
- data/tracks/typescript/exercises/grains/grains.test.ts +60 -0
- data/tracks/typescript/exercises/grains/grains.ts +0 -0
- data/tracks/typescript/exercises/grains/package.json +36 -0
- data/tracks/typescript/exercises/grains/tsconfig.json +22 -0
- data/tracks/typescript/exercises/grains/tslint.json +127 -0
- data/tracks/typescript/exercises/grains/yarn.lock +2624 -0
- data/tracks/typescript/exercises/luhn/README.md +97 -0
- data/tracks/typescript/exercises/luhn/luhn.example.ts +30 -0
- data/tracks/typescript/exercises/luhn/luhn.test.ts +47 -0
- data/tracks/typescript/exercises/luhn/luhn.ts +0 -0
- data/tracks/typescript/exercises/luhn/package.json +36 -0
- data/tracks/typescript/exercises/luhn/tsconfig.json +22 -0
- data/tracks/typescript/exercises/luhn/tslint.json +127 -0
- data/tracks/typescript/exercises/luhn/yarn.lock +2624 -0
- data/tracks/typescript/exercises/pig-latin/README.md +50 -0
- data/tracks/typescript/exercises/pig-latin/package.json +36 -0
- data/tracks/typescript/exercises/pig-latin/pig-latin.example.ts +22 -0
- data/tracks/typescript/exercises/pig-latin/pig-latin.test.ts +106 -0
- data/tracks/typescript/exercises/pig-latin/pig-latin.ts +0 -0
- data/tracks/typescript/exercises/pig-latin/tsconfig.json +22 -0
- data/tracks/typescript/exercises/pig-latin/tslint.json +127 -0
- data/tracks/typescript/exercises/pig-latin/yarn.lock +2624 -0
- metadata +146 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86698b18430cbc49e1e2e16167ec6aa9df9cfc40
|
4
|
+
data.tar.gz: c5b5f72aed663aa799b536bd3c79fcba1aeae8c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 537f35ce200183dfda9210b561a74917663cbac1cef101f2958493fe61f905358496e068c2014ad92b6e2dd8962b4e2c96a2dd95f174d65a83265ba25c82058a
|
7
|
+
data.tar.gz: a025234caa3468b897a04e4002591bed0e7b7535fa52cd8920436eacf6ff443ffc3a19cb20a9b25102f63ec5d162ec86c4202fd1d3b17cacacf0d2fc92dde563
|
data/lib/trackler/version.rb
CHANGED
data/tracks/c/config.json
CHANGED
@@ -629,6 +629,31 @@
|
|
629
629
|
],
|
630
630
|
"unlocked_by": "beer-song",
|
631
631
|
"uuid": "c1392944-08fd-45c3-b508-41d682f832d3"
|
632
|
+
},
|
633
|
+
{
|
634
|
+
"core": false,
|
635
|
+
"difficulty": 6,
|
636
|
+
"slug": "binary-search-tree",
|
637
|
+
"topics": [
|
638
|
+
"structs",
|
639
|
+
"arrays",
|
640
|
+
"recursion",
|
641
|
+
"control_flow_loops"
|
642
|
+
],
|
643
|
+
"unlocked_by": "binary-search",
|
644
|
+
"uuid": "1b33f528-8f29-4582-a268-07be2d1a4516"
|
645
|
+
},
|
646
|
+
{
|
647
|
+
"difficulty": 3,
|
648
|
+
"slug": "diamond",
|
649
|
+
"topics": [
|
650
|
+
"arrays",
|
651
|
+
"functions",
|
652
|
+
"strings",
|
653
|
+
"control_flow_if_statements"
|
654
|
+
],
|
655
|
+
"unlocked_by": "scrabble-score",
|
656
|
+
"uuid": "8605a296-1c67-4723-84ac-3a25d77ed015"
|
632
657
|
}
|
633
658
|
],
|
634
659
|
"foregone": [],
|
@@ -22,4 +22,4 @@ clean:
|
|
22
22
|
|
23
23
|
tests.out: test/test_all_your_base.c src/all_your_base.c src/all_your_base.h
|
24
24
|
@echo Compiling $@
|
25
|
-
|
25
|
+
@$(CC) $(CFLAGS) src/all_your_base.c test/vendor/unity.c test/test_all_your_base.c -o tests.out -lm
|
@@ -22,4 +22,4 @@ clean:
|
|
22
22
|
|
23
23
|
tests.out: test/test_allergies.c src/allergies.c src/allergies.h
|
24
24
|
@echo Compiling $@
|
25
|
-
|
25
|
+
@$(CC) $(CFLAGS) src/allergies.c test/vendor/unity.c test/test_allergies.c -o tests.out
|
@@ -22,4 +22,4 @@ clean:
|
|
22
22
|
|
23
23
|
tests.out: test/test_atbash_cipher.c src/atbash_cipher.c src/atbash_cipher.h
|
24
24
|
@echo Compiling $@
|
25
|
-
|
25
|
+
@$(CC) $(CFLAGS) src/atbash_cipher.c test/vendor/unity.c test/test_atbash_cipher.c -o tests.out
|
@@ -22,4 +22,4 @@ clean:
|
|
22
22
|
|
23
23
|
tests.out: test/test_beer_song.c src/beer_song.c src/beer_song.h
|
24
24
|
@echo Compiling $@
|
25
|
-
|
25
|
+
@$(CC) $(CFLAGS) src/beer_song.c test/vendor/unity.c test/test_beer_song.c -o tests.out
|
@@ -0,0 +1,53 @@
|
|
1
|
+
Insert and search for numbers in a binary tree.
|
2
|
+
|
3
|
+
When we need to represent sorted data, an array does not make a good
|
4
|
+
data structure.
|
5
|
+
|
6
|
+
Say we have the array `[1, 3, 4, 5]`, and we add 2 to it so it becomes
|
7
|
+
`[1, 3, 4, 5, 2]` now we must sort the entire array again! We can
|
8
|
+
improve on this by realizing that we only need to make space for the new
|
9
|
+
item `[1, nil, 3, 4, 5]`, and then adding the item in the space we
|
10
|
+
added. But this still requires us to shift many elements down by one.
|
11
|
+
|
12
|
+
Binary Search Trees, however, can operate on sorted data much more
|
13
|
+
efficiently.
|
14
|
+
|
15
|
+
A binary search tree consists of a series of connected nodes. Each node
|
16
|
+
contains a piece of data (e.g. the number 3), a variable named `left`,
|
17
|
+
and a variable named `right`. The `left` and `right` variables point at
|
18
|
+
`nil`, or other nodes. Since these other nodes in turn have other nodes
|
19
|
+
beneath them, we say that the left and right variables are pointing at
|
20
|
+
subtrees. All data in the left subtree is less than or equal to the
|
21
|
+
current node's data, and all data in the right subtree is greater than
|
22
|
+
the current node's data.
|
23
|
+
|
24
|
+
For example, if we had a node containing the data 4, and we added the
|
25
|
+
data 2, our tree would look like this:
|
26
|
+
|
27
|
+
4
|
28
|
+
/
|
29
|
+
2
|
30
|
+
|
31
|
+
If we then added 6, it would look like this:
|
32
|
+
|
33
|
+
4
|
34
|
+
/ \
|
35
|
+
2 6
|
36
|
+
|
37
|
+
If we then added 3, it would look like this
|
38
|
+
|
39
|
+
4
|
40
|
+
/ \
|
41
|
+
2 6
|
42
|
+
\
|
43
|
+
3
|
44
|
+
|
45
|
+
And if we then added 1, 5, and 7, it would look like this
|
46
|
+
|
47
|
+
4
|
48
|
+
/ \
|
49
|
+
/ \
|
50
|
+
2 6
|
51
|
+
/ \ / \
|
52
|
+
1 3 5 7
|
53
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
CFLAGS = -std=c99
|
2
|
+
CFLAGS += -g
|
3
|
+
CFLAGS += -Wall
|
4
|
+
CFLAGS += -Wextra
|
5
|
+
CFLAGS += -pedantic
|
6
|
+
CFLAGS += -Werror
|
7
|
+
|
8
|
+
VFLAGS = --quiet
|
9
|
+
VFLAGS += --tool=memcheck
|
10
|
+
VFLAGS += --leak-check=full
|
11
|
+
VFLAGS += --error-exitcode=1
|
12
|
+
|
13
|
+
test: tests.out
|
14
|
+
@./tests.out
|
15
|
+
|
16
|
+
memcheck: tests.out
|
17
|
+
@valgrind $(VFLAGS) ./tests.out
|
18
|
+
@echo "Memory check passed"
|
19
|
+
|
20
|
+
clean:
|
21
|
+
rm -rf *.o *.out *.out.dSYM
|
22
|
+
|
23
|
+
tests.out: test/test_binary_search_tree.c src/binary_search_tree.c src/binary_search_tree.h
|
24
|
+
@echo Compiling $@
|
25
|
+
@$(CC) $(CFLAGS) src/binary_search_tree.c test/vendor/unity.c test/test_binary_search_tree.c -o tests.out
|
@@ -0,0 +1,102 @@
|
|
1
|
+
#include "binary_search_tree.h"
|
2
|
+
#include <stdlib.h>
|
3
|
+
#include <stdio.h>
|
4
|
+
#include <stdbool.h>
|
5
|
+
|
6
|
+
#define CHUNK_SIZE 100
|
7
|
+
static bool mem_ok;
|
8
|
+
static int *parsed_tree;
|
9
|
+
static size_t parsed_len;
|
10
|
+
|
11
|
+
static void free_tree(node_t * head)
|
12
|
+
{
|
13
|
+
if (head == NULL)
|
14
|
+
return;
|
15
|
+
free_tree(head->right);
|
16
|
+
free_tree(head->left);
|
17
|
+
free(head);
|
18
|
+
}
|
19
|
+
|
20
|
+
static node_t *add_node(node_t * head, int data)
|
21
|
+
{
|
22
|
+
if (!mem_ok)
|
23
|
+
return NULL;
|
24
|
+
|
25
|
+
if (head == NULL) {
|
26
|
+
head = malloc(sizeof(node_t));
|
27
|
+
if (head == NULL) {
|
28
|
+
fprintf(stderr, "Memory error!\n");
|
29
|
+
mem_ok = false;
|
30
|
+
return NULL;
|
31
|
+
}
|
32
|
+
head->data = data;
|
33
|
+
head->left = NULL;
|
34
|
+
head->right = NULL;
|
35
|
+
|
36
|
+
} else if (head->data >= data) {
|
37
|
+
head->left = add_node(head->left, data);
|
38
|
+
|
39
|
+
} else if (head->data < data) {
|
40
|
+
head->right = add_node(head->right, data);
|
41
|
+
|
42
|
+
}
|
43
|
+
return head;
|
44
|
+
}
|
45
|
+
|
46
|
+
static void walk_tree(node_t * head)
|
47
|
+
{
|
48
|
+
if (head == NULL || !mem_ok)
|
49
|
+
return;
|
50
|
+
|
51
|
+
walk_tree(head->left);
|
52
|
+
parsed_tree[parsed_len++] = head->data;
|
53
|
+
if (parsed_len % CHUNK_SIZE == 0) {
|
54
|
+
parsed_tree =
|
55
|
+
realloc(parsed_tree, sizeof(int) * (parsed_len + CHUNK_SIZE));
|
56
|
+
if (parsed_tree == NULL) {
|
57
|
+
fprintf(stderr, "Memory error!\n");
|
58
|
+
mem_ok = false;
|
59
|
+
return;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
walk_tree(head->right);
|
63
|
+
}
|
64
|
+
|
65
|
+
node_t *build_tree(int *tree_data, size_t tree_data_len)
|
66
|
+
{
|
67
|
+
if (tree_data == NULL || tree_data_len == 0)
|
68
|
+
return NULL;
|
69
|
+
|
70
|
+
node_t *head = NULL;
|
71
|
+
mem_ok = true;
|
72
|
+
for (size_t i = 0; i < tree_data_len; i++) {
|
73
|
+
node_t *tmp = add_node(head, tree_data[i]);
|
74
|
+
if (tmp == NULL) {
|
75
|
+
free_tree(head);
|
76
|
+
return NULL;
|
77
|
+
}
|
78
|
+
head = tmp;
|
79
|
+
}
|
80
|
+
|
81
|
+
return head;
|
82
|
+
}
|
83
|
+
|
84
|
+
int *sorted_data(node_t * head)
|
85
|
+
{
|
86
|
+
if (head == NULL)
|
87
|
+
return NULL;
|
88
|
+
|
89
|
+
parsed_tree = malloc(sizeof(int) * CHUNK_SIZE);
|
90
|
+
if (parsed_tree == NULL) {
|
91
|
+
fprintf(stderr, "Memory error!\n");
|
92
|
+
return NULL;
|
93
|
+
}
|
94
|
+
|
95
|
+
mem_ok = true;
|
96
|
+
parsed_len = 0;
|
97
|
+
walk_tree(head);
|
98
|
+
if (!mem_ok)
|
99
|
+
return NULL;
|
100
|
+
|
101
|
+
return parsed_tree;
|
102
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#ifndef BINARY_SEARCH_TREE_H
|
2
|
+
#define BINARY_SEARCH_TREE_H
|
3
|
+
#include <stddef.h>
|
4
|
+
|
5
|
+
typedef struct node node_t;
|
6
|
+
|
7
|
+
struct node {
|
8
|
+
node_t *right;
|
9
|
+
node_t *left;
|
10
|
+
int data;
|
11
|
+
};
|
12
|
+
|
13
|
+
node_t *build_tree(int *tree_data, size_t tree_data_len);
|
14
|
+
int *sorted_data(node_t * tree);
|
15
|
+
|
16
|
+
#endif
|
@@ -0,0 +1,217 @@
|
|
1
|
+
#include "vendor/unity.h"
|
2
|
+
#include "../src/binary_search_tree.h"
|
3
|
+
#include <stdlib.h>
|
4
|
+
#include <stdbool.h>
|
5
|
+
|
6
|
+
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
|
7
|
+
|
8
|
+
void setUp(void)
|
9
|
+
{
|
10
|
+
}
|
11
|
+
|
12
|
+
void tearDown(void)
|
13
|
+
{
|
14
|
+
}
|
15
|
+
|
16
|
+
static void free_tree(node_t * tree)
|
17
|
+
{
|
18
|
+
if (tree == NULL)
|
19
|
+
return;
|
20
|
+
free_tree(tree->left);
|
21
|
+
free_tree(tree->right);
|
22
|
+
free(tree);
|
23
|
+
}
|
24
|
+
|
25
|
+
void test_data_data_is_retained(void)
|
26
|
+
{
|
27
|
+
int tree_data[] = { 4 };
|
28
|
+
node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));
|
29
|
+
|
30
|
+
TEST_ASSERT_NOT_NULL(tree);
|
31
|
+
TEST_ASSERT_EQUAL_INT(4, tree->data);
|
32
|
+
TEST_ASSERT_NULL(tree->left);
|
33
|
+
TEST_ASSERT_NULL(tree->right);
|
34
|
+
|
35
|
+
free_tree(tree);
|
36
|
+
}
|
37
|
+
|
38
|
+
void test_data_smaller_number_at_left_node(void)
|
39
|
+
{
|
40
|
+
TEST_IGNORE(); // delete this line to run test
|
41
|
+
int tree_data[] = { 4, 2 };
|
42
|
+
node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));
|
43
|
+
|
44
|
+
TEST_ASSERT_NOT_NULL(tree);
|
45
|
+
TEST_ASSERT_EQUAL_INT(4, tree->data);
|
46
|
+
TEST_ASSERT_NOT_NULL(tree->left);
|
47
|
+
TEST_ASSERT_NULL(tree->right);
|
48
|
+
|
49
|
+
TEST_ASSERT_EQUAL_INT(2, tree->left->data);
|
50
|
+
TEST_ASSERT_NULL(tree->left->left);
|
51
|
+
TEST_ASSERT_NULL(tree->left->right);
|
52
|
+
|
53
|
+
free_tree(tree);
|
54
|
+
}
|
55
|
+
|
56
|
+
void test_data_same_number_at_left_node(void)
|
57
|
+
{
|
58
|
+
TEST_IGNORE();
|
59
|
+
int tree_data[] = { 4, 4 };
|
60
|
+
node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));
|
61
|
+
|
62
|
+
TEST_ASSERT_NOT_NULL(tree);
|
63
|
+
TEST_ASSERT_EQUAL_INT(4, tree->data);
|
64
|
+
TEST_ASSERT_NOT_NULL(tree->left);
|
65
|
+
TEST_ASSERT_NULL(tree->right);
|
66
|
+
|
67
|
+
TEST_ASSERT_EQUAL_INT(4, tree->left->data);
|
68
|
+
TEST_ASSERT_NULL(tree->left->left);
|
69
|
+
TEST_ASSERT_NULL(tree->left->right);
|
70
|
+
|
71
|
+
free_tree(tree);
|
72
|
+
}
|
73
|
+
|
74
|
+
void test_data_greater_number_at_right_node(void)
|
75
|
+
{
|
76
|
+
TEST_IGNORE();
|
77
|
+
int tree_data[] = { 4, 5 };
|
78
|
+
node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));
|
79
|
+
|
80
|
+
TEST_ASSERT_NOT_NULL(tree);
|
81
|
+
TEST_ASSERT_EQUAL_INT(4, tree->data);
|
82
|
+
TEST_ASSERT_NULL(tree->left);
|
83
|
+
TEST_ASSERT_NOT_NULL(tree->right);
|
84
|
+
|
85
|
+
TEST_ASSERT_EQUAL_INT(5, tree->right->data);
|
86
|
+
TEST_ASSERT_NULL(tree->right->left);
|
87
|
+
TEST_ASSERT_NULL(tree->right->right);
|
88
|
+
|
89
|
+
free_tree(tree);
|
90
|
+
}
|
91
|
+
|
92
|
+
void test_data_can_create_complex_tree(void)
|
93
|
+
{
|
94
|
+
TEST_IGNORE();
|
95
|
+
int tree_data[] = { 4, 2, 6, 1, 3, 5, 7 };
|
96
|
+
node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));
|
97
|
+
|
98
|
+
TEST_ASSERT_NOT_NULL(tree);
|
99
|
+
TEST_ASSERT_EQUAL_INT(4, tree->data);
|
100
|
+
TEST_ASSERT_NOT_NULL(tree->left);
|
101
|
+
TEST_ASSERT_NOT_NULL(tree->right);
|
102
|
+
|
103
|
+
TEST_ASSERT_EQUAL_INT(2, tree->left->data);
|
104
|
+
TEST_ASSERT_NOT_NULL(tree->left->left);
|
105
|
+
TEST_ASSERT_NOT_NULL(tree->left->right);
|
106
|
+
|
107
|
+
TEST_ASSERT_EQUAL_INT(6, tree->right->data);
|
108
|
+
TEST_ASSERT_NOT_NULL(tree->right->left);
|
109
|
+
TEST_ASSERT_NOT_NULL(tree->right->right);
|
110
|
+
|
111
|
+
TEST_ASSERT_EQUAL_INT(1, tree->left->left->data);
|
112
|
+
TEST_ASSERT_NULL(tree->left->left->left);
|
113
|
+
TEST_ASSERT_NULL(tree->left->left->right);
|
114
|
+
|
115
|
+
TEST_ASSERT_EQUAL_INT(3, tree->left->right->data);
|
116
|
+
TEST_ASSERT_NULL(tree->left->right->left);
|
117
|
+
TEST_ASSERT_NULL(tree->left->right->right);
|
118
|
+
|
119
|
+
TEST_ASSERT_EQUAL_INT(5, tree->right->left->data);
|
120
|
+
TEST_ASSERT_NULL(tree->right->left->left);
|
121
|
+
TEST_ASSERT_NULL(tree->right->left->right);
|
122
|
+
|
123
|
+
TEST_ASSERT_EQUAL_INT(7, tree->right->right->data);
|
124
|
+
TEST_ASSERT_NULL(tree->right->right->left);
|
125
|
+
TEST_ASSERT_NULL(tree->right->right->right);
|
126
|
+
|
127
|
+
free_tree(tree);
|
128
|
+
}
|
129
|
+
|
130
|
+
void test_sorted_data_can_sort_single_number(void)
|
131
|
+
{
|
132
|
+
TEST_IGNORE();
|
133
|
+
int tree_data[] = { 2 };
|
134
|
+
node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));
|
135
|
+
|
136
|
+
int expected[] = { 2 };
|
137
|
+
int *actual = sorted_data(tree);
|
138
|
+
TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));
|
139
|
+
|
140
|
+
free_tree(tree);
|
141
|
+
free(actual);
|
142
|
+
}
|
143
|
+
|
144
|
+
void test_sorted_data_can_sort_if_second_number_is_smaller_than_first(void)
|
145
|
+
{
|
146
|
+
TEST_IGNORE();
|
147
|
+
int tree_data[] = { 2, 1 };
|
148
|
+
node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));
|
149
|
+
|
150
|
+
int expected[] = { 1, 2 };
|
151
|
+
int *actual = sorted_data(tree);
|
152
|
+
TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));
|
153
|
+
|
154
|
+
free_tree(tree);
|
155
|
+
free(actual);
|
156
|
+
}
|
157
|
+
|
158
|
+
void test_sorted_data_can_sort_if_second_number_is_same_as_first(void)
|
159
|
+
{
|
160
|
+
TEST_IGNORE();
|
161
|
+
int tree_data[] = { 2, 2 };
|
162
|
+
node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));
|
163
|
+
|
164
|
+
int expected[] = { 2, 2 };
|
165
|
+
int *actual = sorted_data(tree);
|
166
|
+
TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));
|
167
|
+
|
168
|
+
free_tree(tree);
|
169
|
+
free(actual);
|
170
|
+
}
|
171
|
+
|
172
|
+
void test_sorted_data_can_sort_if_second_number_is_greater_than_first(void)
|
173
|
+
{
|
174
|
+
TEST_IGNORE();
|
175
|
+
int tree_data[] = { 2, 3 };
|
176
|
+
node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));
|
177
|
+
|
178
|
+
int expected[] = { 2, 3 };
|
179
|
+
int *actual = sorted_data(tree);
|
180
|
+
TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));
|
181
|
+
|
182
|
+
free_tree(tree);
|
183
|
+
free(actual);
|
184
|
+
}
|
185
|
+
|
186
|
+
void test_sorted_data_can_sort_complex_tree(void)
|
187
|
+
{
|
188
|
+
TEST_IGNORE();
|
189
|
+
int tree_data[] = { 2, 1, 3, 6, 7, 5 };
|
190
|
+
node_t *tree = build_tree(tree_data, ARRAY_SIZE(tree_data));
|
191
|
+
|
192
|
+
int expected[] = { 1, 2, 3, 5, 6, 7 };
|
193
|
+
int *actual = sorted_data(tree);
|
194
|
+
TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, ARRAY_SIZE(expected));
|
195
|
+
|
196
|
+
free_tree(tree);
|
197
|
+
free(actual);
|
198
|
+
}
|
199
|
+
|
200
|
+
int main(void)
|
201
|
+
{
|
202
|
+
UnityBegin("test/test_binary_search_tree.c");
|
203
|
+
|
204
|
+
RUN_TEST(test_data_data_is_retained);
|
205
|
+
RUN_TEST(test_data_smaller_number_at_left_node);
|
206
|
+
RUN_TEST(test_data_same_number_at_left_node);
|
207
|
+
RUN_TEST(test_data_greater_number_at_right_node);
|
208
|
+
RUN_TEST(test_data_can_create_complex_tree);
|
209
|
+
RUN_TEST(test_sorted_data_can_sort_single_number);
|
210
|
+
RUN_TEST(test_sorted_data_can_sort_if_second_number_is_smaller_than_first);
|
211
|
+
RUN_TEST(test_sorted_data_can_sort_if_second_number_is_same_as_first);
|
212
|
+
RUN_TEST(test_sorted_data_can_sort_if_second_number_is_greater_than_first);
|
213
|
+
RUN_TEST(test_sorted_data_can_sort_complex_tree);
|
214
|
+
|
215
|
+
UnityEnd();
|
216
|
+
return 0;
|
217
|
+
}
|