 
 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.
| Using Complex Numbers | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'complex' Complex::I | Complex(0, 1) | Complex(0, 1) | 
| a = Complex(1, 4) | Complex(1, 4) | Complex(1, 4) | 
| a.real | 1 | 1 | 
| a.image | 4 | 4 | 
| b = Complex(1.5, 4.25) | Complex(1.5, 4.25) | Complex(1.5, 4.25) | 
| b + 1.5 | Complex(3.0, 4.25) | Complex(3.0, 4.25) | 
| b + 1.5*Complex::I | Complex(1.5, 5.75) | Complex(1.5, 5.75) | 
| a - b | Complex(-0.5, -0.25) | Complex(-0.5, -0.25) | 
| a * b | Complex(-15.5, 10.25) | Complex(-15.5, 10.25) | 
| b.conjugate | Complex(1.5, -4.25) | Complex(1.5, -4.25) | 
| Math::sin(b) | Complex(34.9720129257216, 2.47902583958724) | Complex(34.9720129257216, 2.47902583958724) | 
| class Mandelbrot
  # Set up the Mandelbrot generator with the basic parameters for 
  # deciding whether or not a point is in the set.
  def initialize(bailout=10, iterations=100)
    @bailout, @iterations = bailout, iterations    
  end  
  # Performs the Mandelbrot operation @iterations times. If the
  # result exceeds @bailout, assume this point goes to infinity and
  # is not in the set. Otherwise, assume it is in the set.
  def mandelbrot(x, y)
    c = Complex(x, y)
    z = 0
    @iterations.times do |i|      
      z = z**2 + c                  # This is the Mandelbrot operation.
      return false if z > @bailout 
    end
    return true
  end
  def render(x_size=80, y_size=24, inside_set="*", outside_set=" ")
    0.upto(y_size) do |y| 	
      0.upto(x_size) do |x|
        scaled_x = -2 + (3 * x / x_size.to_f)
        scaled_y = 1 + (-2 * y / y_size.to_f)
        print mandelbrot(scaled_x, scaled_y) ? inside_set : outside_set
      end
      puts
    end
  end
end
Mandelbrot.new.render(25, 10) | ** **** ******** *** ********* ******************* *** ********* ******** **** ** | **         
              ****        
            ********      
       *** *********      
*******************       
       *** *********      
            ********      
              ****        
               ** |