#!/usr/local/bin/ruby
require "GSL"
require "benchmark"
require "complex"
include Benchmark
# Test complex numbers/functions
STDERR.puts "Running tests for complex numbers..."
puts "Ruby Complex:"
c = Complex.new(1.0, 2.0)
puts "real: #{c.real}"
puts "image: #{c.image}"
puts "arg: #{c.arg}"
puts "\nGSL::Complex:"
d = GSL::Complex.new(c)
puts "real: #{d.real}"
puts "image: #{d.image}"
puts "arg: #{d.arg}"
e = GSL::Complex.new2(2.0, -1.0)
f = d + e
puts "d + e\nreal: #{f.real}"
puts "image: #{f.image}"
f = d.add_real(4)
puts "d + 4\nreal: #{f.real}"
puts "image: #{f.image}"
n = 10000
puts "\nBenchmarking: (n=#{n})\nsin"
zr = d.real
zi = d.imag
bm do |x|
x.report("Ruby : ") {for i in 1..n; z = Math::sin(c); end}
x.report("GSL_1 : ") {for i in 1..n; z = GSL::Complex::sin(d); end}
x.report("GSL_2 : ") {for i in 1..n; szr, szi = GSL::Special::Trig::complex_sin_e(zr, zi); end}
x.report("GSL_3 : ") {for i in 1..n; szr, szi = GSL::Complex::sin_e(d); end}
end
puts "\ntan"
bm do |x|
x.report("Ruby : ") {for i in 1..n; z = Math::tan(c); end}
x.report("GSL : ") {for i in 1..n; z = GSL::Complex::tan(d); end}
end
STDERR.puts "\ndone."