Rakefile in rpeg-markdown-0.1.0 vs Rakefile in rpeg-markdown-0.2.0
- old
+ new
@@ -1,24 +1,31 @@
require 'rake/clean'
require 'rake/packagetask'
require 'rake/gempackagetask'
+task :default => :test
+
DLEXT = Config::CONFIG['DLEXT']
-VERS = '0.1.0'
+VERS = '0.2.0'
spec =
Gem::Specification.new do |s|
s.name = "rpeg-markdown"
s.version = VERS
s.summary = "Ruby extension library for peg-markdown"
- s.files = FileList['README','LICENSE','Rakefile','test.rb','{lib,ext}/**.rb','ext/*.{c,h}','bin/rpeg-markdown']
+ s.files = FileList[
+ 'README','LICENSE','Rakefile',
+ '{lib,ext,test}/**.rb','ext/*.{c,h}',
+ 'test/MarkdownTest*/**/*',
+ 'bin/rpeg-markdown'
+ ]
s.bindir = 'bin'
s.executables << 'rpeg-markdown'
s.require_path = 'lib'
s.has_rdoc = true
s.extra_rdoc_files = ['README', 'LICENSE']
- s.test_files = Dir['test.rb']
+ s.test_files = FileList['test/markdown_test.rb']
s.extensions = ['ext/extconf.rb']
s.author = 'Ryan Tomayko'
s.email = 'r@tomayko.com'
s.homepage = 'http://github.com/rtomayko/rpeg-markdown'
@@ -40,23 +47,33 @@
sh 'git submodule init peg-markdown'
sh 'git submodule update peg-markdown'
end
end
+ desc 'Update the peg-markdown submodule'
task :update => :init do
- sh 'git submodule update peg-markdown'
+ sh 'git submodule update peg-markdown' unless File.symlink?('peg-markdown')
end
+
+ file 'peg-markdown/markdown.c' do
+ Rake::Task['submodule:init'].invoke
+ end
+ task :exist => 'peg-markdown/markdown.c'
end
desc 'Gather required peg-markdown sources into extension directory'
-task :gather => 'submodule:update' do |t|
+task :gather => 'submodule:exist' do |t|
sh 'cd peg-markdown && make markdown_parser.c'
- cp FileList['peg-markdown/markdown_{peg.h,parser.c,output.c}'], 'ext/',
+ files =
+ FileList[
+ 'peg-markdown/markdown_{peg.h,parser.c,output.c,lib.c,lib.h}',
+ 'peg-markdown/{utility,parsing}_functions.c'
+ ]
+ cp files, 'ext/',
:preserve => true,
:verbose => true
end
-CLOBBER.include 'ext/markdown_{peg.h,parser.c,output.c}'
file 'ext/Makefile' => FileList['ext/{extconf.rb,*.c,*.h,*.rb}'] do
chdir('ext') { ruby 'extconf.rb' }
end
CLEAN.include 'ext/Makefile'
@@ -71,26 +88,78 @@
end
desc 'Build the peg-markdown extension'
task :build => "lib/markdown.#{DLEXT}"
-task 'test:unit' => [ :build ] do |t|
- ruby 'test.rb'
+desc 'Run unit and conformance tests'
+task :test => [ 'test:unit', 'test:conformance' ]
+
+desc 'Run unit tests'
+task 'test:unit' => [:build] do |t|
+ ruby 'test/markdown_test.rb'
end
-task 'test:conformance' => [ 'submodule:update', :build ] do |t|
- chdir('peg-markdown/MarkdownTest_1.0.3') do
- sh "./MarkdownTest.pl --script=../../bin/rpeg-markdown --tidy"
+desc 'Run conformance tests (MARKDOWN_TEST_VER=1.0)'
+task 'test:conformance' => [:build] do |t|
+ script = "#{pwd}/bin/rpeg-markdown"
+ test_version = ENV['MARKDOWN_TEST_VER'] || '1.0'
+ chdir("test/MarkdownTest_#{test_version}") do
+ sh "./MarkdownTest.pl --script='#{script}' --tidy"
end
end
+desc 'Run version 1.0 conformance suite'
+task 'test:conformance:1.0' => 'test:conformance'
+desc 'Run 1.0.3 conformance suite'
+task 'test:conformance:1.0.3' => [:build] do |t|
+ ENV['MARKDOWN_TEST_VER'] = '1.0.3'
+ Rake::Task['test:conformance'].invoke
+end
+desc 'Run unit and conformance tests'
+task :test => %w[test:unit test:conformance]
+
+desc 'Run benchmarks'
+task :benchmark => :build do |t|
+ $:.unshift 'lib'
+ load 'test/benchmark.rb'
+end
+
+desc "See how much memory we're losing"
+task 'test:mem' => %w[submodule:exist build] do |t|
+ $: << File.join(File.dirname(__FILE__), "lib")
+ require 'markdown'
+ FileList['test.txt', 'peg-markdown/MarkdownTest_1.0.3/Tests/*.text'].each do |file|
+ printf "%s: \n", file
+ markdown = Markdown.new(File.read(file))
+ iterations = (ENV['N'] || 100).to_i
+ total, growth = [], []
+ iterations.times do |i|
+ start = Time.now
+ GC.start
+ markdown.to_html
+ duration = Time.now - start
+ GC.start
+ total << `ps -o rss= -p #{Process.pid}`.to_i
+ next if i == 0
+ growth << (total.last - (total[-2] || 0))
+ # puts "%03d: %06.02f ms / %dK used / %dK growth" % [ i, duration, total.last, growth.last ]
+ end
+ average = growth.inject(0) { |sum,x| sum + x } / growth.length
+ printf " %dK avg growth (per run) / %dK used (after %d runs)\n", average, total.last, iterations
+ end
+end
+
# ==========================================================
# Rubyforge
# ==========================================================
-task 'release' => [ "pkg/rpeg-markdown-#{VERS}.gem", "pkg/rpeg-markdown-#{VERS}.tar.gz" ] do |t|
- # "pkg/rpeg-markdown-#{VERS}.gem",
- # "pkg/rpeg-markdown-#{VERS}.tar.gz"
- sh "rubyforge add_release wink rpeg-markdown #{VERS} pkg/rpeg-markdown-#{VERS}.gem"
+PKGNAME = "pkg/rpeg-markdown-#{VERS}"
+
+desc 'Publish new release to rubyforge'
+task :release => [ "#{PKGNAME}.gem", "#{PKGNAME}.tar.gz" ] do |t|
+ sh <<-end
+ rubyforge add_release wink rpeg-markdown #{VERS} #{PKGNAME}.gem &&
+ rubyforge add_file wink rpeg-markdown #{VERS} #{PKGNAME}.tar.gz
+ end
end