 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Computing Set Operations on Arrays | ||
|---|---|---|
| Code | Expected | Actual | 
| #Union [1,2,3] | [1,4,5] | [1, 2, 3, 4, 5] | [1, 2, 3, 4, 5] | 
| #Intersection [1,2,3] & [1,4,5] | [1] | [1] | 
| #Difference [1,2,3] - [1,4,5] | [2, 3] | [2, 3] | 
| require 'set' a = [1,2,3] b = [3,4,5] a.to_set ^ b.to_set | #<Set: {5, 1, 2, 4}> | #<Set: {5, 1, 2, 4}> | 
| (a | b) - (a & b) | [1, 2, 4, 5] | [1, 2, 4, 5] | 
| array = [1,2,3] set = [3,4,5].to_set set & array | #<Set: {3}> | #<Set: {3}> | 
| array & set | TypeError: cannot convert Set into Array | Error! (Exception?) Here's stdout: TypeError: can't convert Set into Array from (irb):15:in `&' from (irb):15 | 
| [3,3] & [3,3] | [3] | [3] | 
| [3,3] | [3,3] | [3] | [3] | 
| [1,2,3,3] - [1] | [2, 3, 3] | [2, 3, 3] | 
| [1,2,3,3] - [3] | [1, 2] | [1, 2] | 
| [1,2,3,3] - [2,2,3] | [1] | [1] | 
| u = [:red, :orange, :yellow, :green, :blue, :indigo, :violet] a = [:red, :blue] u - a | [:orange, :yellow, :green, :indigo, :violet] | [:orange, :yellow, :green, :indigo, :violet] | 
| def natural_numbers_except(exclude)
  exclude_map = {}
  exclude.each { |x| exclude_map[x] = true } 
  x = 1
  while true
    yield x unless exclude_map[x]
    x = x.succ
  end
end
natural_numbers_except([2,3,6,7]) do |x|
 break if x > 10
 puts x
end | 1 4 5 8 9 10 | 1 4 5 8 9 10 | 
| module Enumerable
  def cartesian(other)
    res = []
    each { |x| other.each { |y| res << [x, y] } }
    return res
  end
end
[1,2,3].cartesian(['a',5,6]) | [[1, "a"], [1, 5], [1, 6], | [[1, "a"], [1, 5], [1, 6], [2, "a"], [2, 5], [2, 6], [3, "a"], [3, 5], [3, 6]] | 
| module Enumerable
  def cartesian(other)
    inject([]) { |res, x| other.inject(res) { |res, y| res << [x,y] } }
  end
end | nil | |