Sutto / marvin

A Ruby IRC library built on EventMachine

This URL has Read+Write access

marvin / test / parser_comparison.rb
100644 63 lines (53 sloc) 1.618 kb
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
require 'benchmark'
require File.join(File.dirname(__FILE__),'../lib/marvin')
 
LINES = [
  ":irc.darth.vpn.spork.in 366 testbot #testing :End of NAMES list",
  ":Helsinki.FI.EU.Undernet.org PONG Helsinki.FI.EU.Undernet.org :Helsinki.FI.EU.Undernet.org",
  ":testnick USER guest tolmoon tolsun :Ronnie Reagan",
  "LIST #twilight_zone,#42",
  ":WiZ LINKS *.bu.edu *.edu",
  ":Angel PRIVMSG Wiz :Hello are you receiving this message ?",
  ":RelayBot!n=MarvinBo@203.161.81.201.static.amnet.net.au JOIN :#relayrelay",
  ":SuttoL!n=SuttoL@li6-47.members.linode.com PRIVMSG #relayrelay :testing...",
  ":wolfe.freenode.net 004 MarvinBot3000 wolfe.freenode.net hyperion-1.0.2b aAbBcCdDeEfFGhHiIjkKlLmMnNopPQrRsStTuUvVwWxXyYzZ01234569*@ bcdefFhiIklmnoPqstv"
]
PARSERS = [Marvin::Parsers::RagelParser, Marvin::Parsers::SimpleParser, Marvin::Parsers::RegexpParser]
 
LINES.each do |line|
  
  puts "Processing: #{line}"
  puts ""
  cmd = []
  
  PARSERS.each do |p|
    parser = p.new(line)
    ev = parser.to_event
    puts "Parser: #{p.name}"
    if ev.nil?
      puts "Unknown Event"
    else
      puts ev.to_hash.inspect
    end
    puts ""
  end
  puts ""
  
end
 
puts ""
puts ""
puts "==============="
puts "| SPEED TESTS |"
puts "==============="
puts ""
 
width = PARSERS.map { |p| p.name.length }.max + 2
 
ITERATIONS = 1000
 
Benchmark.bm(width) do |b|
  PARSERS.each do |parser|
    b.report("#{parser.name}: ") do
      LINES.each do |l|
        ITERATIONS.times do
          e = parser.new(l).to_event
          unless e.nil?
            e.to_hash # Get a hash
          end
        end
      end
    end
  end
end