class TestCycles

Public Instance Methods

contains_cycle?(cycles, cycle) click to toggle source

Helper for testing for different permutations of a cycle

# File test/cycles_test.rb, line 21
def contains_cycle?(cycles, cycle)
  cycle.size.times do |i|
    return true if cycles.include?(cycle)
    cycle = cycle[1..-1] + [cycle[0]]
  end
end
setup() click to toggle source
# File test/cycles_test.rb, line 9
def setup
  @dg   = DirectedAdjacencyGraph.new(Array)
  edges = [[1, 2], [2, 2], [2, 3], [3, 4], [4, 5], [5, 1], [6, 4], [6, 6], [1, 4], [7, 7], [7, 7]]
  edges.each do |(src, target)|
    @dg.add_edge(src, target)
  end

  @ug = AdjacencyGraph.new(Array)
  @ug.add_edges(*edges)
end
test_cycles() click to toggle source
# File test/cycles_test.rb, line 28
def test_cycles
  d_cycles = @dg.cycles
  assert_equal 6, d_cycles.size
  assert d_cycles.include?([6])
  assert d_cycles.include?([7])
  assert d_cycles.include?([2])
  assert contains_cycle?(d_cycles, [1, 4, 5])
  assert contains_cycle?(d_cycles, [1, 2, 3, 4, 5])

  assert_equal 5, DirectedAdjacencyGraph.new(Set, @dg).cycles.size

  u_cycles = AdjacencyGraph.new(Set, @dg).cycles.sort

  assert u_cycles.include?([2])
  assert u_cycles.include?([6])
  assert u_cycles.include?([7])
  assert contains_cycle?(u_cycles, [1, 2, 3, 4, 5])
  assert contains_cycle?(u_cycles, [1, 5, 4, 3, 2])
  assert contains_cycle?(u_cycles, [1, 4, 3, 2])
  assert contains_cycle?(u_cycles, [1, 4, 5])
  assert contains_cycle?(u_cycles, [1, 5, 4])
  assert contains_cycle?(u_cycles, [1, 5])
  assert contains_cycle?(u_cycles, [1, 2])
  assert contains_cycle?(u_cycles, [1, 2, 3, 4])
  assert contains_cycle?(u_cycles, [2, 3])
  assert contains_cycle?(u_cycles, [1, 4])
  assert contains_cycle?(u_cycles, [3, 4])
  assert contains_cycle?(u_cycles, [4, 5])
  assert contains_cycle?(u_cycles, [4, 6])
  assert_equal 16, u_cycles.size
end