From e8c392c5f1d40023ef50233991113dd786f1e9ad Mon Sep 17 00:00:00 2001 From: David Chelimsky Date: Sun, 13 Nov 2011 09:59:01 -0600 Subject: [PATCH] use defined?(xxx) (tastes great, less filling) - #502 --- benchmarks/respond_to_v_defined.rb | 72 ++++++++++++++++++++++++++++++ lib/rspec/core.rb | 2 +- 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 benchmarks/respond_to_v_defined.rb diff --git a/benchmarks/respond_to_v_defined.rb b/benchmarks/respond_to_v_defined.rb new file mode 100644 index 0000000000..0a626139f9 --- /dev/null +++ b/benchmarks/respond_to_v_defined.rb @@ -0,0 +1,72 @@ +require 'benchmark' + +n = 1_000_000 + +puts "Kernel.respond_to?(:warn)" + +Benchmark.benchmark do |bm| + 3.times do + bm.report do + n.times do + Kernel.respond_to?(:warn) + end + end + end +end + +puts "defined?(warn)" + +Benchmark.benchmark do |bm| + 3.times do + bm.report do + n.times do + defined?(warn) + end + end + end +end + +puts "Kernel.respond_to?(:foo)" + +Benchmark.benchmark do |bm| + 3.times do + bm.report do + n.times do + Kernel.respond_to?(:foo) + end + end + end +end + +puts "defined?(foo)" + +Benchmark.benchmark do |bm| + 3.times do + bm.report do + n.times do + defined?(foo) + end + end + end +end + +# $ ruby benchmarks/respond_to_v_defined.rb +# Kernel.respond_to?(:warn) +# 0.190000 0.000000 0.190000 ( 0.206502) +# 0.190000 0.000000 0.190000 ( 0.197547) +# 0.190000 0.000000 0.190000 ( 0.189731) +# defined?(warn) +# 0.190000 0.000000 0.190000 ( 0.187334) +# 0.180000 0.000000 0.180000 ( 0.201078) +# 0.190000 0.000000 0.190000 ( 0.202295) +# Kernel.respond_to?(:foo) +# 0.250000 0.010000 0.260000 ( 0.255003) +# 0.240000 0.000000 0.240000 ( 0.247376) +# 0.250000 0.000000 0.250000 ( 0.251196) +# defined?(foo) +# 0.100000 0.000000 0.100000 ( 0.104748) +# 0.110000 0.000000 0.110000 ( 0.107250) +# 0.110000 0.000000 0.110000 ( 0.107990) +# +# defined is consistently faster, but it takes 1,000,000 x to have a meaningful +# diff diff --git a/lib/rspec/core.rb b/lib/rspec/core.rb index 97494076b5..b01a2bbe01 100644 --- a/lib/rspec/core.rb +++ b/lib/rspec/core.rb @@ -1,4 +1,4 @@ -if Kernel.respond_to?(:require_relative) +if defined?(require_relative) def require_rspec(path) require_relative path end