From 5d52e65f6ba4157a522666895c6f9bfeabb9ae3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Tue, 3 Feb 2015 20:10:09 -0800 Subject: [PATCH] Add readygo benchmark --- .gitmodules | 3 +++ .readygo | 1 + Rakefile | 5 +++++ bin/rake | 16 ++++++++++++++++ bin/readygo | 4 ++++ script/benchmark | 22 ++++++++++++++++++++++ script/bootstrap | 5 +++++ test/benchmark.rb | 15 +++++++++++++++ test/version_sorter_test.rb | 9 --------- vendor/readygo | 1 + version_sorter.gemspec | 2 +- 11 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 .gitmodules create mode 100644 .readygo create mode 100755 bin/rake create mode 100755 bin/readygo create mode 100755 script/benchmark create mode 100755 script/bootstrap create mode 100644 test/benchmark.rb create mode 160000 vendor/readygo diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..ebd90a4 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vendor/readygo"] + path = vendor/readygo + url = https://github.com/garybernhardt/readygo.git diff --git a/.readygo b/.readygo new file mode 100644 index 0000000..ecd6920 --- /dev/null +++ b/.readygo @@ -0,0 +1 @@ +{"readygo_file_format_version":1,"benchmark_results":[["VersionSorter .sort",[1.62,1.715,1.6520000000000001,1.6560000000000001,1.7550000000000001,1.796,1.754,1.7340000000000002,1.847,1.775,1.8730000000000002,1.809,1.707,1.8110000000000002,1.804,1.8900000000000001]],["VersionSorter .rsort",[1.7520000000000002,1.7600000000000002,1.7240000000000002,1.71,2.0820000000000003,1.8,2.711,1.6460000000000001,1.765,1.736,1.895,1.728,1.543,1.825,1.592,1.659]]]} \ No newline at end of file diff --git a/Rakefile b/Rakefile index b776d6a..cb6b184 100644 --- a/Rakefile +++ b/Rakefile @@ -18,3 +18,8 @@ end desc "Compile the native extension" task :compile => 'lib/version_sorter.bundle' task :test => :compile + +desc "Run the benchmark" +task :benchmark => :compile do + sh 'script/benchmark' +end diff --git a/bin/rake b/bin/rake new file mode 100755 index 0000000..26c7a2d --- /dev/null +++ b/bin/rake @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# +# This file was generated by Bundler. +# +# The application 'rake' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +require 'pathname' +ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile", + Pathname.new(__FILE__).realpath) + +require 'rubygems' +require 'bundler/setup' + +load Gem.bin_path('rake', 'rake') diff --git a/bin/readygo b/bin/readygo new file mode 100755 index 0000000..6ab4525 --- /dev/null +++ b/bin/readygo @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -e + +exec env ruby -Ilib vendor/readygo/readygo.rb "$@" diff --git a/script/benchmark b/script/benchmark new file mode 100755 index 0000000..9f97fb7 --- /dev/null +++ b/script/benchmark @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# Usage: script/benchmark [compare|record] +set -e + +task="${1:-compare}" + +case "$task" in +record ) + bin/rake + bin/readygo --record test/benchmark.rb + ;; +compare ) + bin/readygo --compare test/benchmark.rb + ;; +-h | --help ) + sed -ne '/^#/!q;s/.\{1,2\}//;1d;p' < "$0" + exit 0 + ;; +* ) + "$0" --help >&2 + exit 1 +esac diff --git a/script/bootstrap b/script/bootstrap new file mode 100755 index 0000000..60553cc --- /dev/null +++ b/script/bootstrap @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -e + +git submodule update --init +bundle install diff --git a/test/benchmark.rb b/test/benchmark.rb new file mode 100644 index 0000000..0395860 --- /dev/null +++ b/test/benchmark.rb @@ -0,0 +1,15 @@ +require 'version_sorter' + +ready "VersionSorter" do + before do + @versions = File.readlines(File.expand_path('../tags.txt', __FILE__)).map(&:chomp) + end + + go ".sort" do + VersionSorter.sort @versions + end + + go ".rsort" do + VersionSorter.rsort @versions + end +end diff --git a/test/version_sorter_test.rb b/test/version_sorter_test.rb index c7c2670..1de1da6 100644 --- a/test/version_sorter_test.rb +++ b/test/version_sorter_test.rb @@ -25,12 +25,3 @@ def test_reverse_sorts_verisons_correctly assert_equal sorted_versions, rsort(versions) end end - -require 'benchmark' -versions = IO.read(File.dirname(__FILE__) + '/tags.txt').split("\n") -count = 10 -Benchmark.bm(20) do |x| - x.report("sort") { count.times { VersionSorter.sort(versions) } } - x.report("rsot") { count.times { VersionSorter.rsort(versions) } } -end -puts diff --git a/vendor/readygo b/vendor/readygo new file mode 160000 index 0000000..9c97471 --- /dev/null +++ b/vendor/readygo @@ -0,0 +1 @@ +Subproject commit 9c97471d8c11dea3196f5a123d9cb97a774bcbaf diff --git a/version_sorter.gemspec b/version_sorter.gemspec index 74c39a4..9c2342a 100644 --- a/version_sorter.gemspec +++ b/version_sorter.gemspec @@ -13,7 +13,7 @@ Gem::Specification.new do |s| s.summary = "Fast sorting of version strings" s.description = "VersionSorter is a C extension that does fast sorting of large sets of version strings." - s.files = Dir['{bin,lib,ext}/**/*', 'LICENSE*'] + s.files = Dir['{lib,ext}/**/*', 'LICENSE*'] s.extensions << 'ext/version_sorter/extconf.rb' # include only files in version control