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