trackler 2.0.0.1 → 2.0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/bump-content +3 -1
- data/bin/verify-metadata +2 -2
- data/common/exercises/alphametics/canonical-data.json +19 -9
- data/common/exercises/food-chain/canonical-data.json +7 -1
- data/common/exercises/grains/canonical-data.json +66 -0
- data/common/exercises/raindrops/description.md +4 -5
- data/common/exercises/triangle/canonical-data.json +81 -54
- data/lib/trackler/version.rb +1 -1
- data/tracks/c/config.json +26 -19
- data/tracks/c/exercises/allergies/makefile +15 -0
- data/tracks/c/exercises/allergies/src/allergies.h +21 -0
- data/tracks/c/exercises/allergies/src/example.c +32 -0
- data/tracks/c/exercises/allergies/src/example.h +26 -0
- data/tracks/c/exercises/allergies/test/test_allergies.c +203 -0
- data/tracks/c/exercises/allergies/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/allergies/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/allergies/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/atbash-cipher/makefile +16 -0
- data/tracks/c/exercises/atbash-cipher/src/example.c +71 -0
- data/tracks/c/exercises/atbash-cipher/src/example.h +7 -0
- data/tracks/c/exercises/atbash-cipher/test/test_atbash_cipher.c +113 -0
- data/tracks/c/exercises/atbash-cipher/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/atbash-cipher/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/atbash-cipher/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/phone-number/makefile +16 -0
- data/tracks/c/exercises/phone-number/src/example.c +66 -0
- data/tracks/c/exercises/phone-number/src/example.h +8 -0
- data/tracks/c/exercises/phone-number/test/test_phone_number.c +108 -0
- data/tracks/c/exercises/phone-number/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/phone-number/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/phone-number/test/vendor/unity_internals.h +701 -0
- data/tracks/csharp/config.json +8 -0
- data/tracks/csharp/exercises/bowling/BowlingTest.cs +188 -33
- data/tracks/csharp/exercises/bowling/Example.cs +38 -9
- data/tracks/csharp/exercises/rectangles/Example.cs +91 -0
- data/tracks/csharp/exercises/rectangles/RectanglesTest.cs +133 -0
- data/tracks/elisp/docs/INSTALLATION.org +1 -1
- data/tracks/elixir/config.json +8 -66
- data/tracks/elixir/docs/LEARNING.md +1 -1
- data/tracks/elixir/exercises/diamond/diamond_test.exs +12 -12
- data/tracks/elixir/exercises/grep/example.exs +92 -0
- data/tracks/elixir/exercises/grep/grep.exs +6 -0
- data/tracks/elixir/exercises/grep/grep_test.exs +259 -0
- data/tracks/elixir/exercises/markdown/markdown.exs +59 -2
- data/tracks/elixir/exercises/nucleotide-count/nucleotide_count_test.exs +4 -4
- data/tracks/elixir/exercises/phone-number/phone_number_test.exs +5 -0
- data/tracks/fsharp/exercises/bowling/BowlingTest.fs +158 -43
- data/tracks/fsharp/exercises/bowling/Example.fs +53 -24
- data/tracks/go/config.json +5 -0
- data/tracks/go/exercises/diamond/diamond_test.go +227 -0
- data/tracks/go/exercises/diamond/example.go +47 -0
- data/tracks/go/exercises/food-chain/example.go +1 -1
- data/tracks/go/exercises/food-chain/food_chain_test.go +30 -6
- data/tracks/go/exercises/nucleotide-count/example.go +21 -8
- data/tracks/go/exercises/nucleotide-count/nucleotide_count_test.go +45 -37
- data/tracks/haskell/exercises/anagram/test/Tests.hs +1 -11
- data/tracks/java/bin/journey-test.sh +165 -128
- data/tracks/java/docs/ABOUT.md +5 -8
- data/tracks/java/exercises/hello-world/build.gradle +0 -6
- data/tracks/java/exercises/hello-world/src/test/java/HelloWorldTest.java +0 -1
- data/tracks/java/exercises/meetup/build.gradle +0 -1
- data/tracks/java/exercises/meetup/src/example/java/Meetup.java +9 -7
- data/tracks/java/exercises/meetup/src/test/java/MeetupTest.java +185 -188
- data/tracks/lua/config.json +0 -73
- data/tracks/lua/exercises/bowling/bowling_spec.lua +92 -48
- data/tracks/lua/exercises/bowling/example.lua +4 -1
- data/tracks/objective-c/config.json +9 -30
- data/tracks/objective-c/exercises/pangram/PangramExample.h +7 -0
- data/tracks/objective-c/exercises/pangram/PangramExample.m +21 -0
- data/tracks/objective-c/exercises/pangram/PangramTest.m +51 -0
- data/tracks/objective-c/xcodeProject/ObjectiveC.xcodeproj/project.pbxproj +18 -0
- data/tracks/ocaml/README.md +46 -1
- data/tracks/ocaml/SETUP.md +21 -2
- data/tracks/ocaml/config.json +48 -78
- data/tracks/perl5/README.md +15 -8
- data/tracks/perl5/testall.pl +5 -5
- data/tracks/php/config.json +26 -34
- data/tracks/php/docs/ABOUT.md +15 -0
- data/tracks/php/exercises/allergies/allergies_test.php +121 -0
- data/tracks/php/exercises/allergies/example.php +64 -0
- data/tracks/php/exercises/etl/etl_test.php +52 -0
- data/tracks/php/exercises/etl/example.php +12 -0
- data/tracks/php/exercises/nucleotide-count/example.php +25 -0
- data/tracks/php/exercises/nucleotide-count/nucleotide-count_test.php +36 -0
- data/tracks/php/exercises/pig-latin/example.php +25 -29
- data/tracks/php/exercises/pig-latin/pig-latin_test.php +26 -19
- data/tracks/php/exercises/space-age/example.php +65 -0
- data/tracks/php/exercises/space-age/space-age_test.php +70 -0
- data/tracks/php/exercises/triangle/example.php +43 -0
- data/tracks/php/exercises/triangle/triangle_test.php +140 -0
- data/tracks/pony/exercises/anagram/example.pony +6 -6
- data/tracks/pony/exercises/anagram/test.pony +3 -4
- data/tracks/pony/exercises/bob/test.pony +23 -23
- data/tracks/pony/exercises/difference-of-squares/test.pony +11 -11
- data/tracks/pony/exercises/hamming/example.pony +3 -3
- data/tracks/pony/exercises/hamming/test.pony +16 -16
- data/tracks/pony/exercises/hello-world/test.pony +5 -4
- data/tracks/pony/exercises/leap/test.pony +8 -8
- data/tracks/python/config.json +18 -0
- data/tracks/python/exercises/diamond/diamond_test.py +33 -0
- data/tracks/python/exercises/diamond/example.py +15 -0
- data/tracks/python/exercises/linked-list/example.py +47 -0
- data/tracks/python/exercises/linked-list/linked_list.py +13 -0
- data/tracks/python/exercises/linked-list/linked_list_test.py +49 -0
- data/tracks/python/exercises/list-ops/example.py +55 -0
- data/tracks/python/exercises/list-ops/list_ops.py +38 -0
- data/tracks/python/exercises/list-ops/list_ops_test.py +136 -0
- data/tracks/ruby/bin/generate +22 -2
- data/tracks/ruby/config.json +12 -83
- data/tracks/ruby/exercises/allergies/allergies_test.rb +0 -1
- data/tracks/ruby/exercises/atbash-cipher/atbash_cipher_test.rb +0 -1
- data/tracks/ruby/exercises/beer-song/beer_song_test.rb +1 -2
- data/tracks/ruby/exercises/binary/example.rb +0 -1
- data/tracks/ruby/exercises/binary-search-tree/binary_search_tree_test.rb +1 -1
- data/tracks/ruby/exercises/bowling/.version +1 -0
- data/tracks/ruby/exercises/bowling/bowling_test.rb +109 -133
- data/tracks/ruby/exercises/bowling/example.rb +7 -7
- data/tracks/ruby/exercises/bowling/example.tt +27 -0
- data/tracks/ruby/exercises/circular-buffer/circular_buffer_test.rb +0 -2
- data/tracks/ruby/exercises/clock/example.rb +0 -2
- data/tracks/ruby/exercises/connect/connect_test.rb +0 -1
- data/tracks/ruby/exercises/custom-set/custom_set_test.rb +0 -1
- data/tracks/ruby/exercises/diamond/diamond_test.rb +0 -1
- data/tracks/ruby/exercises/etl/etl_test.rb +1 -1
- data/tracks/ruby/exercises/house/house_test.rb +0 -1
- data/tracks/ruby/exercises/isogram/isogram_test.rb +2 -2
- data/tracks/ruby/exercises/largest-series-product/example.tt +0 -3
- data/tracks/ruby/exercises/largest-series-product/largest_series_product_test.rb +0 -4
- data/tracks/ruby/exercises/linked-list/linked_list_test.rb +1 -1
- data/tracks/ruby/exercises/meetup/meetup_test.rb +0 -1
- data/tracks/ruby/exercises/nth-prime/example.tt +0 -2
- data/tracks/ruby/exercises/nth-prime/nth_prime_test.rb +0 -2
- data/tracks/ruby/exercises/ocr-numbers/ocr_numbers_test.rb +1 -2
- data/tracks/ruby/exercises/protein-translation/protein_translation_test.rb +0 -1
- data/tracks/ruby/exercises/proverb/proverb_test.rb +1 -3
- data/tracks/ruby/exercises/queen-attack/example.rb +3 -1
- data/tracks/ruby/exercises/queen-attack/queen_attack_test.rb +34 -8
- data/tracks/ruby/exercises/robot-simulator/robot_simulator_test.rb +1 -1
- data/tracks/ruby/exercises/strain/strain_test.rb +2 -2
- data/tracks/ruby/exercises/tournament/.version +1 -0
- data/tracks/ruby/exercises/tournament/example.rb +54 -0
- data/tracks/ruby/exercises/tournament/example.tt +23 -0
- data/tracks/ruby/exercises/tournament/tournament_test.rb +92 -0
- data/tracks/ruby/exercises/transpose/.version +1 -0
- data/tracks/ruby/exercises/transpose/example.rb +14 -0
- data/tracks/ruby/exercises/transpose/example.tt +22 -0
- data/tracks/ruby/exercises/transpose/transpose_test.rb +303 -0
- data/tracks/ruby/lib/bowling_cases.rb +46 -0
- data/tracks/ruby/lib/isogram_cases.rb +1 -1
- data/tracks/ruby/lib/tournament_cases.rb +45 -0
- data/tracks/ruby/lib/transpose_cases.rb +45 -0
- data/tracks/rust/config.json +2 -0
- data/tracks/rust/exercises/bowling/.gitignore +7 -0
- data/tracks/rust/exercises/bowling/Cargo.toml +3 -0
- data/tracks/rust/exercises/bowling/example.rs +134 -0
- data/tracks/rust/exercises/bowling/tests/bowling.rs +373 -0
- data/tracks/rust/exercises/grains/.gitignore +7 -0
- data/tracks/rust/exercises/grains/Cargo.toml +3 -0
- data/tracks/rust/exercises/grains/example.rs +11 -0
- data/tracks/rust/exercises/grains/src/lib.rs +7 -0
- data/tracks/rust/exercises/grains/tests/grains.rs +63 -0
- data/tracks/rust/problems.md +2 -0
- data/tracks/scala/README.md +38 -0
- data/tracks/scala/config.json +20 -74
- data/tracks/scala/exercises/accumulate/src/test/scala/accumulate_test.scala +4 -0
- data/tracks/scala/exercises/allergies/src/test/scala/allergies_test.scala +11 -0
- data/tracks/scala/exercises/alphametics/build.sbt +6 -0
- data/tracks/scala/exercises/alphametics/example.scala +125 -0
- data/tracks/scala/exercises/alphametics/src/main/scala/.keep +0 -0
- data/tracks/scala/exercises/alphametics/src/test/scala/AlphameticsTest.scala +62 -0
- data/tracks/scala/exercises/atbash-cipher/src/test/scala/atbash_test.scala +8 -0
- data/tracks/scala/exercises/bank-account/src/test/scala/BankAccountTest.scala +4 -0
- data/tracks/scala/exercises/binary/src/test/scala/binary_test.scala +13 -0
- data/tracks/scala/exercises/binary-search-tree/src/test/scala/BstTest.scala +11 -0
- data/tracks/scala/exercises/bowling/Example.scala +116 -0
- data/tracks/scala/exercises/bowling/build.sbt +3 -0
- data/tracks/scala/exercises/bowling/src/main/scala/Bowling.scala +11 -0
- data/tracks/scala/exercises/bowling/src/test/scala/BowlingSuite.scala +237 -0
- data/tracks/scala/exercises/clock/src/test/scala/ClockTest.scala +50 -0
- data/tracks/scala/exercises/connect/README.md +17 -0
- data/tracks/scala/exercises/connect/src/test/scala/ConnectTest.scala +7 -0
- data/tracks/scala/exercises/crypto-square/src/test/scala/{CrytpoSquareTest.scala → CryptoSquareTest.scala} +9 -0
- data/tracks/scala/exercises/custom-set/src/test/scala/CustomSetTest.scala +36 -0
- data/tracks/scala/exercises/difference-of-squares/src/test/scala/squares_test.scala +8 -0
- data/tracks/scala/exercises/forth/src/test/scala/ForthTest.scala +22 -0
- data/tracks/scala/exercises/hexadecimal/src/test/scala/HexadecimalTest.scala +8 -0
- data/tracks/scala/exercises/kindergarten-garden/src/test/scala/GardenTest.scala +5 -0
- data/tracks/scala/exercises/largest-series-product/src/test/scala/SeriesTest.scala +2 -0
- data/tracks/scala/exercises/linked-list/src/test/scala/DequeTest.scala +4 -0
- data/tracks/scala/exercises/luhn/src/test/scala/LuhnTest.scala +4 -0
- data/tracks/scala/exercises/matrix/src/test/scala/MatrixTest.scala +2 -0
- data/tracks/scala/exercises/minesweeper/src/test/scala/MinesweeperTest.scala +6 -0
- data/tracks/scala/exercises/nth-prime/src/test/scala/PrimeTest.scala +5 -0
- data/tracks/scala/exercises/ocr-numbers/src/test/scala/OcrTest.scala +15 -0
- data/tracks/scala/exercises/octal/src/test/scala/OctalTest.scala +7 -0
- data/tracks/scala/exercises/parallel-letter-frequency/src/test/scala/FrequencyTest.scala +8 -0
- data/tracks/scala/exercises/pascals-triangle/src/test/scala/PascalsTriangleTest.scala +5 -0
- data/tracks/scala/exercises/pig-latin/src/test/scala/PigLatinTest.scala +4 -0
- data/tracks/scala/exercises/pythagorean-triplet/src/test/scala/PythagoreanTripletTest.scala +3 -0
- data/tracks/scala/exercises/queen-attack/src/test/scala/QueensTest.scala +5 -0
- data/tracks/scala/exercises/robot-simulator/src/test/scala/RobotTest.scala +16 -8
- data/tracks/scala/exercises/say/src/test/scala/SayTest.scala +34 -17
- data/tracks/scala/exercises/scrabble-score/src/test/scala/scrabble_score_test.scala +6 -0
- data/tracks/scala/exercises/secret-handshake/src/test/scala/SecretHandshakeTest.scala +18 -9
- data/tracks/scala/exercises/series/src/test/scala/SeriesTest.scala +4 -2
- data/tracks/scala/exercises/sieve/src/test/scala/SieveTest.scala +8 -4
- data/tracks/scala/exercises/simple-cipher/src/test/scala/CipherTest.scala +17 -9
- data/tracks/scala/exercises/sublist/src/test/scala/sublist_test.scala +17 -0
- data/tracks/scala/exercises/trinary/src/test/scala/TrinaryTest.scala +14 -7
- data/tracks/scala/exercises/wordy/src/test/scala/WordProblemTest.scala +28 -14
- data/tracks/scala/project/Build.scala +3 -3
- data/tracks/scala/testgen/src/main/scala/BowlingTestGenerator.scala +57 -0
- data/tracks/sml/config.json +41 -6
- data/tracks/sml/exercises/flatten-array/example.sml +6 -0
- data/tracks/sml/exercises/flatten-array/test_flatten_array.sml +10 -0
- data/tracks/sml/exercises/nth-prime/example.sml +46 -0
- data/tracks/sml/exercises/nth-prime/test_nth_prime.sml +14 -0
- data/tracks/sml/exercises/raindrops/example.sml +9 -0
- data/tracks/sml/exercises/raindrops/raindrops.sml +2 -0
- data/tracks/sml/exercises/raindrops/test_raindrops.sml +95 -0
- data/tracks/swift/config.json +269 -328
- data/tracks/swift/exercises/pangram/PangramExample.swift +17 -0
- data/tracks/swift/exercises/pangram/PangramTest.swift +43 -0
- data/tracks/swift/xcodeProject/xSwift.xcodeproj/project.pbxproj +16 -0
- metadata +95 -3
@@ -1,36 +1,32 @@
|
|
1
1
|
<?php
|
2
|
+
/**
|
3
|
+
* Translates a string into Pig Latin
|
4
|
+
*
|
5
|
+
* @param string $str
|
6
|
+
* @return string
|
7
|
+
*/
|
8
|
+
function translate($str)
|
9
|
+
{
|
10
|
+
$words = explode(" ", $str);
|
11
|
+
$translatedWords = array_map('translateWord', $words);
|
12
|
+
return implode(' ', $translatedWords);
|
13
|
+
}
|
2
14
|
|
3
|
-
|
15
|
+
/**
|
16
|
+
* Translates a single word
|
17
|
+
*
|
18
|
+
* @param string $str
|
19
|
+
* @return string
|
20
|
+
*/
|
21
|
+
function translateWord($str)
|
4
22
|
{
|
5
|
-
|
6
|
-
|
7
|
-
*
|
8
|
-
* @param string $str
|
9
|
-
* @return string
|
10
|
-
*/
|
11
|
-
public static function translate($str)
|
12
|
-
{
|
13
|
-
$words = explode(" ", $str);
|
14
|
-
$translatedWords = array_map(["self", 'translateWord'], $words);
|
15
|
-
return implode(' ', $translatedWords);
|
23
|
+
if (preg_match('/^s?qu|thr?|s?ch/', $str, $match)) {
|
24
|
+
return sprintf("%s%say", substr($str, strlen($match[0])), $match[0]);
|
16
25
|
}
|
17
26
|
|
18
|
-
|
19
|
-
|
20
|
-
*
|
21
|
-
* @param string $str
|
22
|
-
* @return string
|
23
|
-
*/
|
24
|
-
private static function translateWord($str)
|
25
|
-
{
|
26
|
-
if (preg_match('/^s?qu|thr?|s?ch/', $str, $match)) {
|
27
|
-
return sprintf("%s%say", substr($str, strlen($match[0])), $match[0]);
|
28
|
-
}
|
29
|
-
|
30
|
-
if (preg_match('/^[aeiou]|yt|xr/', $str)) {
|
31
|
-
return sprintf("%say", $str);
|
32
|
-
}
|
33
|
-
|
34
|
-
return sprintf("%s%say", substr($str, 1), $str[0]);
|
27
|
+
if (preg_match('/^[aeiou]|yt|xr/', $str)) {
|
28
|
+
return sprintf("%say", $str);
|
35
29
|
}
|
30
|
+
|
31
|
+
return sprintf("%s%say", substr($str, 1), $str[0]);
|
36
32
|
}
|
@@ -5,63 +5,70 @@ class PigLatinTest extends PHPUnit_Framework_TestCase
|
|
5
5
|
{
|
6
6
|
public function testWordBeginningWithP()
|
7
7
|
{
|
8
|
-
$this->assertEquals("igpay",
|
8
|
+
$this->assertEquals("igpay", translate("pig"));
|
9
9
|
}
|
10
10
|
|
11
11
|
public function testWordBeginningWithK()
|
12
12
|
{
|
13
13
|
$this->markTestSkipped();
|
14
14
|
|
15
|
-
$this->assertEquals("oalakay",
|
15
|
+
$this->assertEquals("oalakay", translate("koala"));
|
16
16
|
}
|
17
17
|
|
18
18
|
public function testWordBeginningWithY()
|
19
19
|
{
|
20
20
|
$this->markTestSkipped();
|
21
21
|
|
22
|
-
$this->assertEquals("ellowyay",
|
22
|
+
$this->assertEquals("ellowyay", translate("yellow"));
|
23
23
|
}
|
24
24
|
|
25
25
|
public function testWordBeginningWithX()
|
26
26
|
{
|
27
27
|
$this->markTestSkipped();
|
28
28
|
|
29
|
-
$this->assertEquals("enonxay",
|
29
|
+
$this->assertEquals("enonxay", translate("xenon"));
|
30
30
|
}
|
31
31
|
|
32
32
|
public function testWordBeginningWithA()
|
33
33
|
{
|
34
34
|
$this->markTestSkipped();
|
35
35
|
|
36
|
-
$this->assertEquals("appleay",
|
36
|
+
$this->assertEquals("appleay", translate("apple"));
|
37
37
|
}
|
38
38
|
|
39
39
|
public function testWordBeginningWithE()
|
40
40
|
{
|
41
41
|
$this->markTestSkipped();
|
42
42
|
|
43
|
-
$this->assertEquals("earay",
|
43
|
+
$this->assertEquals("earay", translate("ear"));
|
44
44
|
}
|
45
45
|
|
46
46
|
public function testWordBeginningWithI()
|
47
47
|
{
|
48
48
|
$this->markTestSkipped();
|
49
49
|
|
50
|
-
$this->assertEquals("iglooay",
|
50
|
+
$this->assertEquals("iglooay", translate("igloo"));
|
51
51
|
}
|
52
52
|
|
53
53
|
public function testWordBeginningWithO()
|
54
54
|
{
|
55
55
|
$this->markTestSkipped();
|
56
56
|
|
57
|
-
$this->assertEquals("objectay",
|
57
|
+
$this->assertEquals("objectay", translate("object"));
|
58
58
|
}
|
59
59
|
|
60
60
|
public function testWordBeginningWithU()
|
61
61
|
{
|
62
62
|
$this->markTestSkipped();
|
63
63
|
|
64
|
-
$this->assertEquals("underay",
|
64
|
+
$this->assertEquals("underay", translate("under"));
|
65
|
+
}
|
66
|
+
|
67
|
+
public function testWordBeginningVowelFollowedByQu()
|
68
|
+
{
|
69
|
+
$this->markTestSkipped();
|
70
|
+
|
71
|
+
$this->assertEquals("equalay", translate("equal"));
|
65
72
|
}
|
66
73
|
|
67
74
|
|
@@ -69,7 +76,7 @@ class PigLatinTest extends PHPUnit_Framework_TestCase
|
|
69
76
|
{
|
70
77
|
$this->markTestSkipped();
|
71
78
|
|
72
|
-
$this->assertEquals("atqay",
|
79
|
+
$this->assertEquals("atqay", translate("qat"));
|
73
80
|
}
|
74
81
|
|
75
82
|
|
@@ -77,62 +84,62 @@ class PigLatinTest extends PHPUnit_Framework_TestCase
|
|
77
84
|
{
|
78
85
|
$this->markTestSkipped();
|
79
86
|
|
80
|
-
$this->assertEquals("airchay",
|
87
|
+
$this->assertEquals("airchay", translate("chair"));
|
81
88
|
}
|
82
89
|
|
83
90
|
public function testWordBeginningWithQu()
|
84
91
|
{
|
85
92
|
$this->markTestSkipped();
|
86
93
|
|
87
|
-
$this->assertEquals("eenquay",
|
94
|
+
$this->assertEquals("eenquay", translate("queen"));
|
88
95
|
}
|
89
96
|
|
90
97
|
public function testWordBeginningWithQuAndAPrecedingConsonant()
|
91
98
|
{
|
92
99
|
$this->markTestSkipped();
|
93
100
|
|
94
|
-
$this->assertEquals("aresquay",
|
101
|
+
$this->assertEquals("aresquay", translate("square"));
|
95
102
|
}
|
96
103
|
|
97
104
|
public function testWordBeginningWithTh()
|
98
105
|
{
|
99
106
|
$this->markTestSkipped();
|
100
107
|
|
101
|
-
$this->assertEquals("erapythay",
|
108
|
+
$this->assertEquals("erapythay", translate("therapy"));
|
102
109
|
}
|
103
110
|
|
104
111
|
public function testWordBeginningWithThr()
|
105
112
|
{
|
106
113
|
$this->markTestSkipped();
|
107
114
|
|
108
|
-
$this->assertEquals("ushthray",
|
115
|
+
$this->assertEquals("ushthray", translate("thrush"));
|
109
116
|
}
|
110
117
|
|
111
118
|
public function testWordBeginningWithSch()
|
112
119
|
{
|
113
120
|
$this->markTestSkipped();
|
114
121
|
|
115
|
-
$this->assertEquals("oolschay",
|
122
|
+
$this->assertEquals("oolschay", translate("school"));
|
116
123
|
}
|
117
124
|
|
118
125
|
public function testWordBeginningWithYt()
|
119
126
|
{
|
120
127
|
$this->markTestSkipped();
|
121
128
|
|
122
|
-
$this->assertEquals("yttriaay",
|
129
|
+
$this->assertEquals("yttriaay", translate("yttria"));
|
123
130
|
}
|
124
131
|
|
125
132
|
public function testWordBeginningWithXr()
|
126
133
|
{
|
127
134
|
$this->markTestSkipped();
|
128
135
|
|
129
|
-
$this->assertEquals("xrayay",
|
136
|
+
$this->assertEquals("xrayay", translate("xray"));
|
130
137
|
}
|
131
138
|
|
132
139
|
public function testAWholePhrase()
|
133
140
|
{
|
134
141
|
$this->markTestSkipped();
|
135
142
|
|
136
|
-
$this->assertEquals("ickquay astfay unray",
|
143
|
+
$this->assertEquals("ickquay astfay unray", translate("quick fast run"));
|
137
144
|
}
|
138
145
|
}
|
@@ -0,0 +1,65 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
class SpaceAge
|
4
|
+
{
|
5
|
+
public $seconds;
|
6
|
+
|
7
|
+
const EARTH_YEAR_IN_SECONDS = 31557600;
|
8
|
+
const MERCURY_YEAR_IN_EY = 0.2408467;
|
9
|
+
const VENUS_YEAR_IN_EY = 0.61519726;
|
10
|
+
const MARS_YEAR_IN_EY = 1.8808158;
|
11
|
+
const JUPITER_YEAR_IN_EY = 11.862615;
|
12
|
+
const SATURN_YEAR_IN_EY = 29.447498;
|
13
|
+
const URANUS_YEAR_IN_EY = 84.016846;
|
14
|
+
const NEPTUNE_YEAR_IN_EY = 164.79132;
|
15
|
+
|
16
|
+
public function __construct($seconds)
|
17
|
+
{
|
18
|
+
$this->seconds = $seconds;
|
19
|
+
}
|
20
|
+
|
21
|
+
public function seconds()
|
22
|
+
{
|
23
|
+
return $this->seconds;
|
24
|
+
}
|
25
|
+
|
26
|
+
public function earth()
|
27
|
+
{
|
28
|
+
return $this->seconds / self::EARTH_YEAR_IN_SECONDS;
|
29
|
+
}
|
30
|
+
|
31
|
+
public function mercury()
|
32
|
+
{
|
33
|
+
return $this->earth() / self::MERCURY_YEAR_IN_EY;
|
34
|
+
}
|
35
|
+
|
36
|
+
public function venus()
|
37
|
+
{
|
38
|
+
return $this->earth() / self::VENUS_YEAR_IN_EY;
|
39
|
+
}
|
40
|
+
|
41
|
+
public function mars()
|
42
|
+
{
|
43
|
+
return $this->earth() / self::MARS_YEAR_IN_EY;
|
44
|
+
}
|
45
|
+
|
46
|
+
public function jupiter()
|
47
|
+
{
|
48
|
+
return $this->earth() / self::JUPITER_YEAR_IN_EY;
|
49
|
+
}
|
50
|
+
|
51
|
+
public function saturn()
|
52
|
+
{
|
53
|
+
return $this->earth() / self::SATURN_YEAR_IN_EY;
|
54
|
+
}
|
55
|
+
|
56
|
+
public function uranus()
|
57
|
+
{
|
58
|
+
return $this->earth() / self::URANUS_YEAR_IN_EY;
|
59
|
+
}
|
60
|
+
|
61
|
+
public function neptune()
|
62
|
+
{
|
63
|
+
return $this->earth() / self::NEPTUNE_YEAR_IN_EY;
|
64
|
+
}
|
65
|
+
}
|
@@ -0,0 +1,70 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
require "space-age.php";
|
4
|
+
|
5
|
+
class SpaceAgeTester extends PHPUnit_Framework_TestCase
|
6
|
+
{
|
7
|
+
const DELTA = 0.01;
|
8
|
+
|
9
|
+
public function testAgeInSeconds()
|
10
|
+
{
|
11
|
+
$age = new SpaceAge(1000000);
|
12
|
+
$this->assertEquals(1000000, $age->seconds());
|
13
|
+
}
|
14
|
+
|
15
|
+
public function testAgeOnEarth()
|
16
|
+
{
|
17
|
+
$this->markTestSkipped();
|
18
|
+
$age = new SpaceAge(1000000000);
|
19
|
+
$this->assertEquals(31.69, $age->earth(), '', self::DELTA);
|
20
|
+
}
|
21
|
+
|
22
|
+
public function testAgeOnMercury()
|
23
|
+
{
|
24
|
+
$this->markTestSkipped();
|
25
|
+
$age = new SpaceAge(2134835688);
|
26
|
+
$this->assertEquals(280.88, $age->mercury(), '', self::DELTA);
|
27
|
+
}
|
28
|
+
|
29
|
+
public function testAgeOnVenus()
|
30
|
+
{
|
31
|
+
$this->markTestSkipped();
|
32
|
+
$age = new SpaceAge(189839836);
|
33
|
+
$this->assertEquals(9.78, $age->venus(), '', self::DELTA);
|
34
|
+
}
|
35
|
+
|
36
|
+
public function testAgeOnMars()
|
37
|
+
{
|
38
|
+
$this->markTestSkipped();
|
39
|
+
$age = new SpaceAge(2329871239);
|
40
|
+
$this->assertEquals(39.25, $age->mars(), '', self::DELTA);
|
41
|
+
}
|
42
|
+
|
43
|
+
public function testAgeOnJupiter()
|
44
|
+
{
|
45
|
+
$this->markTestSkipped();
|
46
|
+
$age = new SpaceAge(901876382);
|
47
|
+
$this->assertEquals(2.41, $age->jupiter(), '', self::DELTA);
|
48
|
+
}
|
49
|
+
|
50
|
+
public function testAgeOnSaturn()
|
51
|
+
{
|
52
|
+
$this->markTestSkipped();
|
53
|
+
$age = new SpaceAge(3000000000);
|
54
|
+
$this->assertEquals(3.23, $age->saturn(), '', self::DELTA);
|
55
|
+
}
|
56
|
+
|
57
|
+
public function testAgeOnUranus()
|
58
|
+
{
|
59
|
+
$this->markTestSkipped();
|
60
|
+
$age = new SpaceAge(3210123456);
|
61
|
+
$this->assertEquals(1.21, $age->uranus(), '', self::DELTA);
|
62
|
+
}
|
63
|
+
|
64
|
+
public function testAgeOnNeptune()
|
65
|
+
{
|
66
|
+
$this->markTestSkipped();
|
67
|
+
$age = new SpaceAge(8210123456);
|
68
|
+
$this->assertEquals(1.58, $age->neptune(), '', self::DELTA);
|
69
|
+
}
|
70
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
class Triangle
|
4
|
+
{
|
5
|
+
protected $sideA;
|
6
|
+
protected $sideB;
|
7
|
+
protected $sideC;
|
8
|
+
|
9
|
+
public function __construct($sideA, $sideB, $sideC)
|
10
|
+
{
|
11
|
+
$this->sideA = $sideA;
|
12
|
+
$this->sideB = $sideB;
|
13
|
+
$this->sideC = $sideC;
|
14
|
+
}
|
15
|
+
|
16
|
+
public function kind()
|
17
|
+
{
|
18
|
+
if (0 == ($this->sideA + $this->sideB + $this->sideC)) {
|
19
|
+
throw new \Exception("These sides have no values.");
|
20
|
+
}
|
21
|
+
|
22
|
+
$sides = [$this->sideA, $this->sideB, $this->sideC];
|
23
|
+
sort($sides);
|
24
|
+
if ($sides[2] >= $sides[0] + $sides[1]) {
|
25
|
+
throw new \Exception("This violates the triangle inequality");
|
26
|
+
}
|
27
|
+
|
28
|
+
if ($this->sideA == $this->sideB &&
|
29
|
+
$this->sideA == $this->sideC
|
30
|
+
) {
|
31
|
+
return 'equilateral';
|
32
|
+
}
|
33
|
+
|
34
|
+
if ($this->sideB == $this->sideC ||
|
35
|
+
$this->sideA == $this->sideC ||
|
36
|
+
$this->sideA == $this->sideB
|
37
|
+
) {
|
38
|
+
return 'isosceles';
|
39
|
+
}
|
40
|
+
|
41
|
+
return 'scalene';
|
42
|
+
}
|
43
|
+
}
|
@@ -0,0 +1,140 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
require "triangle.php";
|
4
|
+
|
5
|
+
class TriangleTest extends \PHPUnit_Framework_TestCase
|
6
|
+
{
|
7
|
+
public function testEquilateralTrianglesHaveEqualSides()
|
8
|
+
{
|
9
|
+
$this->assertEquals(
|
10
|
+
'equilateral',
|
11
|
+
(new Triangle(2, 2, 2))->kind()
|
12
|
+
);
|
13
|
+
}
|
14
|
+
|
15
|
+
public function testLargerEquilateralTrianglesHaveEqualSides()
|
16
|
+
{
|
17
|
+
$this->markTestSkipped();
|
18
|
+
$this->assertEquals(
|
19
|
+
'equilateral',
|
20
|
+
(new Triangle(10, 10, 10))->kind()
|
21
|
+
);
|
22
|
+
}
|
23
|
+
|
24
|
+
public function testIsoscelesTriangleWhenLastTwoSidesAreEqual()
|
25
|
+
{
|
26
|
+
$this->markTestSkipped();
|
27
|
+
$this->assertEquals(
|
28
|
+
'isosceles',
|
29
|
+
(new Triangle(3, 4, 4))->kind()
|
30
|
+
);
|
31
|
+
}
|
32
|
+
|
33
|
+
public function testIsoscelesTriangleWhenFirstAndLastSidesAreEqual()
|
34
|
+
{
|
35
|
+
$this->markTestSkipped();
|
36
|
+
$this->assertEquals(
|
37
|
+
'isosceles',
|
38
|
+
(new Triangle(4, 3, 4))->kind()
|
39
|
+
);
|
40
|
+
}
|
41
|
+
|
42
|
+
public function testIsoscelesTriangleWhenFirstTwoSidesAreEqual()
|
43
|
+
{
|
44
|
+
$this->markTestSkipped();
|
45
|
+
$this->assertEquals(
|
46
|
+
'isosceles',
|
47
|
+
(new Triangle(4, 4, 3))->kind()
|
48
|
+
);
|
49
|
+
}
|
50
|
+
|
51
|
+
public function testIsoscelesTrianglesWithUnequalSideLargerThanEqualSides()
|
52
|
+
{
|
53
|
+
$this->markTestSkipped();
|
54
|
+
$this->assertEquals(
|
55
|
+
'isosceles',
|
56
|
+
(new Triangle(4, 4, 7))->kind()
|
57
|
+
);
|
58
|
+
}
|
59
|
+
|
60
|
+
public function testScaleneTrianglesHaveNoEqualSides()
|
61
|
+
{
|
62
|
+
$this->markTestSkipped();
|
63
|
+
$this->assertEquals(
|
64
|
+
'scalene',
|
65
|
+
(new Triangle(3, 4, 5))->kind()
|
66
|
+
);
|
67
|
+
}
|
68
|
+
|
69
|
+
public function test2aEqualsBPlusCLooksLikeEquilateralButIsNot()
|
70
|
+
{
|
71
|
+
$this->markTestSkipped();
|
72
|
+
$this->assertEquals(
|
73
|
+
'scalene',
|
74
|
+
(new Triangle(5, 4, 6))->kind()
|
75
|
+
);
|
76
|
+
}
|
77
|
+
|
78
|
+
public function testScaleneTrianglesHaveNoEqualSidesAtLargerScale()
|
79
|
+
{
|
80
|
+
$this->markTestSkipped();
|
81
|
+
$this->assertEquals(
|
82
|
+
'scalene',
|
83
|
+
(new Triangle(10, 11, 12))->kind()
|
84
|
+
);
|
85
|
+
}
|
86
|
+
|
87
|
+
public function testScaleneTrianglesHaveNoEqualSidesInDescendingOrder()
|
88
|
+
{
|
89
|
+
$this->markTestSkipped();
|
90
|
+
$this->assertEquals(
|
91
|
+
'scalene',
|
92
|
+
(new Triangle(5, 4, 2))->kind()
|
93
|
+
);
|
94
|
+
}
|
95
|
+
|
96
|
+
public function testVerySmallTrianglesAreLegal()
|
97
|
+
{
|
98
|
+
$this->markTestSkipped();
|
99
|
+
$this->assertEquals(
|
100
|
+
'scalene',
|
101
|
+
(new Triangle(0.4, 0.6, 0.3))->kind()
|
102
|
+
);
|
103
|
+
}
|
104
|
+
|
105
|
+
/**
|
106
|
+
* @expectedException \Exception
|
107
|
+
*/
|
108
|
+
public function testTrianglesWithNoSizeAreIllegal()
|
109
|
+
{
|
110
|
+
$this->markTestSkipped();
|
111
|
+
(new Triangle(0, 0, 0))->kind();
|
112
|
+
}
|
113
|
+
|
114
|
+
/**
|
115
|
+
* @expectedException \Exception
|
116
|
+
*/
|
117
|
+
public function testTrianglesViolatingTriangleInequalityAreIllegal()
|
118
|
+
{
|
119
|
+
$this->markTestSkipped();
|
120
|
+
(new Triangle(1, 1, 3))->kind();
|
121
|
+
}
|
122
|
+
|
123
|
+
/**
|
124
|
+
* @expectedException \Exception
|
125
|
+
*/
|
126
|
+
public function testTrianglesViolatingTriangleInequalityAreIllegal2()
|
127
|
+
{
|
128
|
+
$this->markTestSkipped();
|
129
|
+
(new Triangle(7, 3, 2))->kind();
|
130
|
+
}
|
131
|
+
|
132
|
+
/**
|
133
|
+
* @expectedException \Exception
|
134
|
+
*/
|
135
|
+
public function testTrianglesViolatingTriangleInequalityAreIllegal3()
|
136
|
+
{
|
137
|
+
$this->markTestSkipped();
|
138
|
+
(new Triangle(1, 3, 1))->kind();
|
139
|
+
}
|
140
|
+
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
use "
|
1
|
+
use "ponytest"
|
2
2
|
|
3
3
|
class Anagram
|
4
4
|
|
@@ -9,7 +9,7 @@ class Anagram
|
|
9
9
|
|
10
10
|
for (index, value) in phrase.pairs() do
|
11
11
|
let value_array: Array[U8] = _to_array_and_order(value.lower())
|
12
|
-
|
12
|
+
|
13
13
|
if value.size() != word.size() then continue end
|
14
14
|
if value.lower() == word.lower() then continue end
|
15
15
|
if _check_array_eq(word_array, value_array) then
|
@@ -18,9 +18,9 @@ class Anagram
|
|
18
18
|
end
|
19
19
|
|
20
20
|
anagrams
|
21
|
-
|
21
|
+
|
22
22
|
fun _to_array_and_order(word: String): Array[U8] ? =>
|
23
|
-
// As of right now the String.split() function doesn't appear to work
|
23
|
+
// As of right now the String.split() function doesn't appear to work
|
24
24
|
// on no delimiter, i.e. "abcd".split("") to ["a", "b", "c", "d"]
|
25
25
|
// So I pull of the bytes
|
26
26
|
|
@@ -31,7 +31,7 @@ class Anagram
|
|
31
31
|
word_array.push(value)
|
32
32
|
end
|
33
33
|
|
34
|
-
|
34
|
+
|
35
35
|
for (index, value) in word_array.pairs() do
|
36
36
|
var inserted = false
|
37
37
|
if (index == 0) then sorted_array.push(value) end
|
@@ -60,7 +60,7 @@ class Anagram
|
|
60
60
|
if expect.size() != actual.size() then
|
61
61
|
ok = false
|
62
62
|
else
|
63
|
-
var i:
|
63
|
+
var i: USize = 0
|
64
64
|
while i < expect.size() do
|
65
65
|
if expect(i) != actual(i) then
|
66
66
|
ok = false
|
@@ -10,14 +10,14 @@ actor Main is TestList
|
|
10
10
|
fun tag tests(test: PonyTest) =>
|
11
11
|
test(_AnagramTest)
|
12
12
|
|
13
|
-
class _AnagramTest
|
13
|
+
class iso _AnagramTest is UnitTest
|
14
14
|
"""
|
15
|
-
Test Anagram package
|
15
|
+
Test Anagram package
|
16
16
|
"""
|
17
17
|
|
18
18
|
fun name(): String => "anagram/Anagram"
|
19
19
|
|
20
|
-
fun apply(h: TestHelper):
|
20
|
+
fun apply(h: TestHelper): None ? =>
|
21
21
|
let anagrams = ["banana", "bob", "sent", "sale", "ales"]
|
22
22
|
let emptyArray: Array[String] = Array[String]
|
23
23
|
|
@@ -33,4 +33,3 @@ class _AnagramTest iso is UnitTest
|
|
33
33
|
h.assert_array_eq[String](["sent"],Anagram("nETs", anagrams))
|
34
34
|
// Anagram should return multiple anagrams
|
35
35
|
h.assert_array_eq[String](["sale", "ales"], Anagram("seal", anagrams))
|
36
|
-
true
|
@@ -13,60 +13,60 @@ actor Main is TestList
|
|
13
13
|
test(_BobSilentTest)
|
14
14
|
test(_BobDefaultTest)
|
15
15
|
|
16
|
-
class _BobShoutTest
|
16
|
+
class iso _BobShoutTest is UnitTest
|
17
17
|
"""
|
18
18
|
Test matching when Bob is shouted at
|
19
19
|
"""
|
20
20
|
fun name(): String => "bob/Bob"
|
21
21
|
|
22
|
-
fun apply(h: TestHelper):
|
22
|
+
fun apply(h: TestHelper): None ? =>
|
23
23
|
let shout_resp: String = "Whoa, chill out!"
|
24
24
|
|
25
|
-
h.
|
26
|
-
h.
|
27
|
-
h.
|
28
|
-
h.
|
25
|
+
h.assert_eq[String](shout_resp, Bob("WATCH OUT!"))
|
26
|
+
h.assert_eq[String](shout_resp, Bob("WHAT THE HELL WERE YOU THINKING?"))
|
27
|
+
h.assert_eq[String](shout_resp, Bob("1, 2, 3 GO!"))
|
28
|
+
h.assert_eq[String](shout_resp, Bob("ZOMG THE %^*@#$(*^ ZOMBIES ARE COMING!!11!!1!"))
|
29
29
|
|
30
|
-
class _BobQuestionTest
|
30
|
+
class iso _BobQuestionTest is UnitTest
|
31
31
|
"""
|
32
32
|
Test matching when Bob is questioned
|
33
33
|
"""
|
34
34
|
|
35
35
|
fun name(): String => "bob/Bob"
|
36
36
|
|
37
|
-
fun apply(h: TestHelper):
|
37
|
+
fun apply(h: TestHelper): None ? =>
|
38
38
|
let ques_resp: String = "Sure."
|
39
39
|
|
40
|
-
h.
|
41
|
-
h.
|
42
|
-
h.
|
43
|
-
h.
|
40
|
+
h.assert_eq[String](ques_resp, Bob("Does this cryogenic chamber make me look fat?"))
|
41
|
+
h.assert_eq[String](ques_resp, Bob("You are, what, like 15?"))
|
42
|
+
h.assert_eq[String](ques_resp, Bob("4?"))
|
43
|
+
h.assert_eq[String](ques_resp, Bob("Wait! Hang on. Are you going to be OK?"))
|
44
44
|
|
45
|
-
class _BobSilentTest
|
45
|
+
class iso _BobSilentTest is UnitTest
|
46
46
|
"""
|
47
47
|
Test matching when Bob faces silence
|
48
48
|
"""
|
49
49
|
|
50
50
|
fun name(): String => "bob/Bob"
|
51
51
|
|
52
|
-
fun apply(h: TestHelper):
|
52
|
+
fun apply(h: TestHelper): None ? =>
|
53
53
|
let silent_resp: String = "Fine. Be that way!"
|
54
54
|
|
55
|
-
h.
|
56
|
-
h.
|
55
|
+
h.assert_eq[String](silent_resp, Bob(""))
|
56
|
+
h.assert_eq[String](silent_resp, Bob(" "))
|
57
57
|
|
58
|
-
class _BobDefaultTest
|
58
|
+
class iso _BobDefaultTest is UnitTest
|
59
59
|
"""
|
60
60
|
Test matching when Bob is defaulting
|
61
61
|
"""
|
62
62
|
|
63
63
|
fun name(): String => "bob/Bob"
|
64
64
|
|
65
|
-
fun apply(h: TestHelper):
|
65
|
+
fun apply(h: TestHelper): None ? =>
|
66
66
|
let default_resp: String = "Whatever."
|
67
67
|
|
68
|
-
h.
|
69
|
-
h.
|
70
|
-
h.
|
71
|
-
h.
|
72
|
-
h.
|
68
|
+
h.assert_eq[String](default_resp, Bob("Tom-ay-to, tom-aaaah-to."))
|
69
|
+
h.assert_eq[String](default_resp, Bob("Let's go make out behind the gym!"))
|
70
|
+
h.assert_eq[String](default_resp, Bob("It's OK if you don't want to go to the DMV."))
|
71
|
+
h.assert_eq[String](default_resp, Bob("1, 2, 3"))
|
72
|
+
h.assert_eq[String](default_resp, Bob("Ending with ? means a question."))
|