Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions exercises/practice/largest-series-product/.meta/test_template.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
require 'minitest/autorun'
require_relative 'largest_series_product'

class LargestSeriesProductTest < Minitest::Test
<% json["cases"].each do |cases| %>
def test_<%= underscore(cases["description"]) %>
<%= skip? %>
<%- if cases["expected"].is_a?(Hash) && cases["expected"].key?("error") -%>
assert_raises(ArgumentError) do
Series.new('<%= cases["input"]["digits"] %>').largest_product(<%= cases["input"]["span"] %>)
end
<%- else -%>
assert_equal <%= cases["expected"] %>, Series.new('<%= cases["input"]["digits"] %>').largest_product(<%= cases["input"]["span"] %>)
<%- end -%>
end
<% end %>
end
10 changes: 10 additions & 0 deletions exercises/practice/largest-series-product/.meta/tests.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ description = "reports zero if all spans include zero"

[5d81aaf7-4f67-4125-bf33-11493cc7eab7]
description = "rejects span longer than string length"
include = false

[0ae1ce53-d9ba-41bb-827f-2fceb64f058b]
description = "rejects span longer than string length"
reimplements = "5d81aaf7-4f67-4125-bf33-11493cc7eab7"

[06bc8b90-0c51-4c54-ac22-3ec3893a079e]
description = "reports 1 for empty string and empty product (0 span)"
Expand All @@ -49,6 +54,11 @@ include = false

[6d96c691-4374-4404-80ee-2ea8f3613dd4]
description = "rejects empty string and nonzero span"
include = false

[6cf66098-a6af-4223-aab1-26aeeefc7402]
description = "rejects empty string and nonzero span"
reimplements = "6d96c691-4374-4404-80ee-2ea8f3613dd4"

[7a38f2d6-3c35-45f6-8d6f-12e6e32d4d74]
description = "rejects invalid character in digits"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,74 +4,74 @@
class LargestSeriesProductTest < Minitest::Test
def test_finds_the_largest_product_if_span_equals_length
# skip
assert_equal 18, Series.new("29").largest_product(2)
assert_equal 18, Series.new('29').largest_product(2)
end

def test_can_find_the_largest_product_of_2_with_numbers_in_order
skip
assert_equal 72, Series.new("0123456789").largest_product(2)
assert_equal 72, Series.new('0123456789').largest_product(2)
end

def test_can_find_the_largest_product_of_2
skip
assert_equal 48, Series.new("576802143").largest_product(2)
assert_equal 48, Series.new('576802143').largest_product(2)
end

def test_can_find_the_largest_product_of_3_with_numbers_in_order
skip
assert_equal 504, Series.new("0123456789").largest_product(3)
assert_equal 504, Series.new('0123456789').largest_product(3)
end

def test_can_find_the_largest_product_of_3
skip
assert_equal 270, Series.new("1027839564").largest_product(3)
assert_equal 270, Series.new('1027839564').largest_product(3)
end

def test_can_find_the_largest_product_of_5_with_numbers_in_order
skip
assert_equal 15_120, Series.new("0123456789").largest_product(5)
assert_equal 15_120, Series.new('0123456789').largest_product(5)
end

def test_can_get_the_largest_product_of_a_big_number
skip
assert_equal 23_520, Series.new("73167176531330624919225119674426574742355349194934").largest_product(6)
assert_equal 23_520, Series.new('73167176531330624919225119674426574742355349194934').largest_product(6)
end

def test_reports_zero_if_the_only_digits_are_zero
skip
assert_equal 0, Series.new("0000").largest_product(2)
assert_equal 0, Series.new('0000').largest_product(2)
end

def test_reports_zero_if_all_spans_include_zero
skip
assert_equal 0, Series.new("99099").largest_product(3)
assert_equal 0, Series.new('99099').largest_product(3)
end

def test_rejects_span_longer_than_string_length
skip
assert_raises(ArgumentError) do
Series.new("123").largest_product(4)
Series.new('123').largest_product(4)
end
end

def test_rejects_empty_string_and_nonzero_span
skip
assert_raises(ArgumentError) do
Series.new("").largest_product(1)
Series.new('').largest_product(1)
end
end

def test_rejects_invalid_character_in_digits
skip
assert_raises(ArgumentError) do
Series.new("1234a5").largest_product(2)
Series.new('1234a5').largest_product(2)
end
end

def test_rejects_negative_span
skip
assert_raises(ArgumentError) do
Series.new("12345").largest_product(-1)
Series.new('12345').largest_product(-1)
end
end
end
20 changes: 20 additions & 0 deletions exercises/practice/leap/.meta/test_template.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
require 'minitest/autorun'
require_relative 'leap'

class Date
def leap?
raise "Implement this yourself instead of using Ruby's implementation."
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
raise "Implement this yourself instead of using Ruby's implementation."
raise "Write this functionality yourself instead of using Ruby's `leap?` method."

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because "implement the implement you implement yourself, rather than the implement that Ruby implements" can be very confusing, if accurate and proper use, but I tend to avoid this word in multicultural and multilingual audiences.

English is hard enough as it is, using a word with 4 senses when people tend to not take care or be clear which sense they are talking about can be doubly hard for those that do not have English as a first language.

end

alias gregorian_leap? leap?
alias julian_leap? leap?
end

class YearTest < Minitest::Test
<% json["cases"].each do |cases| %>
def test_<%= underscore(cases["description"]) %>
<%= skip? %>
<%= cases["expected"] ? "assert" : "refute" %> Year.leap?(<%= cases["input"]["year"] %>), "Expected '<%= cases["expected"] %>', <%= cases["input"]["year"] %> is<%= cases["expected"] ? "" : " not" %> a leap year"
end
<% end %>
end
40 changes: 30 additions & 10 deletions exercises/practice/leap/leap_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,48 @@ def leap?
end

class YearTest < Minitest::Test
def test_year_not_divisible_by_4_common_year
def test_year_not_divisible_by_4_in_common_year
# skip
refute Year.leap?(2015), "Expected 'false', 2015 is not a leap year."
refute Year.leap?(2015), "Expected 'false', 2015 is not a leap year"
end

def test_year_divisible_by_4_not_divisible_by_100_leap_year
def test_year_divisible_by_2_not_divisible_by_4_in_common_year
skip
assert Year.leap?(1996), "Expected 'true', 1996 is a leap year."
refute Year.leap?(1970), "Expected 'false', 1970 is not a leap year"
end

def test_year_divisible_by_100_not_divisible_by_400_common_year
def test_year_divisible_by_4_not_divisible_by_100_in_leap_year
skip
refute Year.leap?(2100), "Expected 'false', 2100 is not a leap year."
assert Year.leap?(1996), "Expected 'true', 1996 is a leap year"
end

def test_year_divisible_by_400_leap_year
def test_year_divisible_by_4_and_5_is_still_a_leap_year
skip
assert Year.leap?(2000), "Expected 'true', 2000 is a leap year."
assert Year.leap?(1960), "Expected 'true', 1960 is a leap year"
end

def test_year_divisible_by_200_not_divisible_by_400_common_year
def test_year_divisible_by_100_not_divisible_by_400_in_common_year
skip
refute Year.leap?(1800), "Expected 'false', 1800 is not a leap year."
refute Year.leap?(2100), "Expected 'false', 2100 is not a leap year"
end

def test_year_divisible_by_100_but_not_by_3_is_still_not_a_leap_year
skip
refute Year.leap?(1900), "Expected 'false', 1900 is not a leap year"
end

def test_year_divisible_by_400_is_leap_year
skip
assert Year.leap?(2000), "Expected 'true', 2000 is a leap year"
end

def test_year_divisible_by_400_but_not_by_125_is_still_a_leap_year
skip
assert Year.leap?(2400), "Expected 'true', 2400 is a leap year"
end

def test_year_divisible_by_200_not_divisible_by_400_in_common_year
skip
refute Year.leap?(1800), "Expected 'false', 1800 is not a leap year"
end
end
36 changes: 34 additions & 2 deletions exercises/practice/linked-list/.meta/example.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
class Element
attr_accessor :prev
attr_accessor :next
attr_accessor :prev, :next
attr_reader :datum

def initialize(datum, next_element = nil, prev = nil)
Expand Down Expand Up @@ -49,4 +48,37 @@ def shift
end
value
end

def delete(value)
return if @front.nil?

current = @front
loop do
if current.datum == value
if current.equal?(@front) && current.next.equal?(@front)
@front = nil
else
current.prev.next = current.next
current.next.prev = current.prev
@front = current.next if current.equal?(@front)
end
break
end
current = current.next
break if current.equal?(@front)
end
end

def count
return 0 if @front.nil?

count = 0
current = @front
loop do
count += 1
current = current.next
break if current.equal?(@front)
end
count
end
end
18 changes: 18 additions & 0 deletions exercises/practice/linked-list/.meta/test_template.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
require 'minitest/autorun'
require_relative 'linked_list'

class DequeTest < Minitest::Test
<% json["cases"].each do |cases| %>
def test_<%= underscore(cases["description"]) %>
#<%= skip? %>
deque = Deque.new
<%- cases["input"]["operations"].each do |operation| -%>
<%- if operation["expected"] -%>
assert_equal <%= operation["expected"] %>, deque.<%= operation["operation"] %>(<%= operation["value"] %>)
<%- else -%>
deque.<%= operation["operation"] %>(<%= operation["value"] %>)
<%- end -%>
<%- end -%>
end
<% end %>
end
Loading