Skip to content

Commit 6fc655a

Browse files
committed
Add templates for bottlesong, bowling,clock and collatz conjecture
1 parent 75e1e23 commit 6fc655a

6 files changed

Lines changed: 132 additions & 46 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
require 'minitest/autorun'
2+
require_relative 'bottle_song'
3+
4+
class BottleSongTest < Minitest::Test
5+
<% json["cases"].each do |cases| %>
6+
<% cases["cases"].each do |sub_case| %>
7+
<% sub_case["cases"].each do |sub_sub_case| %>
8+
def test_<%= underscore(sub_sub_case["description"]) %>
9+
<%= skip? %>
10+
expected = <<~TEXT
11+
<%= sub_sub_case["expected"].join("\n") %>
12+
TEXT
13+
assert_equal expected, BottleSong.recite(<%= sub_sub_case["input"]["startBottles"] %>, <%= sub_sub_case["input"]["takeDown"] %>)
14+
end
15+
<% end %>
16+
<% end %>
17+
<% end %>
18+
end

exercises/practice/bottle-song/bottle_song_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
require_relative 'bottle_song'
33

44
class BottleSongTest < Minitest::Test
5-
def test_single_verse
5+
def test_first_generic_verse
66
# skip
77
expected = <<~TEXT
88
Ten green bottles hanging on the wall,
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
require 'minitest/autorun'
2+
require_relative 'bowling'
3+
4+
class BowlingTest < Minitest::Test
5+
<% json["cases"].each do |cases| %>
6+
def test_<%= underscore(cases["description"]) %>
7+
<%= skip? %>
8+
game = Game.new
9+
rolls = <%= cases["input"]["previousRolls"] %>
10+
rolls.each { |pins| game.roll(pins) }
11+
<%- if cases["property"] == "score" -%>
12+
<%- if cases["expected"].is_a?(Hash) && cases["expected"].key?("error") -%>
13+
assert_raises Game::BowlingError do
14+
game.score
15+
end
16+
<%- else -%>
17+
assert_equal <%= cases["expected"] %>, game.score
18+
<%- end -%>
19+
<%- elsif cases["property"] == "roll" -%>
20+
assert_raises Game::BowlingError do
21+
game.roll(<%= cases["input"]["roll"] %>)
22+
end
23+
<%- end -%>
24+
end
25+
<% end %>
26+
end
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
require 'minitest/autorun'
2+
require_relative 'clock'
3+
4+
class ClockTest < Minitest::Test
5+
<% json["cases"].each do |cases| %>
6+
<% cases["cases"].each do |sub_case| %>
7+
def test_<%= underscore(sub_case["description"]) %>
8+
<%= skip? %>
9+
<%- if sub_case["property"] == "create" -%>
10+
assert_equal '<%= sub_case["expected"] %>', Clock.new(<%= sub_case["input"]["hour"] != 0 ? "hour: #{sub_case["input"]["hour"]}" : "" %><%= sub_case["input"]["minute"] != 0 && sub_case["input"]["hour"] != 0 ? ", " : "" %><%= sub_case["input"]["minute"] != 0 ? "minute: #{sub_case["input"]["minute"]}" : "" %>).to_s
11+
<%- elsif sub_case["property"] == "add" -%>
12+
clock = Clock.new(<%= sub_case["input"]["hour"] != 0 ? "hour: #{sub_case["input"]["hour"]}" : "" %><%= sub_case["input"]["minute"] != 0 && sub_case["input"]["hour"] != 0 ? ", " : "" %><%= sub_case["input"]["minute"] != 0 ? "minute: #{sub_case["input"]["minute"]}" : "" %>)
13+
assert_equal '<%= sub_case["expected"] %>', (clock + Clock.new(minute: <%= sub_case["input"]["value"]%>)).to_s
14+
<%- elsif sub_case["property"] == "subtract" -%>
15+
clock = Clock.new(<%= sub_case["input"]["hour"] != 0 ? "hour: #{sub_case["input"]["hour"]}" : "" %><%= sub_case["input"]["minute"] != 0 && sub_case["input"]["hour"] != 0 ? ", " : "" %><%= sub_case["input"]["minute"] != 0 ? "minute: #{sub_case["input"]["minute"]}" : "" %>)
16+
assert_equal '<%= sub_case["expected"] %>', (clock - Clock.new(minute: <%= sub_case["input"]["value"]%>)).to_s
17+
<%- elsif sub_case["property"] == "equal" -%>
18+
clock1 = Clock.new(hour: <%= sub_case["input"]["clock1"]["hour"] %>, minute: <%= sub_case["input"]["clock1"]["minute"] %>)
19+
clock2 = Clock.new(hour: <%= sub_case["input"]["clock2"]["hour"] %>, minute: <%= sub_case["input"]["clock2"]["minute"] %>)
20+
<%= sub_case["expected"] ? "assert_equal" : "refute_equal"%> clock1, clock2
21+
<%- end -%>
22+
end
23+
<% end %>
24+
<% end %>
25+
end

exercises/practice/clock/clock_test.rb

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -4,198 +4,198 @@
44
class ClockTest < Minitest::Test
55
def test_on_the_hour
66
# skip
7-
assert_equal "08:00", Clock.new(hour: 8).to_s
7+
assert_equal '08:00', Clock.new(hour: 8).to_s
88
end
99

1010
def test_past_the_hour
1111
skip
12-
assert_equal "11:09", Clock.new(hour: 11, minute: 9).to_s
12+
assert_equal '11:09', Clock.new(hour: 11, minute: 9).to_s
1313
end
1414

1515
def test_midnight_is_zero_hours
1616
skip
17-
assert_equal "00:00", Clock.new(hour: 24).to_s
17+
assert_equal '00:00', Clock.new(hour: 24).to_s
1818
end
1919

2020
def test_hour_rolls_over
2121
skip
22-
assert_equal "01:00", Clock.new(hour: 25).to_s
22+
assert_equal '01:00', Clock.new(hour: 25).to_s
2323
end
2424

2525
def test_hour_rolls_over_continuously
2626
skip
27-
assert_equal "04:00", Clock.new(hour: 100).to_s
27+
assert_equal '04:00', Clock.new(hour: 100).to_s
2828
end
2929

3030
def test_sixty_minutes_is_next_hour
3131
skip
32-
assert_equal "02:00", Clock.new(hour: 1, minute: 60).to_s
32+
assert_equal '02:00', Clock.new(hour: 1, minute: 60).to_s
3333
end
3434

3535
def test_minutes_roll_over
3636
skip
37-
assert_equal "02:40", Clock.new(minute: 160).to_s
37+
assert_equal '02:40', Clock.new(minute: 160).to_s
3838
end
3939

4040
def test_minutes_roll_over_continuously
4141
skip
42-
assert_equal "04:43", Clock.new(minute: 1723).to_s
42+
assert_equal '04:43', Clock.new(minute: 1723).to_s
4343
end
4444

4545
def test_hour_and_minutes_roll_over
4646
skip
47-
assert_equal "03:40", Clock.new(hour: 25, minute: 160).to_s
47+
assert_equal '03:40', Clock.new(hour: 25, minute: 160).to_s
4848
end
4949

5050
def test_hour_and_minutes_roll_over_continuously
5151
skip
52-
assert_equal "11:01", Clock.new(hour: 201, minute: 3001).to_s
52+
assert_equal '11:01', Clock.new(hour: 201, minute: 3001).to_s
5353
end
5454

5555
def test_hour_and_minutes_roll_over_to_exactly_midnight
5656
skip
57-
assert_equal "00:00", Clock.new(hour: 72, minute: 8640).to_s
57+
assert_equal '00:00', Clock.new(hour: 72, minute: 8640).to_s
5858
end
5959

6060
def test_negative_hour
6161
skip
62-
assert_equal "23:15", Clock.new(hour: -1, minute: 15).to_s
62+
assert_equal '23:15', Clock.new(hour: -1, minute: 15).to_s
6363
end
6464

6565
def test_negative_hour_rolls_over
6666
skip
67-
assert_equal "23:00", Clock.new(hour: -25).to_s
67+
assert_equal '23:00', Clock.new(hour: -25).to_s
6868
end
6969

7070
def test_negative_hour_rolls_over_continuously
7171
skip
72-
assert_equal "05:00", Clock.new(hour: -91).to_s
72+
assert_equal '05:00', Clock.new(hour: -91).to_s
7373
end
7474

7575
def test_negative_minutes
7676
skip
77-
assert_equal "00:20", Clock.new(hour: 1, minute: -40).to_s
77+
assert_equal '00:20', Clock.new(hour: 1, minute: -40).to_s
7878
end
7979

8080
def test_negative_minutes_roll_over
8181
skip
82-
assert_equal "22:20", Clock.new(hour: 1, minute: -160).to_s
82+
assert_equal '22:20', Clock.new(hour: 1, minute: -160).to_s
8383
end
8484

8585
def test_negative_minutes_roll_over_continuously
8686
skip
87-
assert_equal "16:40", Clock.new(hour: 1, minute: -4820).to_s
87+
assert_equal '16:40', Clock.new(hour: 1, minute: -4820).to_s
8888
end
8989

9090
def test_negative_sixty_minutes_is_previous_hour
9191
skip
92-
assert_equal "01:00", Clock.new(hour: 2, minute: -60).to_s
92+
assert_equal '01:00', Clock.new(hour: 2, minute: -60).to_s
9393
end
9494

9595
def test_negative_hour_and_minutes_both_roll_over
9696
skip
97-
assert_equal "20:20", Clock.new(hour: -25, minute: -160).to_s
97+
assert_equal '20:20', Clock.new(hour: -25, minute: -160).to_s
9898
end
9999

100100
def test_negative_hour_and_minutes_both_roll_over_continuously
101101
skip
102-
assert_equal "22:10", Clock.new(hour: -121, minute: -5810).to_s
102+
assert_equal '22:10', Clock.new(hour: -121, minute: -5810).to_s
103103
end
104104

105105
def test_add_minutes
106106
skip
107-
clock = Clock.new(hour: 10, minute: 0)
108-
assert_equal "10:03", (clock + Clock.new(minute: 3)).to_s
107+
clock = Clock.new(hour: 10)
108+
assert_equal '10:03', (clock + Clock.new(minute: 3)).to_s
109109
end
110110

111111
def test_add_no_minutes
112112
skip
113113
clock = Clock.new(hour: 6, minute: 41)
114-
assert_equal "06:41", (clock + Clock.new(minute: 0)).to_s
114+
assert_equal '06:41', (clock + Clock.new(minute: 0)).to_s
115115
end
116116

117117
def test_add_to_next_hour
118118
skip
119-
clock = Clock.new(hour: 0, minute: 45)
120-
assert_equal "01:25", (clock + Clock.new(minute: 40)).to_s
119+
clock = Clock.new(minute: 45)
120+
assert_equal '01:25', (clock + Clock.new(minute: 40)).to_s
121121
end
122122

123123
def test_add_more_than_one_hour
124124
skip
125-
clock = Clock.new(hour: 10, minute: 0)
126-
assert_equal "11:01", (clock + Clock.new(minute: 61)).to_s
125+
clock = Clock.new(hour: 10)
126+
assert_equal '11:01', (clock + Clock.new(minute: 61)).to_s
127127
end
128128

129129
def test_add_more_than_two_hours_with_carry
130130
skip
131-
clock = Clock.new(hour: 0, minute: 45)
132-
assert_equal "03:25", (clock + Clock.new(minute: 160)).to_s
131+
clock = Clock.new(minute: 45)
132+
assert_equal '03:25', (clock + Clock.new(minute: 160)).to_s
133133
end
134134

135135
def test_add_across_midnight
136136
skip
137137
clock = Clock.new(hour: 23, minute: 59)
138-
assert_equal "00:01", (clock + Clock.new(minute: 2)).to_s
138+
assert_equal '00:01', (clock + Clock.new(minute: 2)).to_s
139139
end
140140

141-
def test_add_more_than_one_day
141+
def test_add_more_than_one_day_1500_min__25_hrs
142142
skip
143143
clock = Clock.new(hour: 5, minute: 32)
144-
assert_equal "06:32", (clock + Clock.new(minute: 1500)).to_s
144+
assert_equal '06:32', (clock + Clock.new(minute: 1500)).to_s
145145
end
146146

147147
def test_add_more_than_two_days
148148
skip
149149
clock = Clock.new(hour: 1, minute: 1)
150-
assert_equal "11:21", (clock + Clock.new(minute: 3500)).to_s
150+
assert_equal '11:21', (clock + Clock.new(minute: 3500)).to_s
151151
end
152152

153153
def test_subtract_minutes
154154
skip
155155
clock = Clock.new(hour: 10, minute: 3)
156-
assert_equal "10:00", (clock - Clock.new(minute: 3)).to_s
156+
assert_equal '10:00', (clock - Clock.new(minute: 3)).to_s
157157
end
158158

159159
def test_subtract_to_previous_hour
160160
skip
161161
clock = Clock.new(hour: 10, minute: 3)
162-
assert_equal "09:33", (clock - Clock.new(minute: 30)).to_s
162+
assert_equal '09:33', (clock - Clock.new(minute: 30)).to_s
163163
end
164164

165165
def test_subtract_more_than_an_hour
166166
skip
167167
clock = Clock.new(hour: 10, minute: 3)
168-
assert_equal "08:53", (clock - Clock.new(minute: 70)).to_s
168+
assert_equal '08:53', (clock - Clock.new(minute: 70)).to_s
169169
end
170170

171171
def test_subtract_across_midnight
172172
skip
173-
clock = Clock.new(hour: 0, minute: 3)
174-
assert_equal "23:59", (clock - Clock.new(minute: 4)).to_s
173+
clock = Clock.new(minute: 3)
174+
assert_equal '23:59', (clock - Clock.new(minute: 4)).to_s
175175
end
176176

177177
def test_subtract_more_than_two_hours
178178
skip
179-
clock = Clock.new(hour: 0, minute: 0)
180-
assert_equal "21:20", (clock - Clock.new(minute: 160)).to_s
179+
clock = Clock.new
180+
assert_equal '21:20', (clock - Clock.new(minute: 160)).to_s
181181
end
182182

183183
def test_subtract_more_than_two_hours_with_borrow
184184
skip
185185
clock = Clock.new(hour: 6, minute: 15)
186-
assert_equal "03:35", (clock - Clock.new(minute: 160)).to_s
186+
assert_equal '03:35', (clock - Clock.new(minute: 160)).to_s
187187
end
188188

189-
def test_subtract_more_than_one_day
189+
def test_subtract_more_than_one_day_1500_min__25_hrs
190190
skip
191191
clock = Clock.new(hour: 5, minute: 32)
192-
assert_equal "04:32", (clock - Clock.new(minute: 1500)).to_s
192+
assert_equal '04:32', (clock - Clock.new(minute: 1500)).to_s
193193
end
194194

195195
def test_subtract_more_than_two_days
196196
skip
197197
clock = Clock.new(hour: 2, minute: 20)
198-
assert_equal "00:20", (clock - Clock.new(minute: 3000)).to_s
198+
assert_equal '00:20', (clock - Clock.new(minute: 3000)).to_s
199199
end
200200

201201
def test_clocks_with_same_time
@@ -303,7 +303,7 @@ def test_clocks_with_negative_hours_and_minutes_that_wrap
303303
assert_equal clock1, clock2
304304
end
305305

306-
def test_full_clockand_zeroed_clock
306+
def test_full_clock_and_zeroed_clock
307307
skip
308308
clock1 = Clock.new(hour: 24, minute: 0)
309309
clock2 = Clock.new(hour: 0, minute: 0)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
require 'minitest/autorun'
2+
require_relative 'collatz_conjecture'
3+
4+
class CollatzConjectureTest < Minitest::Test
5+
<% json["cases"].each do |cases| %>
6+
def test_<%= underscore(cases["description"]) %>
7+
<%= skip? %>
8+
<%- if cases["expected"].is_a?(Hash) && cases["expected"].key?("error") -%>
9+
assert_raises(ArgumentError) do
10+
CollatzConjecture.steps(<%= cases["input"]["number"] %>)
11+
end
12+
<%- else -%>
13+
assert_equal <%= cases["expected"] %>, CollatzConjecture.steps(<%= cases["input"]["number"] %>)
14+
<%- end -%>
15+
end
16+
<% end %>
17+
end

0 commit comments

Comments
 (0)