gogotanaka/Rubype

View on GitHub
Rakefile

Summary

Maintainability
Test Coverage
require "bundler/gem_tasks"
require "rake/testtask"
require "rake/extensiontask"

#  Test
#-----------------------------------------------
Rake::TestTask.new(:test) do |t|
  t.libs << "test"
end

#  Compile C extension
#-----------------------------------------------
Rake::ExtensionTask.new("rubype") do |ext|
  ext.lib_dir = "lib/rubype"
end

task :compile_and_test do
  Rake::Task['compile'].invoke
  Rake::Task['test'].invoke
end

#  Benchmark
#-----------------------------------------------
desc "Compare with pure ruby"
task :benchmark do
  require "benchmark/ips"
  require "rubype"
  require "rubype/version"

  puts "ruby version: #{RUBY_VERSION}"
  class PureClass
    def sum(x, y)
      x + y
    end
  end
  pure_instance = PureClass.new

  puts "rubype version: #{Rubype::VERSION}"
  class RubypeClass
    def sum(x, y)
      x + y
    end
    typesig :sum, [Numeric, Numeric] => Numeric
  end
  rubype_instance = RubypeClass.new

  Benchmark.ips do |x|
    x.report('Pure Ruby') { pure_instance.sum(4, 2) }
    x.report('Rubype') { rubype_instance.sum(4, 2) }

    x.compare!
  end
end
task bm: :benchmark


task default: :compile_and_test