File: perf_gen.rb

package info (click to toggle)
ruby-ox 2.14.23-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,504 kB
  • sloc: xml: 39,683; ansic: 9,626; ruby: 6,441; sh: 47; makefile: 2
file content (139 lines) | stat: -rwxr-xr-x 4,048 bytes parent folder | download | duplicates (2)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/env ruby

$: << '.'
$: << '..'
$: << '../lib'
$: << '../ext'

if __FILE__ == $0 && (i = ARGV.index('-I'))
  x = ARGV.slice!(i, 2)
  $: << x[1]
end

require 'optparse'
require 'ox'
require 'sample'
require 'test/ox/doc'
require 'files'
require 'perf'
begin
  require 'nokogiri'
rescue Exception => e
end
begin
  require 'libxml'
rescue Exception => e
end

$verbose = 0
$ox_only = false

do_sample = false
do_files = false
do_load = false
do_dump = false
do_read = false
do_write = false
$iter = 1000

opts = OptionParser.new
opts.on('-v', 'increase verbosity')                         { $verbose += 1 }

opts.on('-x', 'ox only')                                    { $ox_only = true }

opts.on('-s', 'load and dump as sample Ruby object')        { do_sample = true }
opts.on('-f', 'load and dump as files Ruby object')         { do_files = true }

opts.on('-l', 'load')                                       { do_load = true }
opts.on('-d', 'dump')                                       { do_dump = true }
opts.on('-r', 'read')                                       { do_read = true }
opts.on('-w', 'write')                                      { do_write = true }
opts.on('-a', 'load, dump, read and write')                 { do_load = true; do_dump = true; do_read = true; do_write = true }

opts.on('-i', '--iterations [Int]', Integer, 'iterations')  { |it| $iter = it }

opts.on('-h', '--help', 'Show this display')                { puts opts; Process.exit!(0) }
files = opts.parse(ARGV)

Ox.default_options = { mode: :generic }

data = []

if files.empty?
  data = []
  obj = do_sample ? sample_doc(2) : files('..')
  xml = Ox.dump(obj, indent: 2, opt_format: true)
  File.write('sample.xml', xml)
  gen = Ox.parse(xml)
  h = { file: 'sample.xml', xml: xml, ox: gen }
  h[:nokogiri] = Nokogiri::XML::Document.parse(xml) unless defined?(Nokogiri).nil?
  h[:libxml] = LibXML::XML::Document.string(xml) unless defined?(LibXML).nil?
  data << h
else
  puts "loading and parsing #{files}\n\n"
  data = files.map do |f|
    xml = File.read(f)
    obj = Ox.parse(xml)
    gen = Ox.parse(xml)
    h = { file: f, xml: xml, ox: gen }
    h[:nokogiri] = Nokogiri::XML::Document.parse(xml) unless defined?(Nokogiri).nil?
    h[:libxml] = LibXML::XML::Document.string(xml) unless defined?(LibXML).nil?
    h
  end
end

data.each do |d|
  if do_load
    perf = Perf.new
    perf.add('Ox', 'parse') { Ox.parse(xml) }
    perf.add('Nokogiri', 'parse') { Nokogiri::XML::Document.parse(xml) } unless defined?(Nokogiri).nil?
    perf.add('LibXML', 'parse') { LibXML::XML::Document.string(xml) } unless defined?(LibXML).nil?
    perf.run($iter)
  end

  if do_dump
    perf = Perf.new
    perf.add('Ox', 'dump') { Ox.dump($obj, indent: 2) }
    perf.before('Ox') { $obj = d[:ox] }
    unless defined?(Nokogiri).nil?
      perf.add('Nokogiri', 'dump') { $obj.to_xml(indent: 2) }
      perf.before('Nokogiri') { $obj = d[:nokogiri] }
    end
    unless defined?(LibXML).nil?
      perf.add('LibXML', 'dump') { $obj.to_s }
      perf.before('LibXML') { $obj = d[:libxml] }
    end
    perf.run($iter)
  end

  if do_read
    $filename = d[:file]
    perf = Perf.new
    perf.add('Ox', 'load_file') { Ox.load_file($filename) }
    perf.add('Nokogiri', 'parse') { Nokogiri::XML::Document.parse(File.open($filename)) } unless defined?(Nokogiri).nil?
    perf.add('LibXML', 'parse') { LibXML::XML::Document.file($filename) } unless defined?(LibXML).nil?
    perf.run($iter)
  end

  next unless do_write

  $filename = 'out.xml'
  perf = Perf.new
  perf.add('Ox', 'to_file') { Ox.to_file($filename, $obj, indent: 0) }
  perf.before('Ox') { $obj = d[:ox] }
  unless defined?(Nokogiri).nil?
    perf.add('Nokogiri', 'dump') do
      xml = $obj.to_xml(indent: 0)
      File.write($filename, xml)
    end
  end
  perf.before('Nokogiri') { $obj = d[:nokogiri] }
  unless defined?(LibXML).nil?
    perf.add('LibXML', 'dump') do
      xml = $obj.to_s
      File.write($filename, xml)
    end
    perf.before('LibXML') { $obj = d[:libxml] }
  end
  perf.run($iter)
end