Class: Toaster::Combinatorial

Inherits:
Object
  • Object
show all
Defined in:
lib/toaster/util/combinatorial.rb

Overview

Utility methods for combinatorial test design.

Author: Waldemar Hummer ([email protected])

Class Method Summary collapse

Class Method Details

.combine(list, length = nil, successive = false, results = Set.new, current = []) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/toaster/util/combinatorial.rb', line 14

def self.combine(list, length=nil, successive=false, results=Set.new, current=[])
  length = list.size if !length
  if current.size == length
    results << current
    return results
  end
  return results if list.empty?
  next_item = list[0]
  list_new = list[1..-1]
  cur_new = current.dup
  cur_new << next_item
  combine(list_new, length, successive, results, cur_new)
  if current.empty? || !successive
    cur_new1 = current.dup
    combine(list_new, length, successive, results, cur_new1)
  end
  return results
end

.skip(list, length = nil, successive = false, results = Set.new, current = [], original_size = nil, skipped_so_far = 0) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/toaster/util/combinatorial.rb', line 33

def self.skip(list, length=nil, successive=false, results=Set.new, current=[], original_size=nil, skipped_so_far=0)
  length = 0 if !length
  original_size = list.size if !original_size
  if current.size == original_size - length
    results << current
    return results
  end
  return results if list.empty?
  next_item = list[0]
  list_new = list[1..-1]
  cur_new = current.dup
  skip(list_new, length, successive, results, cur_new, original_size, skipped_so_far+1)
  if skipped_so_far == 0 || !successive || skipped_so_far >= length
    cur_new1 = current.dup
    cur_new1 << next_item
    skip(list_new, length, successive, results, cur_new1, original_size, skipped_so_far)
  end
  return results
end