summaryrefslogtreecommitdiff
path: root/bench/caching.rb
blob: 3f39fb947dcfb4a5ae60a9b96826dc76aeb4c4bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
require 'coderay'
require 'benchmark'

N = 10
$code = 'foo(Foo[:foo, /foo/m]); ' * 500
Benchmark.bm 15 do |bm|
	bm.report 'loading' do
		CodeRay::Scanners.load :ruby
		CodeRay::Encoders.load :div
	end
	bm.report 'CodeRay.encode' do N.times do
		CodeRay.encode($code, :ruby, :div)
	end end
	bm.report 'Direct' do N.times do
		CodeRay::Encoders::Div.new.encode_tokens(
			CodeRay::Scanners::Ruby.new($code).tokenize
		)
	end end
	bm.report 'Semi-cached' do
		encoder = CodeRay::Encoders::Div.new
		N.times do
			encoder.encode $code, :ruby
		end
	end
	bm.report 'Fully cached' do
		scanner = CodeRay::Scanners::Ruby.new('')
		encoder = CodeRay::Encoders::Div.new
		N.times do
			scanner.string = $code
			encoder.encode_tokens scanner.tokens
		end
	end
	bm.report 'Duo cached' do
		duo = CodeRay::Duo[:ruby, :div]
		N.times do
			duo.encode $code
		end
	end
end