should_be_faster 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,25 +1,12 @@
1
1
  require 'benchmark'
2
2
  require 'spec'
3
3
  require 'spec/matchers'
4
+ require 'spec/matchers/be'
4
5
 
5
6
  def _benchmark(code, iter)
6
7
  Benchmark.measure { iter.times { code.call } }
7
8
  end
8
9
 
9
- Spec::Matchers.define(:be_faster_than) do |rhs_code, options|
10
- options ||= {}
11
- options[:matcher] = self
12
- options[:faster] = true
13
- Spec::Matchers::BenchmarkComparison.new(rhs_code, options).benchmark_comparison
14
- end
15
-
16
- Spec::Matchers.define(:be_slower_than) do |rhs_code, options|
17
- options ||= {}
18
- options[:matcher] = self
19
- options[:faster] = false
20
- Spec::Matchers::BenchmarkComparison.new(rhs_code, options).benchmark_comparison
21
- end
22
-
23
10
  module Spec
24
11
  module Matchers
25
12
  class BenchmarkComparison
@@ -28,7 +15,7 @@ module Spec
28
15
  @options = options
29
16
  @options[:iterations] ||= 100
30
17
  @options[:factor] ||= 1
31
- @options[:faster] = @options[:faster] ? true : false # I hate ||= not working with booleans
18
+ @options[:faster] = @options[:faster]
32
19
  end
33
20
 
34
21
  def benchmark_comparison
@@ -76,7 +63,7 @@ module Spec
76
63
  end
77
64
  end
78
65
 
79
- class BePredicate < Be
66
+ module BeFasterThan
80
67
  def times
81
68
  @factor = @args[0]
82
69
  self
@@ -102,5 +89,24 @@ module Spec
102
89
  end
103
90
  end
104
91
  end
92
+
105
93
  end
106
94
  end
95
+
96
+ Spec::Matchers::BePredicate.send(:include, Spec::Matchers::BeFasterThan)
97
+ Spec::Matchers::BeSameAs.send(:include, Spec::Matchers::BeFasterThan)
98
+
99
+ Spec::Matchers.define(:be_faster_than) do |rhs_code, options|
100
+ options ||= {}
101
+ options[:matcher] = self
102
+ options[:faster] = true
103
+ Spec::Matchers::BenchmarkComparison.new(rhs_code, options).benchmark_comparison
104
+ end
105
+
106
+ Spec::Matchers.define(:be_slower_than) do |rhs_code, options|
107
+ options ||= {}
108
+ options[:matcher] = self
109
+ options[:faster] = false
110
+ Spec::Matchers::BenchmarkComparison.new(rhs_code, options).benchmark_comparison
111
+ end
112
+
@@ -9,13 +9,24 @@ describe 'should_be_faster' do
9
9
  Spec::Matchers::BenchmarkComparison.new(nil, options)
10
10
  end
11
11
 
12
- it 'should take an options hash to specify iterations' do
13
- options = mock('hash')
14
- options.stub!(:[])
15
- options.stub!(:[]=)
16
- options.stub!(:[]).with(:iterations).and_return(20)
17
- Spec::Matchers::BenchmarkComparison.new(nil, options)
18
- options[:iterations].should == 20
12
+ context 'with an options hash' do
13
+ it 'should allow you to specify iterations' do
14
+ options = mock('hash')
15
+ options.stub!(:[])
16
+ options.stub!(:[]=)
17
+ options.stub!(:[]).with(:iterations).and_return(20)
18
+ Spec::Matchers::BenchmarkComparison.new(nil, options)
19
+ options[:iterations].should == 20
20
+ end
21
+
22
+ it 'should allow you to specify factor' do
23
+ options = mock('hash')
24
+ options.stub!(:[])
25
+ options.stub!(:[]=)
26
+ options.stub!(:[]).with(:factor).and_return(20)
27
+ Spec::Matchers::BenchmarkComparison.new(nil, options)
28
+ options[:factor].should == 20
29
+ end
19
30
  end
20
31
 
21
32
  context 'when ensuring code is' do
@@ -29,9 +40,21 @@ describe 'should_be_faster' do
29
40
  @fast.should be_faster_than(@slow)
30
41
  end
31
42
 
43
+ it 'should ensure lhs < rhs by x times' do
44
+ @fast.should be_faster_than(@slow, :factor => 2)
45
+ end
46
+
47
+ it 'should ensure lhs < rhs by y secs'
48
+
32
49
  it 'should ensure lhs !> rhs' do
33
50
  @slow.should_not be_faster_than(@fast)
34
51
  end
52
+
53
+ it 'should ensure lhs !> rhs by x times' do
54
+ @slow.should_not be_faster_than(@fast, :factor => 2)
55
+ end
56
+
57
+ it 'should ensure lhs !> rhs by y secs'
35
58
  end
36
59
 
37
60
  context 'slower_than' do
@@ -39,9 +62,21 @@ describe 'should_be_faster' do
39
62
  @slow.should be_slower_than(@fast)
40
63
  end
41
64
 
65
+ it 'should ensure lhs > rhs by x times' do
66
+ @slow.should be_slower_than(@fast, :factor => 2)
67
+ end
68
+
69
+ it 'should ensure lhs > rhs by y secs'
70
+
42
71
  it 'should ensure lhs !< rhs' do
43
72
  @fast.should_not be_slower_than(@slow)
44
73
  end
74
+
75
+ it 'should ensure lhs !< rhs by x times' do
76
+ @fast.should_not be_slower_than(@slow, :factor => 2)
77
+ end
78
+
79
+ it 'should ensure lhs !< rhs by y secs'
45
80
  end
46
81
 
47
82
  context 'at_least(x).times.faster_than' do
@@ -63,5 +98,25 @@ describe 'should_be_faster' do
63
98
  @fast.should_not be_at_least(2).times.slower_than(@slow)
64
99
  end
65
100
  end
101
+
102
+ context 'x.times.slower_than' do
103
+ it 'should ensure lhs > rhs' do
104
+ @slow.should be(2).times.slower_than(@fast)
105
+ end
106
+
107
+ it 'should ensure lhs !< rhs' do
108
+ @fast.should_not be(2).times.slower_than(@slow)
109
+ end
110
+ end
111
+
112
+ context 'x.times.faster_than' do
113
+ it 'should ensure lhs > rhs' do
114
+ @fast.should be(2).times.faster_than(@slow)
115
+ end
116
+
117
+ it 'should ensure lhs !< rhs' do
118
+ @slow.should_not be(2).times.faster_than(@fast)
119
+ end
120
+ end
66
121
  end
67
122
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - David Turnbull
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-11 00:00:00 +10:00
17
+ date: 2010-05-06 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency