Sha256: 3cbd2bacb08fc71d4b5aa0d3742cc6fc16047a853dbada37c883157d8c95edb8

Contents?: true

Size: 1.99 KB

Versions: 41

Compression:

Stored size: 1.99 KB

Contents

#!/usr/bin/env ruby
require 'minitest/autorun'
require_relative 'dominoes'

# Common test data version: <%= canonical_data_version %> <%= abbreviated_commit_hash %>
class DominoesTest < Minitest::Test
<% test_cases.each_with_index do |test_case, idx| %>
  def <%= test_case.name %>
    <%= test_case.skipped(idx) %>
    <%= 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

41 entries across 41 versions & 1 rubygems

Version Path
trackler-2.1.0.53 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.52 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.51 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.50 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.49 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.48 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.47 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.46 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.45 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.44 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.43 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.42 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.41 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.40 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.39 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.38 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.37 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.36 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.34 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb
trackler-2.1.0.33 tracks/ruby/exercises/dominoes/.meta/generator/test_template.erb