I compiled a pie graph of times needed for CodeRay scanner tests. More test data for a language means more time to run the tests.
As you can see, I have a lot of tests for Ruby (60,000 lines of code) and C (70,000), and less for Delphi (11,000). The combined “other” languages are C++, the CodeRay debug format, diff, ERB and Nitro HTML templates, Scheme, and XML.
I used the excellent Gruff graph library.
Here’s the code:
require 'rubygems' require 'gruff'
g = Gruff::Pie.new
g.title = ‘CodeRay Scanner tests’
data = {}
other = 0
DATA.read.scan(/>> Testing (.?) scanner <<.?^Finished in ([\d.]+)s/m) do |lang, secs|
secs = secs.to_f
if secs > 2
data[lang] = secs
else
other += secs
end
end
- additional colors
g.add_color ‘#ff9966’
g.add_color ‘#889977’
g.add_color ‘#dd77aa’
g.add_color ‘#bbddaa’
g.add_color ‘#aa8888’
g.add_color ‘#77dd99’
g.add_color ‘#555555’
data.sort_by { |k, v| v }.reverse_each do |lang, secs|
g.data lang, secs
end
g.data ‘other’, other if other > 0
g.write ‘tests_pie.png’
END
Put output of norandom=1 rake test:scanners here!
Update: And here’s a graph of the development of language support in CodeRay over time.
The arrows and version tags were added using Mac OS Preview.
require 'rubygems' require 'gruff'
g = Gruff::Line.new
g.title = ‘Supported Languages in CodeRay’
g.hide_dots = true
data, labels = 0, {}
repo_creation = Date.parse `svn info r1`[/Last Changed Date: ([\d])/,1]
index = 1
$stdout.sync = true
for day in repo_creation..Date.today
if day.mday == 1 # only check on 1st day of the month
labels[index] = day.year.to_s if day.month == 1
index += 1
data << `svn ls lib/coderay/scanners -r{#{day}} | \\
grep ’^[[:alpha:]]\\w\\.rb’ | wc -l`.to_i
print day, “\r”
end
end
puts
g.data ‘CodeRay’, data
g.labels = labels
g.write ‘languages_over_time.png’