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
|
#!/usr/bin/env ruby
$: << '.'
$: << '..'
$: << '../lib'
$: << '../ext'
if __FILE__ == $0 && (i = ARGV.index('-I'))
x, path = ARGV.slice!(i, 2)
$: << path
end
require 'optparse'
require 'ox'
iter = 5000
opts = OptionParser.new
opts.on('-i', '--iterations [Int]', Integer, 'iterations') { |i| iter = i }
opts.on('-h', '--help', 'Show this display') { puts opts; Process.exit!(0) }
files = opts.parse(ARGV)
module Test
module Ox
class Wrap
attr_accessor :values
def initialize(v=[])
@values = v
end
end
end
end
data = {
Boolean: Test::Ox::Wrap.new,
Fixnum: Test::Ox::Wrap.new,
Float: Test::Ox::Wrap.new,
String: Test::Ox::Wrap.new,
Symbol: Test::Ox::Wrap.new,
Time: Test::Ox::Wrap.new,
Array: Test::Ox::Wrap.new,
Hash: Test::Ox::Wrap.new,
Range: Test::Ox::Wrap.new,
Regexp: Test::Ox::Wrap.new,
Bignum: Test::Ox::Wrap.new,
Complex: Test::Ox::Wrap.new,
Rational: Test::Ox::Wrap.new,
Struct: Test::Ox::Wrap.new,
Class: Test::Ox::Wrap.new,
Object: Test::Ox::Wrap.new
}
s = Struct.new('Zoo', :x, :y, :z)
(1..200).each do |i|
data[:Boolean].values << (0 == (i % 2))
data[:Fixnum].values << ((i - 10) * 101)
data[:Float].values << ((i.to_f - 10.7) * 30.5)
data[:String].values << "String #{i}"
data[:Symbol].values << :"Symbol#{i}"
data[:Time].values << (Time.now + i)
data[:Array].values << []
data[:Hash].values << {}
data[:Range].values << (0..7)
data[:Regexp].values << /^[0-9]/
data[:Bignum].values << (7 ** 55)
data[:Complex].values << Complex(1, 2)
data[:Rational].values << Rational(1, 3)
data[:Struct].values << s.new(1, 3, 5)
data[:Class].values << Test::Ox::Wrap
data[:Object].values << Test::Ox::Wrap.new(i)
end
puts ' load dump'
puts 'type Ox Marshal ratio Ox Marshal ratio'
data.each do |type, a|
# xml = Ox.dump(a, :indent => -1, :xsd_date => true)
xml = Ox.dump(a, indent: -1)
# pp a
# puts xml
start = Time.now
(1..iter).each do
obj = Ox.load(xml, mode: :object)
# pp obj
end
ox_load_time = Time.now - start
m = Marshal.dump(a)
start = Time.now
(1..iter).each do
obj = Marshal.load(m)
end
mars_load_time = Time.now - start
obj = Ox.load(xml, mode: :object)
start = Time.now
(1..iter).each do
xml = Ox.dump(a, indent: -1)
end
ox_dump_time = Time.now - start
start = Time.now
(1..iter).each do
m = Marshal.dump(a)
end
mars_dump_time = Time.now - start
puts format('%8s %6.3f %6.3f %0.1f %6.3f %6.3f %0.1f', type.to_s, ox_load_time, mars_load_time, mars_load_time / ox_load_time, ox_dump_time, mars_dump_time, mars_dump_time / ox_dump_time)
end
|