Sha256: 118e70cb0b0a7409406ff5014280bdba69186976df950e89843492487581f8c5

Contents?: true

Size: 1.97 KB

Versions: 90

Compression:

Stored size: 1.97 KB

Contents

#!/usr/bin/env ruby
gem 'minitest', '>= 5.0.0'
require 'minitest/autorun'
require_relative 'dominoes'

# Common test data version: <%= abbreviated_commit_hash %>
class DominoesTest < Minitest::Test
<% test_cases.each do |test_case| %>
  def <%= test_case.test_name %>
    <%= test_case.skipped %>
    <%= test_case.workload %>
  end

<% end %>
<%= IO.read(XRUBY_LIB + '/bookkeeping.md') %>
  def test_bookkeeping
    skip
    assert_equal <%= version %>, BookKeeping::VERSION
  end

  # It's infeasible to use example-based tests for this exercise,
  # because the list of acceptable answers for a given input can be quite large.
  # Instead, we verify certain properties of a correct chain.

  def assert_correct_chain(input_dominoes, output_chain)
    refute_nil output_chain, "There should be a chain for #{input_dominoes}"
    assert_same_dominoes(input_dominoes, output_chain)
    return if output_chain.empty?
    assert_consecutive_dominoes_match(output_chain)
    assert_dominoes_at_end_match(output_chain)
  end

  def assert_same_dominoes(input_dominoes, output_chain)
    input_normal = input_dominoes.map(&:sort).sort
    output_normal = output_chain.map(&:sort).sort
    assert_equal input_normal, output_normal,
      'Dominoes used in the output must be the same as the ones given in the input'
  end

  def assert_consecutive_dominoes_match(chain)
    chain.each_cons(2).with_index { |(d1, d2), i|
      assert_equal d1.last, d2.first,
        "In chain #{chain}, right end of domino #{i} (#{d1}) and left end of domino #{i + 1} (#{d2}) must match"
    }
  end

  def assert_dominoes_at_end_match(chain)
    first_domino = chain.first
    last_domino = chain.last
    assert_equal first_domino.first, last_domino.last,
      "In chain #{chain}, left end of first domino (#{first_domino}) and right end of last domino (#{last_domino}) must match"
  end

  def refute_correct_chain(input_dominoes, output_chain)
    assert_nil output_chain, "There should be no chain for #{input_dominoes}"
  end
end

Version data entries

90 entries across 90 versions & 1 rubygems

Version Path
trackler-2.1.0.1 tracks/ruby/exercises/dominoes/example.tt
trackler-2.1.0.0 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.55 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.54 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.53 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.52 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.51 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.50 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.49 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.48 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.47 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.46 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.45 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.44 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.43 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.42 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.41 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.40 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.39 tracks/ruby/exercises/dominoes/example.tt
trackler-2.0.8.38 tracks/ruby/exercises/dominoes/example.tt