Method: Hash#shrink

Defined in:
lib/propr/shrink/hash.rb

#shrinkArray<Hash>

Returns:



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/propr/shrink/hash.rb', line 3

def shrink
  return Array.new if empty?

  array = to_a
  array.combination(size - 1).map{|pairs| Hash[pairs] }.tap do |shrunken|
    shrunken << Hash.new

    size.times do |n|
      head = array[0, n]
      tail = array[n+1..-1]
      k, v = array[n]
      shrunken.concat(v.shrink.map{|m| Hash[head + [[k, m]] + tail] })
    end
  end
end