From 4f8b300261b28f6affabf89ed14a0f51a9994a01 Mon Sep 17 00:00:00 2001 From: Adam Meehan Date: Fri, 17 Sep 2010 08:58:07 +1000 Subject: [PATCH] update benchmarks --- benchmark.rb | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 benchmark.rb diff --git a/benchmark.rb b/benchmark.rb new file mode 100644 index 0000000..ccf0c55 --- /dev/null +++ b/benchmark.rb @@ -0,0 +1,119 @@ +$:.unshift(File.expand_path('lib')) + +require 'date' +require 'parsedate' +require 'benchmark' +require 'rubygems' +require 'active_record' + +require 'validates_timeliness' + +Time.zone = 'Australia/Melbourne' + +def parse(*args) + ValidatesTimeliness::Parser.parse(*args) +end + +n = 10000 +Benchmark.bm do |x| + x.report('timeliness - datetime') { + n.times do + parse("2000-01-04 12:12:12", :datetime) + end + } + + x.report('timeliness - date') { + n.times do + parse("2000-01-04", :date) + end + } + + x.report('timeliness - date as datetime') { + n.times do + parse("2000-01-04", :datetime) + end + } + + x.report('timeliness - time') { + n.times do + parse("12:01:02", :time) + end + } + + x.report('timeliness - invalid format datetime') { + n.times do + parse("20xx-01-04 12:12:12", :datetime) + end + } + + x.report('timeliness - invalid format date') { + n.times do + parse("20xx-01-04", :date) + end + } + + x.report('timeliness - invalid format time') { + n.times do + parse("12:xx:02", :time) + end + } + + + x.report('timeliness - invalid value datetime') { + n.times do + parse("2000-01-32 12:12:12", :datetime) + end + } + + x.report('timeliness - invalid value date') { + n.times do + parse("2000-01-32", :date) + end + } + + x.report('timeliness - invalid value time') { + n.times do + parse("12:61:02", :time) + end + } + x.report('date/time') { + n.times do + "2000-01-04 12:12:12" =~ /\A(\d{4})-(\d{2})-(\d{2}) (\d{2})[\. :](\d{2})([\. :](\d{2}))?\Z/ + arr = [$1, $2, $3, $3, $5, $6].map {|i| i.to_i } + Date.new(*arr[0..2]) + Time.mktime(*arr) + end + } + + x.report('Date._parse') { + n.times do + Date._parse("2000-01-04 12:12:12") + end + } + + x.report('invalid Date._parse') { + n.times do + Date._parse("2000-01-32 12:12:12") + end + } + + x.report('parsedate') { + n.times do + arr = ParseDate.parsedate("2000-01-04 12:12:12") + Date.new(*arr[0..2]) + Time.mktime(*arr) + end + } + + x.report('invalid parsedate') { + n.times do + arr = ParseDate.parsedate("garbage") + end + } + + x.report('strptime') { + n.times do + DateTime.strptime("2000-01-04 12:12:12", '%Y-%m-%d %H:%M:%s') + end + } +end