From cc9d7e88a7d5b35e15413f34acc2f406e72b354a Mon Sep 17 00:00:00 2001 From: Chase Clettenberg Date: Sun, 31 Jul 2016 20:22:54 -0500 Subject: [PATCH] Created a generator for Nth Prime --- bin/generate-nth-prime | 7 +++++ exercises/nth-prime/.version | 1 + exercises/nth-prime/example.rb | 4 +++ exercises/nth-prime/example.tt | 23 ++++++++++++++ exercises/nth-prime/nth_prime_test.rb | 43 ++++++++++++++++++++------- lib/nth_prime_cases.rb | 23 ++++++++++++++ 6 files changed, 91 insertions(+), 10 deletions(-) create mode 100755 bin/generate-nth-prime create mode 100644 exercises/nth-prime/.version create mode 100644 exercises/nth-prime/example.tt create mode 100644 lib/nth_prime_cases.rb diff --git a/bin/generate-nth-prime b/bin/generate-nth-prime new file mode 100755 index 0000000000..306a6eb2ae --- /dev/null +++ b/bin/generate-nth-prime @@ -0,0 +1,7 @@ +#!/usr/bin/env ruby + +require_relative '../lib/helper' +require 'generator' +require 'nth_prime_cases' + +Generator.new('nth-prime', NthPrimeCases).generate diff --git a/exercises/nth-prime/.version b/exercises/nth-prime/.version new file mode 100644 index 0000000000..56a6051ca2 --- /dev/null +++ b/exercises/nth-prime/.version @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/exercises/nth-prime/example.rb b/exercises/nth-prime/example.rb index 6a8f1b1152..79ab25396e 100644 --- a/exercises/nth-prime/example.rb +++ b/exercises/nth-prime/example.rb @@ -1,3 +1,7 @@ +module BookKeeping + VERSION = 1 +end + class Prime def self.nth(n) if n < 1 diff --git a/exercises/nth-prime/example.tt b/exercises/nth-prime/example.tt new file mode 100644 index 0000000000..822d6c5d49 --- /dev/null +++ b/exercises/nth-prime/example.tt @@ -0,0 +1,23 @@ +#!/usr/bin/env ruby +gem 'minitest', '>= 5.0.0' +require 'minitest/autorun' +require_relative 'nth_prime' + +# Test data version: +# <%= sha1 %> +# Rubocop directives +# rubocop:disable Style/NumericLiterals +# +class NthPrimeTest < Minitest::Test<% test_cases.each do |test_case| %> + def <%= test_case.name %><% if test_case.skipped? %> + skip<% end %><% if test_case.raises_error? %> + assert_raises(ArgumentError) { <%= test_case.actual %> }<% else %> + assert_equal <%= test_case.expected %>, <%= test_case.actual %><% end %> + end +<% end %> +<%= IO.read(XRUBY_LIB + '/bookkeeping.md') %> + def test_bookkeeping + skip + assert_equal <%= version.next %>, BookKeeping::VERSION + end +end diff --git a/exercises/nth-prime/nth_prime_test.rb b/exercises/nth-prime/nth_prime_test.rb index 3c935b6041..8ae9b56b62 100755 --- a/exercises/nth-prime/nth_prime_test.rb +++ b/exercises/nth-prime/nth_prime_test.rb @@ -1,16 +1,19 @@ #!/usr/bin/env ruby - gem 'minitest', '>= 5.0.0' require 'minitest/autorun' - require_relative 'nth_prime' -class TestPrimes < Minitest::Test - def test_first +# Test data version: +# bb79e10 +# Rubocop directives +# rubocop:disable Style/NumericLiterals +# +class NthPrimeTest < Minitest::Test + def test_first_prime assert_equal 2, Prime.nth(1) end - def test_second + def test_second_prime skip assert_equal 3, Prime.nth(2) end @@ -22,13 +25,33 @@ def test_sixth_prime def test_big_prime skip - assert_equal 104_743, Prime.nth(10_001) + assert_equal 104743, Prime.nth(10001) + end + + def test_there_is_no_zeroth_prime + skip + assert_raises(ArgumentError) { Prime.nth(0) } end - def test_weird_case + # Problems in exercism evolve over time, as we find better ways to ask + # questions. + # The version number refers to the version of the problem you solved, + # not your solution. + # + # Define a constant named VERSION inside of the top level BookKeeping + # module, which may be placed near the end of your file. + # + # In your file, it will look like this: + # + # module BookKeeping + # VERSION = 1 # Where the version number matches the one in the test. + # end + # + # If you are curious, read more about constants on RubyDoc: + # http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/constants.html + + def test_bookkeeping skip - assert_raises ArgumentError do - Prime.nth(0) - end + assert_equal 1, BookKeeping::VERSION end end diff --git a/lib/nth_prime_cases.rb b/lib/nth_prime_cases.rb new file mode 100644 index 0000000000..bbaa736c30 --- /dev/null +++ b/lib/nth_prime_cases.rb @@ -0,0 +1,23 @@ +class NthPrimeCase < OpenStruct + def name + 'test_%s' % description.downcase.gsub(/[ -]/, '_') + end + + def actual + "Prime.nth(#{input})" + end + + def raises_error? + expected == false + end + + def skipped? + index > 0 + end +end + +NthPrimeCases = proc do |data| + JSON.parse(data)['cases'].map.with_index do |row, i| + NthPrimeCase.new(row.merge('index' => i)) + end +end