trackler 2.2.1.113 → 2.2.1.114
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/bash/exercises/hello-world/hello_world.sh +1 -1
- data/tracks/c/config.json +24 -0
- data/tracks/c/exercises/two-fer/README.md +12 -0
- data/tracks/c/exercises/two-fer/makefile +25 -0
- data/tracks/c/exercises/two-fer/src/example.c +11 -0
- data/tracks/c/exercises/two-fer/src/example.h +6 -0
- data/tracks/c/exercises/two-fer/test/test_two_fer.c +51 -0
- data/tracks/c/exercises/two-fer/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/two-fer/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/two-fer/test/vendor/unity_internals.h +701 -0
- data/tracks/c/exercises/wordy/README.md +51 -0
- data/tracks/c/exercises/wordy/makefile +25 -0
- data/tracks/c/exercises/wordy/src/example.c +53 -0
- data/tracks/c/exercises/wordy/src/example.h +7 -0
- data/tracks/c/exercises/wordy/test/test_wordy.c +206 -0
- data/tracks/c/exercises/wordy/test/vendor/unity.c +1300 -0
- data/tracks/c/exercises/wordy/test/vendor/unity.h +274 -0
- data/tracks/c/exercises/wordy/test/vendor/unity_internals.h +701 -0
- data/tracks/dart/.gitignore +6 -7
- data/tracks/dart/bin/create_exercise.dart +17 -17
- data/tracks/dart/exercises/anagram/lib/anagram.dart +1 -1
- data/tracks/dart/exercises/anagram/test/anagram_test.dart +27 -31
- data/tracks/dart/exercises/bob/lib/example.dart +7 -1
- data/tracks/dart/exercises/bob/test/bob_test.dart +81 -43
- data/tracks/dart/exercises/difference-of-squares/lib/example.dart +3 -3
- data/tracks/dart/exercises/difference-of-squares/test/difference_of_squares_test.dart +26 -17
- data/tracks/dart/pubspec.lock +28 -16
- data/tracks/dart/pubspec.yaml +2 -2
- data/tracks/elixir/.travis.yml +3 -3
- data/tracks/elixir/README.md +1 -1
- data/tracks/elixir/config.json +12 -0
- data/tracks/elixir/exercises/alphametics/README.md +73 -0
- data/tracks/elixir/exercises/alphametics/alphametics.exs +21 -0
- data/tracks/elixir/exercises/alphametics/alphametics_test.exs +162 -0
- data/tracks/elixir/exercises/alphametics/example.exs +70 -0
- data/tracks/elixir/mix.exs +1 -1
- data/tracks/elixir/mix.lock +0 -1
- data/tracks/elm/config.json +9 -0
- data/tracks/elm/exercises/accumulate/Accumulate.elm +6 -1
- data/tracks/elm/exercises/accumulate/Accumulate.example.elm +1 -1
- data/tracks/elm/exercises/acronym/Acronym.elm +6 -1
- data/tracks/elm/exercises/acronym/Acronym.example.elm +1 -1
- data/tracks/elm/exercises/all-your-base/AllYourBase.elm +6 -1
- data/tracks/elm/exercises/all-your-base/AllYourBase.example.elm +1 -1
- data/tracks/elm/exercises/allergies/Allergies.elm +11 -1
- data/tracks/elm/exercises/allergies/Allergies.example.elm +1 -1
- data/tracks/elm/exercises/anagram/Anagram.elm +6 -1
- data/tracks/elm/exercises/anagram/Anagram.example.elm +1 -1
- data/tracks/elm/exercises/atbash-cipher/AtbashCipher.elm +11 -1
- data/tracks/elm/exercises/atbash-cipher/AtbashCipher.example.elm +1 -1
- data/tracks/elm/exercises/binary-search/BinarySearch.elm +1 -2
- data/tracks/elm/exercises/bob/Bob.elm +6 -1
- data/tracks/elm/exercises/bob/Bob.example.elm +1 -1
- data/tracks/elm/exercises/collatz-conjecture/CollatzConjecture.elm +5 -1
- data/tracks/elm/exercises/difference-of-squares/DifferenceOfSquares.elm +16 -1
- data/tracks/elm/exercises/difference-of-squares/DifferenceOfSquares.example.elm +1 -1
- data/tracks/elm/exercises/etl/Etl.elm +5 -0
- data/tracks/elm/exercises/gigasecond/Gigasecond.elm +5 -0
- data/tracks/elm/exercises/grade-school/GradeSchool.elm +32 -1
- data/tracks/elm/exercises/grade-school/GradeSchool.example.elm +1 -1
- data/tracks/elm/exercises/grains/Grains.elm +5 -1
- data/tracks/elm/exercises/grains/Grains.example.elm +1 -1
- data/tracks/elm/exercises/hamming/Hamming.elm +6 -1
- data/tracks/elm/exercises/hello-world/HelloWorld.elm +2 -2
- data/tracks/elm/exercises/hello-world/HelloWorld.example.elm +1 -1
- data/tracks/elm/exercises/isogram/Isogram.elm +6 -1
- data/tracks/elm/exercises/largest-series-product/LargestSeriesProduct.elm +5 -0
- data/tracks/elm/exercises/leap/Leap.elm +6 -1
- data/tracks/elm/exercises/leap/Leap.example.elm +1 -1
- data/tracks/elm/exercises/list-ops/ListOps.elm +51 -1
- data/tracks/elm/exercises/list-ops/ListOps.example.elm +11 -1
- data/tracks/elm/exercises/list-ops/tests/Tests.elm +1 -1
- data/tracks/elm/exercises/luhn/Luhn.elm +6 -1
- data/tracks/elm/exercises/nucleotide-count/NucleotideCount.elm +14 -1
- data/tracks/elm/exercises/nucleotide-count/NucleotideCount.example.elm +1 -1
- data/tracks/elm/exercises/pangram/Pangram.elm +6 -1
- data/tracks/elm/exercises/pangram/Pangram.example.elm +1 -1
- data/tracks/elm/exercises/pascals-triangle/Triangle.elm +6 -1
- data/tracks/elm/exercises/phone-number/PhoneNumber.elm +11 -1
- data/tracks/elm/exercises/phone-number/PhoneNumber.example.elm +1 -1
- data/tracks/elm/exercises/raindrops/Raindrops.elm +6 -1
- data/tracks/elm/exercises/raindrops/Raindrops.example.elm +1 -1
- data/tracks/elm/exercises/rna-transcription/RNATranscription.elm +6 -1
- data/tracks/elm/exercises/robot-simulator/RobotSimulator.elm +48 -1
- data/tracks/elm/exercises/robot-simulator/RobotSimulator.example.elm +10 -1
- data/tracks/elm/exercises/roman-numerals/RomanNumerals.elm +5 -0
- data/tracks/elm/exercises/run-length-encoding/RunLengthEncoding.elm +11 -2
- data/tracks/elm/exercises/say/Say.elm +11 -1
- data/tracks/elm/exercises/scrabble-score/ScrabbleScore.elm +6 -1
- data/tracks/elm/exercises/scrabble-score/ScrabbleScore.example.elm +1 -1
- data/tracks/elm/exercises/series/Series.elm +6 -1
- data/tracks/elm/exercises/series/Series.example.elm +1 -1
- data/tracks/elm/exercises/space-age/SpaceAge.elm +6 -1
- data/tracks/elm/exercises/space-age/SpaceAge.example.elm +1 -1
- data/tracks/elm/exercises/strain/Strain.elm +11 -1
- data/tracks/elm/exercises/strain/Strain.example.elm +1 -1
- data/tracks/elm/exercises/sublist/Sublist.elm +13 -1
- data/tracks/elm/exercises/sublist/Sublist.example.elm +1 -1
- data/tracks/elm/exercises/sum-of-multiples/SumOfMultiples.elm +6 -1
- data/tracks/elm/exercises/sum-of-multiples/SumOfMultiples.example.elm +1 -1
- data/tracks/elm/exercises/transpose/README.md +95 -0
- data/tracks/elm/exercises/transpose/Transpose.elm +6 -0
- data/tracks/elm/exercises/transpose/Transpose.example.elm +47 -0
- data/tracks/elm/exercises/transpose/elm-package.json +15 -0
- data/tracks/elm/exercises/transpose/tests/Tests.elm +202 -0
- data/tracks/elm/exercises/transpose/tests/elm-package.json +16 -0
- data/tracks/elm/exercises/triangle/Triangle.elm +12 -1
- data/tracks/elm/exercises/triangle/Triangle.example.elm +1 -1
- data/tracks/elm/exercises/twelve-days/TwelveDays.elm +6 -1
- data/tracks/elm/exercises/word-count/WordCount.elm +3 -1
- data/tracks/elm/exercises/word-count/WordCount.example.elm +1 -1
- data/tracks/go/exercises/crypto-square/crypto_square_test.go +9 -9
- data/tracks/go/exercises/crypto-square/example.go +7 -0
- data/tracks/idris/docs/INSTALLATION.md +4 -4
- data/tracks/java/config.json +13 -0
- data/tracks/java/exercises/alphametics/.meta/version +1 -0
- data/tracks/java/exercises/go-counting/.meta/src/reference/java/GoCounting.java +152 -0
- data/tracks/java/exercises/go-counting/.meta/src/reference/java/Player.java +3 -0
- data/tracks/java/exercises/go-counting/.meta/version +2 -0
- data/tracks/java/exercises/go-counting/README.md +50 -0
- data/tracks/java/exercises/go-counting/build.gradle +18 -0
- data/tracks/java/exercises/go-counting/src/main/java/.keep +0 -0
- data/tracks/java/exercises/go-counting/src/main/java/Player.java +3 -0
- data/tracks/java/exercises/go-counting/src/test/java/GoCountingTest.java +178 -0
- data/tracks/java/exercises/isogram/.meta/version +1 -1
- data/tracks/java/exercises/perfect-numbers/.meta/version +1 -1
- data/tracks/java/exercises/settings.gradle +1 -0
- data/tracks/javascript/.eslintignore +0 -1
- data/tracks/javascript/exercises/minesweeper/example.js +15 -15
- data/tracks/javascript/package-lock.json +7 -14
- data/tracks/javascript/package.json +1 -1
- data/tracks/perl6/exercises/grains/.meta/exercise-data.yaml +2 -2
- data/tracks/perl6/exercises/grains/grains.t +34 -13
- data/tracks/r/config.json +13 -0
- data/tracks/r/exercises/bob/README.md +2 -0
- data/tracks/r/exercises/bob/example.R +5 -0
- data/tracks/r/exercises/bob/test_bob.R +1 -1
- data/tracks/r/exercises/crypto-square/README.md +84 -0
- data/tracks/r/exercises/crypto-square/crypto-square.R +15 -0
- data/tracks/r/exercises/crypto-square/example.R +47 -0
- data/tracks/r/exercises/crypto-square/test_crypto-square.R +65 -0
- data/tracks/rust/exercises/allergies/tests/allergies.rs +36 -36
- data/tracks/rust/exercises/book-store/Cargo-example.toml +1 -2
- data/tracks/rust/exercises/book-store/Cargo.toml +1 -1
- data/tracks/rust/exercises/book-store/example.rs +10 -14
- data/tracks/rust/exercises/book-store/src/lib.rs +1 -1
- data/tracks/rust/exercises/book-store/tests/book-store.rs +15 -15
- data/tracks/rust/exercises/dominoes/example.rs +3 -3
- data/tracks/rust/exercises/dominoes/tests/dominoes.rs +26 -26
- data/tracks/rust/exercises/grade-school/tests/grade-school.rs +5 -5
- data/tracks/rust/exercises/poker/tests/poker.rs +55 -55
- data/tracks/rust/exercises/react/tests/react.rs +28 -28
- data/tracks/rust/exercises/rectangles/example.rs +1 -1
- data/tracks/rust/exercises/rectangles/tests/rectangles.rs +26 -26
- data/tracks/rust/exercises/simple-linked-list/tests/simple-linked-list.rs +1 -1
- data/tracks/rust/exercises/sum-of-multiples/tests/sum-of-multiples.rs +12 -12
- data/tracks/rust/exercises/variable-length-quantity/example.rs +9 -3
- data/tracks/rust/exercises/variable-length-quantity/src/lib.rs +7 -1
- data/tracks/rust/exercises/variable-length-quantity/tests/variable-length-quantity.rs +3 -3
- data/tracks/rust/exercises/word-count/tests/word-count.rs +20 -20
- data/tracks/scala/exercises/secret-handshake/src/test/scala/SecretHandshakeTest.scala +2 -2
- data/tracks/scala/exercises/sieve/src/test/scala/SieveTest.scala +12 -12
- data/tracks/scala/testgen/src/main/scala/SecretHandshakeTestGenerator.scala +2 -2
- data/tracks/scala/testgen/src/main/scala/SieveTestGenerator.scala +2 -2
- data/tracks/typescript/config.json +68 -0
- data/tracks/typescript/exercises/armstrong-numbers/README.md +44 -0
- data/tracks/typescript/exercises/armstrong-numbers/armstrong-numbers.example.ts +11 -0
- data/tracks/typescript/exercises/armstrong-numbers/armstrong-numbers.test.ts +35 -0
- data/tracks/typescript/exercises/armstrong-numbers/armstrong-numbers.ts +0 -0
- data/tracks/typescript/exercises/armstrong-numbers/package.json +36 -0
- data/tracks/typescript/exercises/armstrong-numbers/tsconfig.json +22 -0
- data/tracks/typescript/exercises/armstrong-numbers/tslint.json +127 -0
- data/tracks/typescript/exercises/armstrong-numbers/yarn.lock +2624 -0
- data/tracks/typescript/exercises/perfect-numbers/README.md +50 -0
- data/tracks/typescript/exercises/perfect-numbers/package.json +36 -0
- data/tracks/typescript/exercises/perfect-numbers/perfect-numbers.example.ts +55 -0
- data/tracks/typescript/exercises/perfect-numbers/perfect-numbers.test.ts +72 -0
- data/tracks/typescript/exercises/perfect-numbers/perfect-numbers.ts +0 -0
- data/tracks/typescript/exercises/perfect-numbers/tsconfig.json +22 -0
- data/tracks/typescript/exercises/perfect-numbers/tslint.json +127 -0
- data/tracks/typescript/exercises/perfect-numbers/yarn.lock +2624 -0
- data/tracks/typescript/exercises/rational-numbers/README.md +61 -0
- data/tracks/typescript/exercises/rational-numbers/package.json +36 -0
- data/tracks/typescript/exercises/rational-numbers/rational-numbers.example.ts +76 -0
- data/tracks/typescript/exercises/rational-numbers/rational-numbers.test.ts +197 -0
- data/tracks/typescript/exercises/rational-numbers/rational-numbers.ts +0 -0
- data/tracks/typescript/exercises/rational-numbers/tsconfig.json +22 -0
- data/tracks/typescript/exercises/rational-numbers/tslint.json +127 -0
- data/tracks/typescript/exercises/rational-numbers/yarn.lock +2624 -0
- data/tracks/typescript/exercises/run-length-encoding/README.md +56 -0
- data/tracks/typescript/exercises/run-length-encoding/package.json +36 -0
- data/tracks/typescript/exercises/run-length-encoding/run-length-encoding.example.ts +15 -0
- data/tracks/typescript/exercises/run-length-encoding/run-length-encoding.test.ts +71 -0
- data/tracks/typescript/exercises/run-length-encoding/run-length-encoding.ts +0 -0
- data/tracks/typescript/exercises/run-length-encoding/tsconfig.json +22 -0
- data/tracks/typescript/exercises/run-length-encoding/tslint.json +127 -0
- data/tracks/typescript/exercises/run-length-encoding/yarn.lock +2624 -0
- data/tracks/typescript/exercises/secret-handshake/README.md +61 -0
- data/tracks/typescript/exercises/secret-handshake/package.json +36 -0
- data/tracks/typescript/exercises/secret-handshake/secret-handshake.example.ts +43 -0
- data/tracks/typescript/exercises/secret-handshake/secret-handshake.test.ts +69 -0
- data/tracks/typescript/exercises/secret-handshake/secret-handshake.ts +0 -0
- data/tracks/typescript/exercises/secret-handshake/tsconfig.json +22 -0
- data/tracks/typescript/exercises/secret-handshake/tslint.json +127 -0
- data/tracks/typescript/exercises/secret-handshake/yarn.lock +2624 -0
- metadata +81 -7
- data/tracks/dart/exercises/anagram/pubspec.lock +0 -293
- data/tracks/dart/exercises/bob/pubspec.lock +0 -293
- data/tracks/dart/exercises/difference-of-squares/pubspec.lock +0 -293
- data/tracks/java/exercises/alphametics/.meta/src/version +0 -1
- data/tracks/r/exercises/bob/.meta/description.md +0 -10
@@ -1,6 +1,6 @@
|
|
1
1
|
extern crate grade_school as school;
|
2
2
|
|
3
|
-
fn some_strings(v:
|
3
|
+
fn some_strings(v: &[&str]) -> Option<Vec<String>> {
|
4
4
|
Some(v.iter().map(|s| s.to_string()).collect())
|
5
5
|
}
|
6
6
|
|
@@ -59,7 +59,7 @@ fn test_grade_for_one_student() {
|
|
59
59
|
let mut s = school::School::new();
|
60
60
|
s.add(2, "Aimee");
|
61
61
|
assert_eq!(s.grade(2),
|
62
|
-
some_strings(
|
62
|
+
some_strings(&["Aimee"]));
|
63
63
|
}
|
64
64
|
|
65
65
|
#[test]
|
@@ -70,7 +70,7 @@ fn test_grade_returns_students_sorted_by_name() {
|
|
70
70
|
s.add(2, "Blair");
|
71
71
|
s.add(2, "Paul");
|
72
72
|
assert_eq!(s.grade(2),
|
73
|
-
some_strings(
|
73
|
+
some_strings(&["Blair", "James", "Paul"]));
|
74
74
|
}
|
75
75
|
|
76
76
|
#[test]
|
@@ -81,7 +81,7 @@ fn test_add_students_to_different_grades() {
|
|
81
81
|
s.add(7, "Logan");
|
82
82
|
assert_eq!(s.grades(), vec!(3, 7));
|
83
83
|
assert_eq!(s.grade(3),
|
84
|
-
some_strings(
|
84
|
+
some_strings(&["Chelsea"]));
|
85
85
|
assert_eq!(s.grade(7),
|
86
|
-
some_strings(
|
86
|
+
some_strings(&["Logan"]));
|
87
87
|
}
|
@@ -26,15 +26,15 @@ fn test<'a, 'b>(input: &[&'a str], expected: &[&'b str]) {
|
|
26
26
|
|
27
27
|
#[test]
|
28
28
|
fn test_single_hand_always_wins() {
|
29
|
-
test(&
|
29
|
+
test(&["4S 5S 7H 8D JC"], &["4S 5S 7H 8D JC"])
|
30
30
|
}
|
31
31
|
|
32
32
|
#[test]
|
33
33
|
#[ignore]
|
34
34
|
fn test_highest_card_of_all_hands_wins() {
|
35
35
|
test(
|
36
|
-
&
|
37
|
-
&
|
36
|
+
&["4D 5S 6S 8D 3C", "2S 4C 7S 9H 10H", "3S 4S 5D 6H JH"],
|
37
|
+
&["3S 4S 5D 6H JH"],
|
38
38
|
)
|
39
39
|
}
|
40
40
|
|
@@ -42,13 +42,13 @@ fn test_highest_card_of_all_hands_wins() {
|
|
42
42
|
#[ignore]
|
43
43
|
fn test_a_tie_has_multiple_winners() {
|
44
44
|
test(
|
45
|
-
&
|
45
|
+
&[
|
46
46
|
"4D 5S 6S 8D 3C",
|
47
47
|
"2S 4C 7S 9H 10H",
|
48
48
|
"3S 4S 5D 6H JH",
|
49
49
|
"3H 4H 5C 6C JD",
|
50
50
|
],
|
51
|
-
&
|
51
|
+
&["3S 4S 5D 6H JH", "3H 4H 5C 6C JD"],
|
52
52
|
)
|
53
53
|
}
|
54
54
|
|
@@ -58,8 +58,8 @@ fn test_high_card_can_be_low_card_in_an_otherwise_tie() {
|
|
58
58
|
// multiple hands with the same high cards, tie compares next highest ranked,
|
59
59
|
// down to last card
|
60
60
|
test(
|
61
|
-
&
|
62
|
-
&
|
61
|
+
&["3S 5H 6S 8D 7H", "2S 5D 6D 8C 7S"],
|
62
|
+
&["3S 5H 6S 8D 7H"],
|
63
63
|
)
|
64
64
|
}
|
65
65
|
|
@@ -67,8 +67,8 @@ fn test_high_card_can_be_low_card_in_an_otherwise_tie() {
|
|
67
67
|
#[ignore]
|
68
68
|
fn test_one_pair_beats_high_card() {
|
69
69
|
test(
|
70
|
-
&
|
71
|
-
&
|
70
|
+
&["4S 5H 6C 8D KH", "2S 4H 6S 4D JH"],
|
71
|
+
&["2S 4H 6S 4D JH"],
|
72
72
|
)
|
73
73
|
}
|
74
74
|
|
@@ -76,8 +76,8 @@ fn test_one_pair_beats_high_card() {
|
|
76
76
|
#[ignore]
|
77
77
|
fn test_highest_pair_wins() {
|
78
78
|
test(
|
79
|
-
&
|
80
|
-
&
|
79
|
+
&["4S 2H 6S 2D JH", "2S 4H 6C 4D JD"],
|
80
|
+
&["2S 4H 6C 4D JD"],
|
81
81
|
)
|
82
82
|
}
|
83
83
|
|
@@ -85,8 +85,8 @@ fn test_highest_pair_wins() {
|
|
85
85
|
#[ignore]
|
86
86
|
fn test_two_pairs_beats_one_pair() {
|
87
87
|
test(
|
88
|
-
&
|
89
|
-
&
|
88
|
+
&["2S 8H 6S 8D JH", "4S 5H 4C 8C 5C"],
|
89
|
+
&["4S 5H 4C 8C 5C"],
|
90
90
|
)
|
91
91
|
}
|
92
92
|
|
@@ -95,8 +95,8 @@ fn test_two_pairs_beats_one_pair() {
|
|
95
95
|
fn test_two_pair_ranks() {
|
96
96
|
// both hands have two pairs, highest ranked pair wins
|
97
97
|
test(
|
98
|
-
&
|
99
|
-
&
|
98
|
+
&["2S 8H 2D 8D 3H", "4S 5H 4C 8S 5D"],
|
99
|
+
&["2S 8H 2D 8D 3H"],
|
100
100
|
)
|
101
101
|
}
|
102
102
|
|
@@ -106,8 +106,8 @@ fn test_two_pairs_second_pair_cascade() {
|
|
106
106
|
// both hands have two pairs, with the same highest ranked pair,
|
107
107
|
// tie goes to low pair
|
108
108
|
test(
|
109
|
-
&
|
110
|
-
&
|
109
|
+
&["2S QS 2C QD JH", "JD QH JS 8D QC"],
|
110
|
+
&["JD QH JS 8D QC"],
|
111
111
|
)
|
112
112
|
}
|
113
113
|
|
@@ -117,8 +117,8 @@ fn test_two_pairs_last_card_cascade() {
|
|
117
117
|
// both hands have two identically ranked pairs,
|
118
118
|
// tie goes to remaining card (kicker)
|
119
119
|
test(
|
120
|
-
&
|
121
|
-
&
|
120
|
+
&["JD QH JS 8D QC", "JS QS JC 2D QD"],
|
121
|
+
&["JD QH JS 8D QC"],
|
122
122
|
)
|
123
123
|
}
|
124
124
|
|
@@ -126,8 +126,8 @@ fn test_two_pairs_last_card_cascade() {
|
|
126
126
|
#[ignore]
|
127
127
|
fn test_three_of_a_kind_beats_two_pair() {
|
128
128
|
test(
|
129
|
-
&
|
130
|
-
&
|
129
|
+
&["2S 8H 2H 8D JH", "4S 5H 4C 8S 4H"],
|
130
|
+
&["4S 5H 4C 8S 4H"],
|
131
131
|
)
|
132
132
|
}
|
133
133
|
|
@@ -136,8 +136,8 @@ fn test_three_of_a_kind_beats_two_pair() {
|
|
136
136
|
fn test_three_of_a_kind_ranks() {
|
137
137
|
//both hands have three of a kind, tie goes to highest ranked triplet
|
138
138
|
test(
|
139
|
-
&
|
140
|
-
&
|
139
|
+
&["2S 2H 2C 8D JH", "4S AH AS 8C AD"],
|
140
|
+
&["4S AH AS 8C AD"],
|
141
141
|
)
|
142
142
|
}
|
143
143
|
|
@@ -147,8 +147,8 @@ fn test_three_of_a_kind_cascade_ranks() {
|
|
147
147
|
// with multiple decks, two players can have same three of a kind,
|
148
148
|
// ties go to highest remaining cards
|
149
149
|
test(
|
150
|
-
&
|
151
|
-
&
|
150
|
+
&["4S AH AS 7C AD", "4S AH AS 8C AD"],
|
151
|
+
&["4S AH AS 8C AD"],
|
152
152
|
)
|
153
153
|
}
|
154
154
|
|
@@ -156,8 +156,8 @@ fn test_three_of_a_kind_cascade_ranks() {
|
|
156
156
|
#[ignore]
|
157
157
|
fn test_straight_beats_three_of_a_kind() {
|
158
158
|
test(
|
159
|
-
&
|
160
|
-
&
|
159
|
+
&["4S 5H 4C 8D 4H", "3S 4D 2S 6D 5C"],
|
160
|
+
&["3S 4D 2S 6D 5C"],
|
161
161
|
)
|
162
162
|
}
|
163
163
|
|
@@ -166,8 +166,8 @@ fn test_straight_beats_three_of_a_kind() {
|
|
166
166
|
fn test_aces_can_end_a_straight_high() {
|
167
167
|
// aces can end a straight (10 J Q K A)
|
168
168
|
test(
|
169
|
-
&
|
170
|
-
&
|
169
|
+
&["4S 5H 4C 8D 4H", "10D JH QS KD AC"],
|
170
|
+
&["10D JH QS KD AC"],
|
171
171
|
)
|
172
172
|
}
|
173
173
|
|
@@ -176,8 +176,8 @@ fn test_aces_can_end_a_straight_high() {
|
|
176
176
|
fn test_aces_can_end_a_straight_low() {
|
177
177
|
// aces can start a straight (A 2 3 4 5)
|
178
178
|
test(
|
179
|
-
&
|
180
|
-
&
|
179
|
+
&["4S 5H 4C 8D 4H", "4D AH 3S 2D 5C"],
|
180
|
+
&["4D AH 3S 2D 5C"],
|
181
181
|
)
|
182
182
|
}
|
183
183
|
|
@@ -186,8 +186,8 @@ fn test_aces_can_end_a_straight_low() {
|
|
186
186
|
fn test_straight_cascade() {
|
187
187
|
// both hands with a straight, tie goes to highest ranked card
|
188
188
|
test(
|
189
|
-
&
|
190
|
-
&
|
189
|
+
&["4S 6C 7S 8D 5H", "5S 7H 8S 9D 6H"],
|
190
|
+
&["5S 7H 8S 9D 6H"],
|
191
191
|
)
|
192
192
|
}
|
193
193
|
|
@@ -196,8 +196,8 @@ fn test_straight_cascade() {
|
|
196
196
|
fn test_straight_scoring() {
|
197
197
|
// even though an ace is usually high, a 5-high straight is the lowest-scoring straight
|
198
198
|
test(
|
199
|
-
&
|
200
|
-
&
|
199
|
+
&["2H 3C 4D 5D 6H", "4S AH 3S 2D 5H"],
|
200
|
+
&["2H 3C 4D 5D 6H"],
|
201
201
|
)
|
202
202
|
}
|
203
203
|
|
@@ -205,8 +205,8 @@ fn test_straight_scoring() {
|
|
205
205
|
#[ignore]
|
206
206
|
fn test_flush_beats_a_straight() {
|
207
207
|
test(
|
208
|
-
&
|
209
|
-
&
|
208
|
+
&["4C 6H 7D 8D 5H", "2S 4S 5S 6S 7S"],
|
209
|
+
&["2S 4S 5S 6S 7S"],
|
210
210
|
)
|
211
211
|
}
|
212
212
|
|
@@ -215,8 +215,8 @@ fn test_flush_beats_a_straight() {
|
|
215
215
|
fn test_flush_cascade() {
|
216
216
|
// both hands have a flush, tie goes to high card, down to the last one if necessary
|
217
217
|
test(
|
218
|
-
&
|
219
|
-
&
|
218
|
+
&["4H 7H 8H 9H 6H", "2S 4S 5S 6S 7S"],
|
219
|
+
&["4H 7H 8H 9H 6H"],
|
220
220
|
)
|
221
221
|
}
|
222
222
|
|
@@ -224,8 +224,8 @@ fn test_flush_cascade() {
|
|
224
224
|
#[ignore]
|
225
225
|
fn test_full_house_beats_a_flush() {
|
226
226
|
test(
|
227
|
-
&
|
228
|
-
&
|
227
|
+
&["3H 6H 7H 8H 5H", "4S 5C 4C 5D 4H"],
|
228
|
+
&["4S 5C 4C 5D 4H"],
|
229
229
|
)
|
230
230
|
}
|
231
231
|
|
@@ -234,8 +234,8 @@ fn test_full_house_beats_a_flush() {
|
|
234
234
|
fn test_full_house_ranks() {
|
235
235
|
// both hands have a full house, tie goes to highest-ranked triplet
|
236
236
|
test(
|
237
|
-
&
|
238
|
-
&
|
237
|
+
&["4H 4S 4D 9S 9D", "5H 5S 5D 8S 8D"],
|
238
|
+
&["5H 5S 5D 8S 8D"],
|
239
239
|
)
|
240
240
|
}
|
241
241
|
|
@@ -244,8 +244,8 @@ fn test_full_house_ranks() {
|
|
244
244
|
fn test_full_house_cascade() {
|
245
245
|
// with multiple decks, both hands have a full house with the same triplet, tie goes to the pair
|
246
246
|
test(
|
247
|
-
&
|
248
|
-
&
|
247
|
+
&["5H 5S 5D 9S 9D", "5H 5S 5D 8S 8D"],
|
248
|
+
&["5H 5S 5D 9S 9D"],
|
249
249
|
)
|
250
250
|
}
|
251
251
|
|
@@ -253,8 +253,8 @@ fn test_full_house_cascade() {
|
|
253
253
|
#[ignore]
|
254
254
|
fn test_four_of_a_kind_beats_full_house() {
|
255
255
|
test(
|
256
|
-
&
|
257
|
-
&
|
256
|
+
&["4S 5H 4D 5D 4H", "3S 3H 2S 3D 3C"],
|
257
|
+
&["3S 3H 2S 3D 3C"],
|
258
258
|
)
|
259
259
|
}
|
260
260
|
|
@@ -263,8 +263,8 @@ fn test_four_of_a_kind_beats_full_house() {
|
|
263
263
|
fn test_four_of_a_kind_ranks() {
|
264
264
|
// both hands have four of a kind, tie goes to high quad
|
265
265
|
test(
|
266
|
-
&
|
267
|
-
&
|
266
|
+
&["2S 2H 2C 8D 2D", "4S 5H 5S 5D 5C"],
|
267
|
+
&["4S 5H 5S 5D 5C"],
|
268
268
|
)
|
269
269
|
}
|
270
270
|
|
@@ -273,8 +273,8 @@ fn test_four_of_a_kind_ranks() {
|
|
273
273
|
fn test_four_of_a_kind_cascade() {
|
274
274
|
// with multiple decks, both hands with identical four of a kind, tie determined by kicker
|
275
275
|
test(
|
276
|
-
&
|
277
|
-
&
|
276
|
+
&["3S 3H 2S 3D 3C", "3S 3H 4S 3D 3C"],
|
277
|
+
&["3S 3H 4S 3D 3C"],
|
278
278
|
)
|
279
279
|
}
|
280
280
|
|
@@ -282,8 +282,8 @@ fn test_four_of_a_kind_cascade() {
|
|
282
282
|
#[ignore]
|
283
283
|
fn test_straight_flush_beats_four_of_a_kind() {
|
284
284
|
test(
|
285
|
-
&
|
286
|
-
&
|
285
|
+
&["4S 5H 5S 5D 5C", "7S 8S 9S 6S 10S"],
|
286
|
+
&["7S 8S 9S 6S 10S"],
|
287
287
|
)
|
288
288
|
}
|
289
289
|
|
@@ -292,7 +292,7 @@ fn test_straight_flush_beats_four_of_a_kind() {
|
|
292
292
|
fn test_straight_flush_ranks() {
|
293
293
|
// both hands have straight flush, tie goes to highest-ranked card
|
294
294
|
test(
|
295
|
-
&
|
296
|
-
&
|
295
|
+
&["4H 6H 7H 8H 5H", "5S 7S 8S 9S 6S"],
|
296
|
+
&["5S 7S 8S 9S 6S"],
|
297
297
|
)
|
298
298
|
}
|
@@ -31,7 +31,7 @@ fn error_setting_a_nonexistent_input_cell() {
|
|
31
31
|
fn compute_cells_calculate_initial_value() {
|
32
32
|
let mut reactor = Reactor::new();
|
33
33
|
let input = reactor.create_input(1);
|
34
|
-
let output = reactor.create_compute(&
|
34
|
+
let output = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
|
35
35
|
assert_eq!(reactor.value(output), Some(2));
|
36
36
|
}
|
37
37
|
|
@@ -41,7 +41,7 @@ fn compute_cells_take_inputs_in_the_right_order() {
|
|
41
41
|
let mut reactor = Reactor::new();
|
42
42
|
let one = reactor.create_input(1);
|
43
43
|
let two = reactor.create_input(2);
|
44
|
-
let output = reactor.create_compute(&
|
44
|
+
let output = reactor.create_compute(&[one, two], |v| v[0] + v[1] * 10).unwrap();
|
45
45
|
assert_eq!(reactor.value(output), Some(21));
|
46
46
|
}
|
47
47
|
|
@@ -50,7 +50,7 @@ fn compute_cells_take_inputs_in_the_right_order() {
|
|
50
50
|
fn error_creating_compute_cell_if_input_doesnt_exist() {
|
51
51
|
let mut dummy_reactor = Reactor::new();
|
52
52
|
let input = dummy_reactor.create_input(1);
|
53
|
-
assert!(Reactor::new().create_compute(&
|
53
|
+
assert!(Reactor::new().create_compute(&[input], |_| 0).is_err());
|
54
54
|
}
|
55
55
|
|
56
56
|
#[test]
|
@@ -61,7 +61,7 @@ fn do_not_break_cell_if_creating_compute_cell_with_valid_and_invalid_input() {
|
|
61
61
|
let dummy_cell = dummy_reactor.create_input(2);
|
62
62
|
let mut reactor = Reactor::new();
|
63
63
|
let input = reactor.create_input(1);
|
64
|
-
assert!(reactor.create_compute(&
|
64
|
+
assert!(reactor.create_compute(&[input, dummy_cell], |_| 0).is_err());
|
65
65
|
assert!(reactor.set_value(input, 5).is_ok());
|
66
66
|
assert_eq!(reactor.value(input), Some(5));
|
67
67
|
}
|
@@ -71,7 +71,7 @@ fn do_not_break_cell_if_creating_compute_cell_with_valid_and_invalid_input() {
|
|
71
71
|
fn compute_cells_update_value_when_dependencies_are_changed() {
|
72
72
|
let mut reactor = Reactor::new();
|
73
73
|
let input = reactor.create_input(1);
|
74
|
-
let output = reactor.create_compute(&
|
74
|
+
let output = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
|
75
75
|
assert_eq!(reactor.value(output), Some(2));
|
76
76
|
assert!(reactor.set_value(input, 3).is_ok());
|
77
77
|
assert_eq!(reactor.value(output), Some(4));
|
@@ -82,9 +82,9 @@ fn compute_cells_update_value_when_dependencies_are_changed() {
|
|
82
82
|
fn compute_cells_can_depend_on_other_compute_cells() {
|
83
83
|
let mut reactor = Reactor::new();
|
84
84
|
let input = reactor.create_input(1);
|
85
|
-
let times_two = reactor.create_compute(&
|
86
|
-
let times_thirty = reactor.create_compute(&
|
87
|
-
let output = reactor.create_compute(&
|
85
|
+
let times_two = reactor.create_compute(&[input], |v| v[0] * 2).unwrap();
|
86
|
+
let times_thirty = reactor.create_compute(&[input], |v| v[0] * 30).unwrap();
|
87
|
+
let output = reactor.create_compute(&[times_two, times_thirty], |v| v[0] + v[1]).unwrap();
|
88
88
|
assert_eq!(reactor.value(output), Some(32));
|
89
89
|
assert!(reactor.set_value(input, 3).is_ok());
|
90
90
|
assert_eq!(reactor.value(output), Some(96));
|
@@ -95,7 +95,7 @@ fn compute_cells_can_depend_on_other_compute_cells() {
|
|
95
95
|
fn error_setting_a_compute_cell() {
|
96
96
|
let mut reactor = Reactor::new();
|
97
97
|
let input = reactor.create_input(1);
|
98
|
-
let output = reactor.create_compute(&
|
98
|
+
let output = reactor.create_compute(&[input], |_| 0).unwrap();
|
99
99
|
assert!(reactor.set_value(output, 3).is_err());
|
100
100
|
}
|
101
101
|
|
@@ -108,7 +108,7 @@ fn compute_cells_fire_callbacks() {
|
|
108
108
|
{
|
109
109
|
let mut reactor = Reactor::new();
|
110
110
|
let input = reactor.create_input(1);
|
111
|
-
let output = reactor.create_compute(&
|
111
|
+
let output = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
|
112
112
|
assert!(reactor.add_callback(output, |v| values.push(v)).is_ok());
|
113
113
|
assert!(reactor.set_value(input, 3).is_ok());
|
114
114
|
}
|
@@ -120,7 +120,7 @@ fn compute_cells_fire_callbacks() {
|
|
120
120
|
fn error_adding_callback_to_nonexistent_cell() {
|
121
121
|
let mut dummy_reactor = Reactor::new();
|
122
122
|
let input = dummy_reactor.create_input(1);
|
123
|
-
let output = dummy_reactor.create_compute(&
|
123
|
+
let output = dummy_reactor.create_compute(&[input], |_| 0).unwrap();
|
124
124
|
assert!(Reactor::new().add_callback(output, |_: usize| println!("hi")).is_err());
|
125
125
|
}
|
126
126
|
|
@@ -131,7 +131,7 @@ fn callbacks_only_fire_on_change() {
|
|
131
131
|
{
|
132
132
|
let mut reactor = Reactor::new();
|
133
133
|
let input = reactor.create_input(1);
|
134
|
-
let output = reactor.create_compute(&
|
134
|
+
let output = reactor.create_compute(&[input], |v| if v[0] < 3 { 111 } else { 222 }).unwrap();
|
135
135
|
assert!(reactor.add_callback(output, |v| values.push(v)).is_ok());
|
136
136
|
assert!(reactor.set_value(input, 2).is_ok());
|
137
137
|
assert!(reactor.set_value(input, 4).is_ok());
|
@@ -148,7 +148,7 @@ fn callbacks_can_be_added_and_removed() {
|
|
148
148
|
{
|
149
149
|
let mut reactor = Reactor::new();
|
150
150
|
let input = reactor.create_input(11);
|
151
|
-
let output = reactor.create_compute(&
|
151
|
+
let output = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
|
152
152
|
let callback = reactor.add_callback(output, |v| values1.push(v)).unwrap();
|
153
153
|
assert!(reactor.add_callback(output, |v| values2.push(v)).is_ok());
|
154
154
|
assert!(reactor.set_value(input, 31).is_ok());
|
@@ -169,7 +169,7 @@ fn removing_a_callback_multiple_times_doesnt_interfere_with_other_callbacks() {
|
|
169
169
|
{
|
170
170
|
let mut reactor = Reactor::new();
|
171
171
|
let input = reactor.create_input(1);
|
172
|
-
let output = reactor.create_compute(&
|
172
|
+
let output = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
|
173
173
|
let callback = reactor.add_callback(output, |v| values1.push(v)).unwrap();
|
174
174
|
assert!(reactor.add_callback(output, |v| values2.push(v)).is_ok());
|
175
175
|
// We want the first remove to be Ok, but we don't care about the others.
|
@@ -190,10 +190,10 @@ fn callbacks_should_only_be_called_once_even_if_multiple_dependencies_change() {
|
|
190
190
|
{
|
191
191
|
let mut reactor = Reactor::new();
|
192
192
|
let input = reactor.create_input(1);
|
193
|
-
let plus_one = reactor.create_compute(&
|
194
|
-
let minus_one1 = reactor.create_compute(&
|
195
|
-
let minus_one2 = reactor.create_compute(&
|
196
|
-
let output = reactor.create_compute(&
|
193
|
+
let plus_one = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
|
194
|
+
let minus_one1 = reactor.create_compute(&[input], |v| v[0] - 1).unwrap();
|
195
|
+
let minus_one2 = reactor.create_compute(&[minus_one1], |v| v[0] - 1).unwrap();
|
196
|
+
let output = reactor.create_compute(&[plus_one, minus_one2], |v| v[0] * v[1]).unwrap();
|
197
197
|
assert!(reactor.add_callback(output, |v| values.push(v)).is_ok());
|
198
198
|
assert!(reactor.set_value(input, 4).is_ok());
|
199
199
|
}
|
@@ -207,9 +207,9 @@ fn callbacks_should_not_be_called_if_dependencies_change_but_output_value_doesnt
|
|
207
207
|
{
|
208
208
|
let mut reactor = Reactor::new();
|
209
209
|
let input = reactor.create_input(1);
|
210
|
-
let plus_one = reactor.create_compute(&
|
211
|
-
let minus_one = reactor.create_compute(&
|
212
|
-
let always_two = reactor.create_compute(&
|
210
|
+
let plus_one = reactor.create_compute(&[input], |v| v[0] + 1).unwrap();
|
211
|
+
let minus_one = reactor.create_compute(&[input], |v| v[0] - 1).unwrap();
|
212
|
+
let always_two = reactor.create_compute(&[plus_one, minus_one], |v| v[0] - v[1]).unwrap();
|
213
213
|
assert!(reactor.add_callback(always_two, |v| values.push(v)).is_ok());
|
214
214
|
for i in 2..5 {
|
215
215
|
assert!(reactor.set_value(input, i).is_ok());
|
@@ -228,14 +228,14 @@ fn test_adder_with_boolean_values() {
|
|
228
228
|
let b = reactor.create_input(false);
|
229
229
|
let carry_in = reactor.create_input(false);
|
230
230
|
|
231
|
-
let a_xor_b = reactor.create_compute(&
|
232
|
-
let sum = reactor.create_compute(&
|
231
|
+
let a_xor_b = reactor.create_compute(&[a, b], |v| v[0] ^ v[1]).unwrap();
|
232
|
+
let sum = reactor.create_compute(&[a_xor_b, carry_in], |v| v[0] ^ v[1]).unwrap();
|
233
233
|
|
234
|
-
let a_xor_b_and_cin = reactor.create_compute(&
|
235
|
-
let a_and_b = reactor.create_compute(&
|
236
|
-
let carry_out = reactor.create_compute(&
|
234
|
+
let a_xor_b_and_cin = reactor.create_compute(&[a_xor_b, carry_in], |v| v[0] && v[1]).unwrap();
|
235
|
+
let a_and_b = reactor.create_compute(&[a, b], |v| v[0] && v[1]).unwrap();
|
236
|
+
let carry_out = reactor.create_compute(&[a_xor_b_and_cin, a_and_b], |v| v[0] || v[1]).unwrap();
|
237
237
|
|
238
|
-
let tests =
|
238
|
+
let tests = &[
|
239
239
|
(false, false, false, false, false),
|
240
240
|
(false, false, true, false, true),
|
241
241
|
(false, true, false, false, true),
|
@@ -246,7 +246,7 @@ fn test_adder_with_boolean_values() {
|
|
246
246
|
(true, true, true, true, true),
|
247
247
|
];
|
248
248
|
|
249
|
-
for (aval, bval, cinval, expected_cout, expected_sum) in tests {
|
249
|
+
for &(aval, bval, cinval, expected_cout, expected_sum) in tests {
|
250
250
|
assert!(reactor.set_value(a, aval).is_ok());
|
251
251
|
assert!(reactor.set_value(b, bval).is_ok());
|
252
252
|
assert!(reactor.set_value(carry_in, cinval).is_ok());
|