trackler 2.2.1.41 → 2.2.1.42
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitmodules +0 -3
- data/lib/trackler/version.rb +1 -1
- data/problem-specifications/exercises/change/metadata.yml +0 -3
- data/tracks/c/exercises/allergies/src/allergies.h +12 -12
- data/tracks/c/exercises/allergies/src/example.c +4 -4
- data/tracks/c/exercises/allergies/src/example.h +14 -14
- data/tracks/c/exercises/allergies/test/test_allergies.c +45 -45
- data/tracks/cfml/config.json +139 -193
- data/tracks/cfml/config/maintainers.json +11 -11
- data/tracks/csharp/exercises/etl/Etl.cs +1 -1
- data/tracks/csharp/exercises/etl/EtlTest.cs +102 -0
- data/tracks/csharp/exercises/etl/Example.cs +1 -1
- data/tracks/csharp/exercises/pascals-triangle/Example.cs +10 -1
- data/tracks/csharp/exercises/pascals-triangle/PascalsTriangle.cs +1 -0
- data/tracks/csharp/exercises/pascals-triangle/PascalsTriangleTest.cs +17 -50
- data/tracks/csharp/exercises/saddle-points/SaddlePointsTest.cs +75 -0
- data/tracks/csharp/generators/Exercises/Etl.cs +61 -0
- data/tracks/csharp/generators/Exercises/PascalsTriangle.cs +28 -0
- data/tracks/csharp/generators/Exercises/SaddlePoints.cs +50 -0
- data/tracks/csharp/generators/Output/ValueFormatter.cs +29 -0
- data/tracks/java/config.json +40 -5
- data/tracks/java/exercises/triangle/.meta/src/reference/java/Triangle.java +11 -10
- data/tracks/java/exercises/triangle/src/main/java/Triangle.java +9 -1
- data/tracks/java/exercises/triangle/src/test/java/TriangleTest.java +12 -12
- data/tracks/python/exercises/phone-number/phone_number.py +1 -1
- data/tracks/python/exercises/rna-transcription/rna_transcription.py +1 -1
- data/tracks/python/exercises/run-length-encoding/run_length_encoding.py +2 -2
- data/tracks/python/exercises/saddle-points/saddle_points.py +1 -1
- data/tracks/rust/exercises/etl/README.md +1 -1
- data/tracks/rust/exercises/ocr-numbers/README.md +1 -1
- data/tracks/rust/exercises/pascals-triangle/README.md +1 -1
- data/tracks/rust/exercises/rna-transcription/README.md +1 -1
- data/tracks/scala/exercises/meetup/src/test/scala/MeetupTest.scala +118 -93
- data/tracks/scala/testgen/src/main/scala/MeetupTestGenerator.scala +48 -0
- data/tracks/scala/testgen/src/main/scala/testgen/CanonicalDataParser.scala +1 -1
- data/tracks/typescript/config.json +13 -0
- data/tracks/typescript/exercises/bob/bob.ts +7 -0
- data/tracks/typescript/exercises/hello-world/hello-world.ts +7 -0
- data/tracks/typescript/exercises/leap/leap.ts +5 -0
- data/tracks/typescript/exercises/pangram/pangram.ts +11 -0
- data/tracks/typescript/exercises/prime-factors/README.md +73 -0
- data/tracks/typescript/exercises/prime-factors/package.json +36 -0
- data/tracks/typescript/exercises/prime-factors/prime-factors.example.ts +14 -0
- data/tracks/typescript/exercises/prime-factors/prime-factors.test.ts +25 -0
- data/tracks/{coldfusion/exercises/acronym/.meta/HINTS.md → typescript/exercises/prime-factors/prime-factors.ts} +0 -0
- data/tracks/typescript/exercises/prime-factors/tsconfig.json +22 -0
- data/tracks/typescript/exercises/prime-factors/tslint.json +127 -0
- data/tracks/typescript/exercises/prime-factors/yarn.lock +2305 -0
- data/tracks/typescript/exercises/rna-transcription/rna-transcription.ts +7 -0
- metadata +16 -242
- data/tracks/coldfusion/.gitignore +0 -5
- data/tracks/coldfusion/.travis.yml +0 -18
- data/tracks/coldfusion/CONTRIBUTING.md +0 -10
- data/tracks/coldfusion/LICENSE +0 -21
- data/tracks/coldfusion/README.md +0 -92
- data/tracks/coldfusion/bin/fetch-configlet +0 -32
- data/tracks/coldfusion/config.json +0 -223
- data/tracks/coldfusion/config/exercise_readme.go.tmpl +0 -16
- data/tracks/coldfusion/config/maintainers.json +0 -13
- data/tracks/coldfusion/docs/ABOUT.md +0 -10
- data/tracks/coldfusion/docs/EXERCISE_README_INSERT.md +0 -15
- data/tracks/coldfusion/docs/INSTALLATION.md +0 -35
- data/tracks/coldfusion/docs/LEARNING.md +0 -37
- data/tracks/coldfusion/docs/RESOURCES.md +0 -29
- data/tracks/coldfusion/docs/SNIPPET.txt +0 -8
- data/tracks/coldfusion/docs/TESTS.md +0 -13
- data/tracks/coldfusion/exercises/acronym/Acronym.cfc +0 -13
- data/tracks/coldfusion/exercises/acronym/AcronymTest.cfc +0 -43
- data/tracks/coldfusion/exercises/acronym/Solution.cfc +0 -22
- data/tracks/coldfusion/exercises/acronym/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/acronym/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/acronym/box.json +0 -8
- data/tracks/coldfusion/exercises/acronym/index.cfm +0 -37
- data/tracks/coldfusion/exercises/atbash-cipher/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/atbash-cipher/AtbashCipher.cfc +0 -14
- data/tracks/coldfusion/exercises/atbash-cipher/AtbashCipherTest.cfc +0 -71
- data/tracks/coldfusion/exercises/atbash-cipher/Solution.cfc +0 -56
- data/tracks/coldfusion/exercises/atbash-cipher/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/atbash-cipher/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/atbash-cipher/box.json +0 -8
- data/tracks/coldfusion/exercises/atbash-cipher/index.cfm +0 -37
- data/tracks/coldfusion/exercises/bob/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/bob/Bob.cfc +0 -13
- data/tracks/coldfusion/exercises/bob/BobTest.cfc +0 -115
- data/tracks/coldfusion/exercises/bob/Solution.cfc +0 -27
- data/tracks/coldfusion/exercises/bob/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/bob/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/bob/box.json +0 -8
- data/tracks/coldfusion/exercises/bob/index.cfm +0 -37
- data/tracks/coldfusion/exercises/diamond/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/diamond/Diamond.cfc +0 -13
- data/tracks/coldfusion/exercises/diamond/DiamondTest.cfc +0 -35
- data/tracks/coldfusion/exercises/diamond/Solution.cfc +0 -35
- data/tracks/coldfusion/exercises/diamond/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/diamond/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/diamond/box.json +0 -8
- data/tracks/coldfusion/exercises/diamond/index.cfm +0 -37
- data/tracks/coldfusion/exercises/difference-of-squares/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/difference-of-squares/DifferenceOfSquares.cfc +0 -18
- data/tracks/coldfusion/exercises/difference-of-squares/DifferenceOfSquaresTest.cfc +0 -63
- data/tracks/coldfusion/exercises/difference-of-squares/Solution.cfc +0 -28
- data/tracks/coldfusion/exercises/difference-of-squares/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/difference-of-squares/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/difference-of-squares/box.json +0 -8
- data/tracks/coldfusion/exercises/difference-of-squares/index.cfm +0 -37
- data/tracks/coldfusion/exercises/flatten-array/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/flatten-array/FlattenArray.cfc +0 -13
- data/tracks/coldfusion/exercises/flatten-array/FlattenArrayTest.cfc +0 -42
- data/tracks/coldfusion/exercises/flatten-array/Solution.cfc +0 -26
- data/tracks/coldfusion/exercises/flatten-array/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/flatten-array/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/flatten-array/box.json +0 -8
- data/tracks/coldfusion/exercises/flatten-array/index.cfm +0 -37
- data/tracks/coldfusion/exercises/gigasecond/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/gigasecond/Gigasecond.cfc +0 -13
- data/tracks/coldfusion/exercises/gigasecond/GigasecondTest.cfc +0 -39
- data/tracks/coldfusion/exercises/gigasecond/Solution.cfc +0 -16
- data/tracks/coldfusion/exercises/gigasecond/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/gigasecond/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/gigasecond/box.json +0 -8
- data/tracks/coldfusion/exercises/gigasecond/index.cfm +0 -37
- data/tracks/coldfusion/exercises/grains/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/grains/Grains.cfc +0 -14
- data/tracks/coldfusion/exercises/grains/GrainsTest.cfc +0 -63
- data/tracks/coldfusion/exercises/grains/Solution.cfc +0 -22
- data/tracks/coldfusion/exercises/grains/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/grains/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/grains/box.json +0 -8
- data/tracks/coldfusion/exercises/grains/index.cfm +0 -37
- data/tracks/coldfusion/exercises/hamming/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/hamming/Hamming.cfc +0 -13
- data/tracks/coldfusion/exercises/hamming/HammingTest.cfc +0 -75
- data/tracks/coldfusion/exercises/hamming/Solution.cfc +0 -25
- data/tracks/coldfusion/exercises/hamming/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/hamming/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/hamming/box.json +0 -8
- data/tracks/coldfusion/exercises/hamming/index.cfm +0 -37
- data/tracks/coldfusion/exercises/hello-world/HelloWorld.cfc +0 -13
- data/tracks/coldfusion/exercises/hello-world/HelloWorldTest.cfc +0 -18
- data/tracks/coldfusion/exercises/hello-world/Solution.cfc +0 -13
- data/tracks/coldfusion/exercises/hello-world/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/hello-world/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/hello-world/box.json +0 -8
- data/tracks/coldfusion/exercises/hello-world/index.cfm +0 -37
- data/tracks/coldfusion/exercises/isogram/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/isogram/Isogram.cfc +0 -13
- data/tracks/coldfusion/exercises/isogram/IsogramTest.cfc +0 -55
- data/tracks/coldfusion/exercises/isogram/Solution.cfc +0 -23
- data/tracks/coldfusion/exercises/isogram/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/isogram/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/isogram/box.json +0 -8
- data/tracks/coldfusion/exercises/isogram/index.cfm +0 -37
- data/tracks/coldfusion/exercises/largest-series-product/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/largest-series-product/LargestSeriesProduct.cfc +0 -13
- data/tracks/coldfusion/exercises/largest-series-product/LargestSeriesProductTest.cfc +0 -75
- data/tracks/coldfusion/exercises/largest-series-product/Solution.cfc +0 -41
- data/tracks/coldfusion/exercises/largest-series-product/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/largest-series-product/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/largest-series-product/box.json +0 -8
- data/tracks/coldfusion/exercises/largest-series-product/index.cfm +0 -37
- data/tracks/coldfusion/exercises/leap/Leap.cfc +0 -15
- data/tracks/coldfusion/exercises/leap/LeapTest.cfc +0 -39
- data/tracks/coldfusion/exercises/leap/README.md +0 -33
- data/tracks/coldfusion/exercises/leap/Solution.cfc +0 -19
- data/tracks/coldfusion/exercises/leap/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/leap/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/leap/box.json +0 -8
- data/tracks/coldfusion/exercises/leap/index.cfm +0 -37
- data/tracks/coldfusion/exercises/luhn/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/luhn/Luhn.cfc +0 -13
- data/tracks/coldfusion/exercises/luhn/LuhnTest.cfc +0 -67
- data/tracks/coldfusion/exercises/luhn/Solution.cfc +0 -38
- data/tracks/coldfusion/exercises/luhn/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/luhn/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/luhn/box.json +0 -8
- data/tracks/coldfusion/exercises/luhn/index.cfm +0 -37
- data/tracks/coldfusion/exercises/nth-prime/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/nth-prime/NthPrime.cfc +0 -13
- data/tracks/coldfusion/exercises/nth-prime/NthPrimeTest.cfc +0 -35
- data/tracks/coldfusion/exercises/nth-prime/Solution.cfc +0 -33
- data/tracks/coldfusion/exercises/nth-prime/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/nth-prime/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/nth-prime/box.json +0 -8
- data/tracks/coldfusion/exercises/nth-prime/index.cfm +0 -37
- data/tracks/coldfusion/exercises/pangram/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/pangram/Pangram.cfc +0 -13
- data/tracks/coldfusion/exercises/pangram/PangramTest.cfc +0 -55
- data/tracks/coldfusion/exercises/pangram/Solution.cfc +0 -21
- data/tracks/coldfusion/exercises/pangram/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/pangram/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/pangram/box.json +0 -8
- data/tracks/coldfusion/exercises/pangram/index.cfm +0 -37
- data/tracks/coldfusion/exercises/pig-latin/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/pig-latin/PigLatin.cfc +0 -13
- data/tracks/coldfusion/exercises/pig-latin/PigLatinTest.cfc +0 -115
- data/tracks/coldfusion/exercises/pig-latin/Solution.cfc +0 -30
- data/tracks/coldfusion/exercises/pig-latin/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/pig-latin/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/pig-latin/box.json +0 -8
- data/tracks/coldfusion/exercises/pig-latin/index.cfm +0 -37
- data/tracks/coldfusion/exercises/raindrops/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/raindrops/Raindrops.cfc +0 -13
- data/tracks/coldfusion/exercises/raindrops/RaindropsTest.cfc +0 -87
- data/tracks/coldfusion/exercises/raindrops/Solution.cfc +0 -33
- data/tracks/coldfusion/exercises/raindrops/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/raindrops/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/raindrops/box.json +0 -8
- data/tracks/coldfusion/exercises/raindrops/index.cfm +0 -37
- data/tracks/coldfusion/exercises/rna-transcription/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/rna-transcription/RnaTranscription.cfc +0 -13
- data/tracks/coldfusion/exercises/rna-transcription/RnaTranscriptionTest.cfc +0 -47
- data/tracks/coldfusion/exercises/rna-transcription/Solution.cfc +0 -35
- data/tracks/coldfusion/exercises/rna-transcription/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/rna-transcription/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/rna-transcription/box.json +0 -8
- data/tracks/coldfusion/exercises/rna-transcription/index.cfm +0 -37
- data/tracks/coldfusion/exercises/saddle-points/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/saddle-points/SaddlePoints.cfc +0 -13
- data/tracks/coldfusion/exercises/saddle-points/SaddlePointsTest.cfc +0 -35
- data/tracks/coldfusion/exercises/saddle-points/Solution.cfc +0 -59
- data/tracks/coldfusion/exercises/saddle-points/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/saddle-points/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/saddle-points/box.json +0 -8
- data/tracks/coldfusion/exercises/saddle-points/index.cfm +0 -37
- data/tracks/coldfusion/exercises/scrabble-score/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/scrabble-score/ScrabbleScore.cfc +0 -13
- data/tracks/coldfusion/exercises/scrabble-score/ScrabbleScoreTest.cfc +0 -59
- data/tracks/coldfusion/exercises/scrabble-score/Solution.cfc +0 -50
- data/tracks/coldfusion/exercises/scrabble-score/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/scrabble-score/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/scrabble-score/box.json +0 -8
- data/tracks/coldfusion/exercises/scrabble-score/index.cfm +0 -37
- data/tracks/coldfusion/exercises/secret-handshake/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/secret-handshake/SecretHandshake.cfc +0 -13
- data/tracks/coldfusion/exercises/secret-handshake/SecretHandshakeTest.cfc +0 -63
- data/tracks/coldfusion/exercises/secret-handshake/Solution.cfc +0 -31
- data/tracks/coldfusion/exercises/secret-handshake/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/secret-handshake/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/secret-handshake/box.json +0 -8
- data/tracks/coldfusion/exercises/secret-handshake/index.cfm +0 -37
- data/tracks/coldfusion/exercises/space-age/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/space-age/Solution.cfc +0 -28
- data/tracks/coldfusion/exercises/space-age/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/space-age/SpaceAge.cfc +0 -13
- data/tracks/coldfusion/exercises/space-age/SpaceAgeTest.cfc +0 -47
- data/tracks/coldfusion/exercises/space-age/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/space-age/box.json +0 -8
- data/tracks/coldfusion/exercises/space-age/index.cfm +0 -37
- data/tracks/coldfusion/exercises/sum-of-multiples/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/sum-of-multiples/Solution.cfc +0 -27
- data/tracks/coldfusion/exercises/sum-of-multiples/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/sum-of-multiples/SumOfMultiples.cfc +0 -13
- data/tracks/coldfusion/exercises/sum-of-multiples/SumOfMultiplesTest.cfc +0 -63
- data/tracks/coldfusion/exercises/sum-of-multiples/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/sum-of-multiples/box.json +0 -8
- data/tracks/coldfusion/exercises/sum-of-multiples/index.cfm +0 -37
- data/tracks/coldfusion/exercises/triangle/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/triangle/Solution.cfc +0 -53
- data/tracks/coldfusion/exercises/triangle/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/triangle/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/triangle/Triangle.cfc +0 -18
- data/tracks/coldfusion/exercises/triangle/TriangleTest.cfc +0 -95
- data/tracks/coldfusion/exercises/triangle/box.json +0 -8
- data/tracks/coldfusion/exercises/triangle/index.cfm +0 -37
- data/tracks/coldfusion/exercises/word-count/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/exercises/word-count/Solution.cfc +0 -22
- data/tracks/coldfusion/exercises/word-count/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/exercises/word-count/TestRunner.cfc +0 -103
- data/tracks/coldfusion/exercises/word-count/WordCount.cfc +0 -13
- data/tracks/coldfusion/exercises/word-count/WordCountTest.cfc +0 -55
- data/tracks/coldfusion/exercises/word-count/box.json +0 -8
- data/tracks/coldfusion/exercises/word-count/index.cfm +0 -37
- data/tracks/coldfusion/img/icon.png +0 -0
- data/tracks/coldfusion/tasks/GenerateTests.cfc +0 -179
- data/tracks/coldfusion/tasks/ScaffoldExercise.cfc +0 -85
- data/tracks/coldfusion/tasks/TestAllSolutions.cfc +0 -24
- data/tracks/coldfusion/tasks/exercise_template/.meta/HINTS.md +0 -0
- data/tracks/coldfusion/tasks/exercise_template/@@name@@.cfc +0 -13
- data/tracks/coldfusion/tasks/exercise_template/@@name@@Test.cfc +0 -15
- data/tracks/coldfusion/tasks/exercise_template/Solution.cfc +0 -6
- data/tracks/coldfusion/tasks/exercise_template/SolutionTest.cfc +0 -7
- data/tracks/coldfusion/tasks/exercise_template/TestRunner.cfc +0 -103
- data/tracks/coldfusion/tasks/exercise_template/box.json +0 -8
- data/tracks/coldfusion/tasks/exercise_template/index.cfm +0 -37
- data/tracks/csharp/exercises/etl/ETLTest.cs +0 -51
- data/tracks/csharp/exercises/saddle-points/SaddlePointTest.cs +0 -68
- data/tracks/java/exercises/triangle/.meta/src/reference/java/TriangleKind.java +0 -5
- data/tracks/java/exercises/triangle/src/main/java/TriangleKind.java +0 -5
@@ -1,85 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* I scaffold a new exercise from the template.
|
3
|
-
*/
|
4
|
-
component {
|
5
|
-
|
6
|
-
function run(
|
7
|
-
slug,
|
8
|
-
difficulty,
|
9
|
-
uuid=createGUID()
|
10
|
-
) {
|
11
|
-
var repoRootPath = expandPath( getDirectoryFromPath( getCurrentTemplatePath() ) & '../' );
|
12
|
-
|
13
|
-
// Acquire slug
|
14
|
-
if( isNull( arguments.slug ) ) {
|
15
|
-
arguments.slug = ask( 'Exercise slug as defined by Excercism. Ex: "hello-world": ' );
|
16
|
-
}
|
17
|
-
|
18
|
-
// Slug of hello-world defaults to name of HelloWorld
|
19
|
-
var exerciseName = arguments.slug
|
20
|
-
.listToArray( '-' )
|
21
|
-
.map( function( i ){
|
22
|
-
return i.left( 1 ).uCase() & i.right( -1 ).lCase();
|
23
|
-
} )
|
24
|
-
.toList( '' );
|
25
|
-
|
26
|
-
// Acquire diffculty
|
27
|
-
if( isNull( arguments.difficulty ) ) {
|
28
|
-
arguments.difficulty = ask( message='Difficulty: ', defaultResponse=1 );
|
29
|
-
}
|
30
|
-
|
31
|
-
// Validation to prevent duplicate runs
|
32
|
-
var exerciseDirectory = repoRootPath & 'exercises/' & arguments.slug;
|
33
|
-
if( directoryExists( exerciseDirectory ) ) {
|
34
|
-
error( 'An exercise named [#arguments.slug#] already exists!' );
|
35
|
-
}
|
36
|
-
|
37
|
-
// Add this exercise to config.json
|
38
|
-
var configJSON = deserializeJSON( fileRead( repoRootPath & '/config.json' ) );
|
39
|
-
configJSON.exercises.append( {
|
40
|
-
"uuid": arguments.uuid,
|
41
|
-
"difficulty": arguments.difficulty+0,
|
42
|
-
"slug": arguments.slug,
|
43
|
-
"topics": []
|
44
|
-
} );
|
45
|
-
fileWrite( repoRootPath & '/config.json', formatterUtil.formatJSON( json=configJSON, indent=' ' , lineEnding=chr( 10 ) ) );
|
46
|
-
|
47
|
-
// Create exercise scaffold
|
48
|
-
directoryCreate( exerciseDirectory );
|
49
|
-
directoryCopy( repoRootPath & '/tasks/exercise_template', exerciseDirectory, true );
|
50
|
-
|
51
|
-
// Perform Token replacements
|
52
|
-
command( 'tokenReplace' )
|
53
|
-
.params( '**', '@@name@@', exerciseName )
|
54
|
-
.inWorkingDirectory( exerciseDirectory )
|
55
|
-
.run();
|
56
|
-
|
57
|
-
directoryList( exerciseDirectory, true )
|
58
|
-
.each( function( path ){
|
59
|
-
if( path.findNoCase( '@@name@@' ) ) {
|
60
|
-
fileMove( path, path.replaceNoCase( '@@name@@', exerciseName, 'all' ) );
|
61
|
-
}
|
62
|
-
} );
|
63
|
-
|
64
|
-
print.boldGreenLine( 'New exercise created!' )
|
65
|
-
.line()
|
66
|
-
.greenLine( 'The exercise is located here: ' )
|
67
|
-
.indentedYellowLine( exerciseDirectory )
|
68
|
-
.line()
|
69
|
-
.greenLine( 'Create a sample solution here: ' )
|
70
|
-
.indentedYellowLine( exerciseDirectory & '/Solution.cfc' )
|
71
|
-
.line()
|
72
|
-
.greenLine( 'Test your solution with this command: ' )
|
73
|
-
.indentedYellowLine( 'box task run TestRunner --:solution' )
|
74
|
-
.line()
|
75
|
-
.toConsole();
|
76
|
-
|
77
|
-
// Generate test suite
|
78
|
-
command( 'task run' )
|
79
|
-
.params( 'GenerateTests', 'run', slug )
|
80
|
-
.inWorkingDirectory( repoRootPath & '/tasks' )
|
81
|
-
.run();
|
82
|
-
|
83
|
-
}
|
84
|
-
|
85
|
-
}
|
@@ -1,24 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* I test all the solutions in each exercise to make sure they all pass.
|
3
|
-
*/
|
4
|
-
component {
|
5
|
-
|
6
|
-
function run() {
|
7
|
-
// Get an array of all the excercise names
|
8
|
-
var exercises = directoryList( expandPath( getDirectoryFromPath( getCurrentTemplatePath() ) & '../exercises' ) );
|
9
|
-
|
10
|
-
// If there's a testrunner task in them, run it. If any of the tasks fail, the exit code will come back as 1
|
11
|
-
exercises.each( function( path ) {
|
12
|
-
if( fileExists( path & '/TestRunner.cfc' ) ) {
|
13
|
-
command( 'task run' )
|
14
|
-
.params( 'TestRunner' )
|
15
|
-
// Specifically as the task runners to run the SolutionTest
|
16
|
-
.flags( ':solution' )
|
17
|
-
.inWorkingDirectory( path )
|
18
|
-
.run();
|
19
|
-
}
|
20
|
-
} );
|
21
|
-
|
22
|
-
}
|
23
|
-
|
24
|
-
}
|
File without changes
|
@@ -1,103 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* I am a CommandBox task runner which you can use to test your implementation of this exercise against the
|
3
|
-
* provided test suite. To use me, open the CommandBox CLI and run this:
|
4
|
-
*
|
5
|
-
* CommandBox> task run TestRunner
|
6
|
-
*
|
7
|
-
* To start up a test watcher that will automatically rerun the test suite every time you save a file change, run this:
|
8
|
-
*
|
9
|
-
* CommandBox> task run TestRunner --watcher
|
10
|
-
*
|
11
|
-
*/
|
12
|
-
component {
|
13
|
-
|
14
|
-
/**
|
15
|
-
* @solution Runs the tests against the solution
|
16
|
-
* @watcher Start up a file watch that re-runs the tests on file changes. Use Ctrl-C to stop
|
17
|
-
*/
|
18
|
-
function run( boolean solution=false, boolean watcher=false ) {
|
19
|
-
|
20
|
-
ensureTestBox();
|
21
|
-
|
22
|
-
if( watcher ) {
|
23
|
-
|
24
|
-
// Tabula rasa
|
25
|
-
command( 'cls' ).run();
|
26
|
-
|
27
|
-
// Start watcher
|
28
|
-
watch()
|
29
|
-
.paths( '*.cfc' )
|
30
|
-
.inDirectory( getCWD() )
|
31
|
-
.withDelay( 500 )
|
32
|
-
.onChange( function() {
|
33
|
-
|
34
|
-
// Clear the screen
|
35
|
-
command( 'cls' )
|
36
|
-
.run();
|
37
|
-
|
38
|
-
// This is neccessary so changes to tests get picked up right away.
|
39
|
-
pagePoolClear();
|
40
|
-
|
41
|
-
runTests( solution );
|
42
|
-
|
43
|
-
} )
|
44
|
-
.start();
|
45
|
-
|
46
|
-
} else {
|
47
|
-
runTests( solution );
|
48
|
-
}
|
49
|
-
|
50
|
-
}
|
51
|
-
|
52
|
-
/**
|
53
|
-
* Make sure the TestBox framework is installed
|
54
|
-
*/
|
55
|
-
private function ensureTestBox() {
|
56
|
-
var excerciseRoot = getCWD();
|
57
|
-
var testBoxRoot = excerciseRoot & '/testbox';
|
58
|
-
|
59
|
-
if( !directoryExists( testBoxRoot ) ) {
|
60
|
-
|
61
|
-
print.boldYellowLine( 'Installing some missing dependencies for you!' ).toConsole();
|
62
|
-
command( 'install' )
|
63
|
-
.inWorkingDirectory( excerciseRoot )
|
64
|
-
.run();
|
65
|
-
}
|
66
|
-
|
67
|
-
// Bootstrap TestBox framework
|
68
|
-
filesystemUtil.createMapping( '/testbox', testBoxRoot );
|
69
|
-
}
|
70
|
-
|
71
|
-
/**
|
72
|
-
* Invoke TestBox to run the test suite
|
73
|
-
*/
|
74
|
-
private function runTests( boolean solution=false ) {
|
75
|
-
|
76
|
-
// Create TestBox and run the tests
|
77
|
-
testData = new testbox.system.TestBox()
|
78
|
-
.runRaw( directory = {
|
79
|
-
// Find all CFCs...
|
80
|
-
mapping = filesystemUtil.makePathRelative( getCWD() ),
|
81
|
-
// ... in this directory ...
|
82
|
-
recurse = false,
|
83
|
-
// ... whose name ends in "test"
|
84
|
-
filter = function( path ) {
|
85
|
-
return path.reFind( ( solution ? 'Solution' : '' ) & 'Test.cfc$' );
|
86
|
-
}
|
87
|
-
} )
|
88
|
-
.getMemento();
|
89
|
-
|
90
|
-
// Print out the results with ANSI formatting for the CLI
|
91
|
-
getInstance( 'CLIRenderer@testbox-commands' )
|
92
|
-
.render( print, testData, true );
|
93
|
-
|
94
|
-
print.toConsole();
|
95
|
-
|
96
|
-
// Set proper exit code
|
97
|
-
if( testData.totalFail || testData.totalError ) {
|
98
|
-
setExitCode( 1 );
|
99
|
-
}
|
100
|
-
}
|
101
|
-
|
102
|
-
}
|
103
|
-
|
@@ -1,37 +0,0 @@
|
|
1
|
-
<!---
|
2
|
-
|
3
|
-
This file will only be used if you want to start up a web server in this directory. You can do so by running:
|
4
|
-
|
5
|
-
$> box
|
6
|
-
CommandBox> install
|
7
|
-
CommandBox> server start
|
8
|
-
|
9
|
-
However, this is not necessary unless you really just want to use the HTML reporters on TestBox.
|
10
|
-
Ideally, you'll skip the need for this file entirely and just run the tests directly frm the CLI like this:
|
11
|
-
|
12
|
-
CommandBox> task run TestRunner
|
13
|
-
|
14
|
-
--->
|
15
|
-
<cfsetting showDebugOutput="false">
|
16
|
-
<cfparam name="url.reporter" default="simple">
|
17
|
-
<cfscript>
|
18
|
-
// get a list of all CFCs in this folder whose name looks like "XXXTest.cfc"
|
19
|
-
// And turn it into compnent path relative to the web root
|
20
|
-
url.bundles = directoryList(
|
21
|
-
path=expandPath( '/' ),
|
22
|
-
filter='*Test.cfc' )
|
23
|
-
.map( function( path ) {
|
24
|
-
return path
|
25
|
-
.replaceNoCase( expandPath( '/' ), '' )
|
26
|
-
.left( -4 )
|
27
|
-
} )
|
28
|
-
.toList();
|
29
|
-
</cfscript>
|
30
|
-
|
31
|
-
<!--- Ensure TestBox --->
|
32
|
-
<cfif fileExists( "/testbox/system/runners/HTMLRunner.cfm" )>
|
33
|
-
<!--- Include the TestBox HTML Runner --->
|
34
|
-
<cfinclude template="/testbox/system/runners/HTMLRunner.cfm">
|
35
|
-
<cfelse>
|
36
|
-
Oops, you don't have TestBox installed yet! Please run <b>box install</b> from the root of your excercise folder and refresh this page.
|
37
|
-
</cfif>
|
@@ -1,51 +0,0 @@
|
|
1
|
-
using System.Collections.Generic;
|
2
|
-
using Xunit;
|
3
|
-
|
4
|
-
public class ETLTest
|
5
|
-
{
|
6
|
-
[Fact]
|
7
|
-
public void Transforms_one_value()
|
8
|
-
{
|
9
|
-
var old = new Dictionary<int, IList<string>> { { 1, new List<string> { "A" } } };
|
10
|
-
var expected = new Dictionary<string, int> { { "a", 1 } };
|
11
|
-
Assert.Equal(expected, ETL.Transform(old));
|
12
|
-
}
|
13
|
-
|
14
|
-
[Fact(Skip = "Remove to run test")]
|
15
|
-
public void Transforms_multiple_values()
|
16
|
-
{
|
17
|
-
var old = new Dictionary<int, IList<string>> { { 1, new List<string> { "A", "E", "I", "O", "U" } } };
|
18
|
-
var expected = new Dictionary<string, int> { { "a", 1 }, { "e", 1 }, { "i", 1 }, { "o", 1 }, { "u", 1 } };
|
19
|
-
Assert.Equal(expected, ETL.Transform(old));
|
20
|
-
}
|
21
|
-
|
22
|
-
[Fact(Skip = "Remove to run test")]
|
23
|
-
public void Transforms_multiple_keys()
|
24
|
-
{
|
25
|
-
var old = new Dictionary<int, IList<string>> { { 1, new List<string> { "A", "E" } }, { 2, new List<string> { "D", "G" } } };
|
26
|
-
var expected = new Dictionary<string, int> { { "a", 1 }, { "e", 1 }, { "d", 2 }, { "g", 2 } };
|
27
|
-
Assert.Equal(expected, ETL.Transform(old));
|
28
|
-
}
|
29
|
-
|
30
|
-
[Fact(Skip = "Remove to run test")]
|
31
|
-
public void Transforms_a_full_dataset()
|
32
|
-
{
|
33
|
-
var old = new Dictionary<int, IList<string>>
|
34
|
-
{
|
35
|
-
{ 1, new List<string> { "A", "E", "I", "O", "U", "L", "N", "R", "S", "T" } },
|
36
|
-
{ 2, new List<string> { "D", "G" } },
|
37
|
-
{ 3, new List<string> { "B", "C", "M", "P" } },
|
38
|
-
{ 4, new List<string> { "F", "H", "V", "W", "Y" } },
|
39
|
-
{ 5, new List<string> { "K" } },
|
40
|
-
{ 8, new List<string> { "J", "X" } },
|
41
|
-
{ 10, new List<string> { "Q", "Z" } },
|
42
|
-
};
|
43
|
-
var expected = new Dictionary<string, int>
|
44
|
-
{
|
45
|
-
{ "a", 1 }, { "b", 3 }, { "c", 3 }, { "d", 2 }, { "e", 1 }, { "f", 4 }, { "g", 2 }, { "h", 4 }, { "i", 1 },
|
46
|
-
{ "j", 8 }, { "k", 5 }, { "l", 1 }, { "m", 3 }, { "n", 1 }, { "o", 1 }, { "p", 3 }, { "q", 10 }, { "r", 1 },
|
47
|
-
{ "s", 1 }, { "t", 1 }, { "u", 1 }, { "v", 4 }, { "w", 4 }, { "x", 8 }, { "y", 4 }, { "z", 10 }
|
48
|
-
};
|
49
|
-
Assert.Equal(expected, ETL.Transform(old));
|
50
|
-
}
|
51
|
-
}
|
@@ -1,68 +0,0 @@
|
|
1
|
-
using System;
|
2
|
-
using Xunit;
|
3
|
-
|
4
|
-
public class SaddlePointTests
|
5
|
-
{
|
6
|
-
[Fact]
|
7
|
-
public void Readme_example()
|
8
|
-
{
|
9
|
-
var values = new[,]
|
10
|
-
{
|
11
|
-
{ 9, 8, 7 },
|
12
|
-
{ 5, 3, 2 },
|
13
|
-
{ 6, 6, 7 }
|
14
|
-
};
|
15
|
-
var actual = new SaddlePoints(values).Calculate();
|
16
|
-
Assert.Equal(new [] { Tuple.Create(1, 0)}, actual);
|
17
|
-
}
|
18
|
-
|
19
|
-
[Fact(Skip = "Remove to run test")]
|
20
|
-
public void No_saddle_point()
|
21
|
-
{
|
22
|
-
var values = new[,]
|
23
|
-
{
|
24
|
-
{ 2, 1 },
|
25
|
-
{ 1, 2 }
|
26
|
-
};
|
27
|
-
var actual = new SaddlePoints(values).Calculate();
|
28
|
-
Assert.Empty(actual);
|
29
|
-
}
|
30
|
-
|
31
|
-
[Fact(Skip = "Remove to run test")]
|
32
|
-
public void Saddle_point()
|
33
|
-
{
|
34
|
-
var values = new[,]
|
35
|
-
{
|
36
|
-
{ 1, 2 },
|
37
|
-
{ 3, 4 }
|
38
|
-
};
|
39
|
-
var actual = new SaddlePoints(values).Calculate();
|
40
|
-
Assert.Equal(new[] { Tuple.Create(0, 1) }, actual);
|
41
|
-
}
|
42
|
-
|
43
|
-
[Fact(Skip = "Remove to run test")]
|
44
|
-
public void Another_saddle_point()
|
45
|
-
{
|
46
|
-
var values = new[,]
|
47
|
-
{
|
48
|
-
{ 18, 3, 39, 19, 91 },
|
49
|
-
{ 38, 10, 8, 77, 320 },
|
50
|
-
{ 3, 4, 8, 6, 7 }
|
51
|
-
};
|
52
|
-
var actual = new SaddlePoints(values).Calculate();
|
53
|
-
Assert.Equal(new[] { Tuple.Create(2, 2) }, actual);
|
54
|
-
}
|
55
|
-
|
56
|
-
[Fact(Skip = "Remove to run test")]
|
57
|
-
public void Multiple_saddle_points()
|
58
|
-
{
|
59
|
-
var values = new[,]
|
60
|
-
{
|
61
|
-
{ 4, 5, 4 },
|
62
|
-
{ 3, 5, 5 },
|
63
|
-
{ 1, 5, 4 }
|
64
|
-
};
|
65
|
-
var actual = new SaddlePoints(values).Calculate();
|
66
|
-
Assert.Equal(new[] { Tuple.Create(0, 1), Tuple.Create(1, 1), Tuple.Create(2, 1) }, actual);
|
67
|
-
}
|
68
|
-
}
|