oj 2.9.9 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of oj might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/README.md +10 -23
- data/ext/oj/compat.c +14 -8
- data/ext/oj/dump.c +2 -2
- data/ext/oj/object.c +39 -28
- data/ext/oj/oj.c +3 -1
- data/ext/oj/oj.h +1 -0
- data/ext/oj/parse.c +25 -16
- data/ext/oj/parse.h +4 -3
- data/ext/oj/scp.c +29 -15
- data/ext/oj/sparse.c +13 -7
- data/ext/oj/strict.c +17 -8
- data/ext/oj/val_stack.c +1 -0
- data/ext/oj/val_stack.h +3 -1
- data/lib/oj/schandler.rb +11 -0
- data/lib/oj/version.rb +1 -1
- data/test/bug.rb +40 -51
- data/test/bug2.rb +10 -0
- data/test/io.rb +48 -0
- data/test/struct.rb +29 -0
- data/test/test_compat.rb +2 -0
- data/test/test_file.rb +2 -0
- data/test/test_object.rb +2 -0
- data/test/test_scp.rb +42 -5
- data/test/test_strict.rb +2 -0
- data/test/test_various.rb +2 -0
- data/test/write_timebars.rb +31 -0
- data/test/zip.rb +34 -0
- metadata +89 -104
- data/test/perf1.rb +0 -64
- data/test/perf2.rb +0 -76
- data/test/perf_obj_old.rb +0 -213
    
        data/test/perf_obj_old.rb
    DELETED
    
    | @@ -1,213 +0,0 @@ | |
| 1 | 
            -
            #!/usr/bin/env ruby -wW1
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            $: << '.'
         | 
| 4 | 
            -
            $: << '..'
         | 
| 5 | 
            -
            $: << '../lib'
         | 
| 6 | 
            -
            $: << '../ext'
         | 
| 7 | 
            -
             | 
| 8 | 
            -
            if __FILE__ == $0
         | 
| 9 | 
            -
              if (i = ARGV.index('-I'))
         | 
| 10 | 
            -
                x,path = ARGV.slice!(i, 2)
         | 
| 11 | 
            -
                $: << path
         | 
| 12 | 
            -
              end
         | 
| 13 | 
            -
            end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            require 'optparse'
         | 
| 16 | 
            -
            require 'ox'
         | 
| 17 | 
            -
            require 'oj'
         | 
| 18 | 
            -
            require 'perf'
         | 
| 19 | 
            -
            require 'sample'
         | 
| 20 | 
            -
            require 'files'
         | 
| 21 | 
            -
             | 
| 22 | 
            -
            $verbose = 0
         | 
| 23 | 
            -
            $circular = false
         | 
| 24 | 
            -
            $indent = 0
         | 
| 25 | 
            -
             | 
| 26 | 
            -
            do_sample = false
         | 
| 27 | 
            -
            do_files = false
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            do_load = false
         | 
| 30 | 
            -
            do_dump = false
         | 
| 31 | 
            -
            do_read = false
         | 
| 32 | 
            -
            do_write = false
         | 
| 33 | 
            -
            $iter = 1000
         | 
| 34 | 
            -
             | 
| 35 | 
            -
            opts = OptionParser.new
         | 
| 36 | 
            -
            opts.on("-v", "increase verbosity")                         { $verbose += 1 }
         | 
| 37 | 
            -
             | 
| 38 | 
            -
            opts.on("-c", "circular options")                           { $circular = true }
         | 
| 39 | 
            -
             | 
| 40 | 
            -
            opts.on("-s", "load and dump as sample Ruby object")        { do_sample = true }
         | 
| 41 | 
            -
            opts.on("-f", "load and dump as files Ruby object")         { do_files = true }
         | 
| 42 | 
            -
             | 
| 43 | 
            -
            opts.on("-l", "load")                                       { do_load = true }
         | 
| 44 | 
            -
            opts.on("-d", "dump")                                       { do_dump = true }
         | 
| 45 | 
            -
            opts.on("-r", "read")                                       { do_read = true }
         | 
| 46 | 
            -
            opts.on("-w", "write")                                      { do_write = true }
         | 
| 47 | 
            -
            opts.on("-a", "load, dump, read and write")                 { do_load = true; do_dump = true; do_read = true; do_write = true }
         | 
| 48 | 
            -
             | 
| 49 | 
            -
            opts.on("-i", "--iterations [Int]", Integer, "iterations")  { |i| $iter = i }
         | 
| 50 | 
            -
             | 
| 51 | 
            -
            opts.on("-h", "--help", "Show this display")                { puts opts; Process.exit!(0) }
         | 
| 52 | 
            -
            files = opts.parse(ARGV)
         | 
| 53 | 
            -
             | 
| 54 | 
            -
            if files.empty?
         | 
| 55 | 
            -
              data = []
         | 
| 56 | 
            -
              obj = do_sample ? sample_doc(2) : files('..')
         | 
| 57 | 
            -
              mars = Marshal.dump(obj)
         | 
| 58 | 
            -
              xml = Ox.dump(obj, :indent => $indent, circular: $circular)
         | 
| 59 | 
            -
              json = Oj.dump(obj, :indent => $indent, circular: $circular)
         | 
| 60 | 
            -
              File.open('sample.xml', 'w') { |f| f.write(xml) }
         | 
| 61 | 
            -
              File.open('sample.json', 'w') { |f| f.write(json) }
         | 
| 62 | 
            -
              File.open('sample.marshal', 'w') { |f| f.write(mars) }
         | 
| 63 | 
            -
              data << { :file => 'sample.xml', :obj => obj, :xml => xml, :marshal => mars, :json => json }
         | 
| 64 | 
            -
            else
         | 
| 65 | 
            -
              puts "loading and parsing #{files}\n\n"
         | 
| 66 | 
            -
              # TBD change to allow xml and json
         | 
| 67 | 
            -
              data = files.map do |f|
         | 
| 68 | 
            -
                xml = File.read(f)
         | 
| 69 | 
            -
                obj = Ox.load(xml);
         | 
| 70 | 
            -
                mars = Marshal.dump(obj)
         | 
| 71 | 
            -
                json = Oj.dump(obj, :indent => $indent, circular: $circular)
         | 
| 72 | 
            -
                { :file => f, :obj => obj, :xml => xml, :marshal => mars, :json => json }
         | 
| 73 | 
            -
              end
         | 
| 74 | 
            -
            end
         | 
| 75 | 
            -
             | 
| 76 | 
            -
            $ox_load_time = 0
         | 
| 77 | 
            -
            $mars_load_time = 0
         | 
| 78 | 
            -
            $ox_dump_time = 0
         | 
| 79 | 
            -
            $oj_dump_time = 0
         | 
| 80 | 
            -
            $mars_dump_time = 0
         | 
| 81 | 
            -
             | 
| 82 | 
            -
            def perf_load(d)
         | 
| 83 | 
            -
              filename = d[:file]
         | 
| 84 | 
            -
              marshal_filename = 'sample.marshal'
         | 
| 85 | 
            -
              xml = d[:xml]
         | 
| 86 | 
            -
              mars = d[:marshal]
         | 
| 87 | 
            -
              json = d[:json]
         | 
| 88 | 
            -
             | 
| 89 | 
            -
              if 0 < $verbose
         | 
| 90 | 
            -
                obj = Ox.load(xml, :mode => :object, :trace => $verbose)
         | 
| 91 | 
            -
                return
         | 
| 92 | 
            -
              end
         | 
| 93 | 
            -
              start = Time.now
         | 
| 94 | 
            -
              (1..$iter).each do
         | 
| 95 | 
            -
                obj = Ox.load(xml, :mode => :object)
         | 
| 96 | 
            -
              end
         | 
| 97 | 
            -
              $ox_load_time = Time.now - start
         | 
| 98 | 
            -
              puts "Parsing #{$iter} times with Ox took #{$ox_load_time} seconds."
         | 
| 99 | 
            -
             | 
| 100 | 
            -
              start = Time.now
         | 
| 101 | 
            -
              (1..$iter).each do
         | 
| 102 | 
            -
                obj = Oj.load(json, :mode => :object)
         | 
| 103 | 
            -
              end
         | 
| 104 | 
            -
              $oj_load_time = Time.now - start
         | 
| 105 | 
            -
              puts "Parsing #{$iter} times with Oj took #{$oj_load_time} seconds."
         | 
| 106 | 
            -
              
         | 
| 107 | 
            -
              start = Time.now
         | 
| 108 | 
            -
              (1..$iter).each do
         | 
| 109 | 
            -
                obj = Marshal.load(mars)
         | 
| 110 | 
            -
              end
         | 
| 111 | 
            -
              $mars_load_time = Time.now - start
         | 
| 112 | 
            -
              puts "Marshalling #{$iter} times took #{$mars_load_time} seconds."
         | 
| 113 | 
            -
              puts ">>> Ox is %0.1f faster than Marshal loading.\n\n" % [$mars_load_time/$ox_load_time]
         | 
| 114 | 
            -
            end
         | 
| 115 | 
            -
             | 
| 116 | 
            -
            def perf_dump(d)
         | 
| 117 | 
            -
              obj = d[:obj]
         | 
| 118 | 
            -
             | 
| 119 | 
            -
              start = Time.now
         | 
| 120 | 
            -
              (1..$iter).each do
         | 
| 121 | 
            -
                xml = Ox.dump(obj, :indent => $indent, :circular => $circular)
         | 
| 122 | 
            -
                #puts "*** ox:\n#{xml}"
         | 
| 123 | 
            -
              end
         | 
| 124 | 
            -
              $ox_dump_time = Time.now - start
         | 
| 125 | 
            -
              puts "Ox dumping #{$iter} times with ox took #{$ox_dump_time} seconds."
         | 
| 126 | 
            -
             | 
| 127 | 
            -
              Oj.default_options = {:indent => $indent}
         | 
| 128 | 
            -
              start = Time.now
         | 
| 129 | 
            -
              (1..$iter).each do
         | 
| 130 | 
            -
                json = Oj.dump(obj)
         | 
| 131 | 
            -
              end
         | 
| 132 | 
            -
              $oj_dump_time = Time.now - start
         | 
| 133 | 
            -
              puts "Oj dumping #{$iter} times with oj took #{$oj_dump_time} seconds."
         | 
| 134 | 
            -
             | 
| 135 | 
            -
              obj = d[:obj]
         | 
| 136 | 
            -
              start = Time.now
         | 
| 137 | 
            -
              (1..$iter).each do
         | 
| 138 | 
            -
                m = Marshal.dump(obj)
         | 
| 139 | 
            -
              end
         | 
| 140 | 
            -
              $mars_dump_time = Time.now - start
         | 
| 141 | 
            -
              puts "Marshal dumping #{$iter} times took #{$mars_dump_time} seconds."
         | 
| 142 | 
            -
              puts ">>> Ox is %0.1f faster than Marshal dumping.\n\n" % [$mars_dump_time/$ox_dump_time]
         | 
| 143 | 
            -
            end
         | 
| 144 | 
            -
             | 
| 145 | 
            -
            def perf_read(d)
         | 
| 146 | 
            -
              ox_read_time = 0
         | 
| 147 | 
            -
              mars_read_time = 0
         | 
| 148 | 
            -
             | 
| 149 | 
            -
              filename = d[:file]
         | 
| 150 | 
            -
              marshal_filename = 'sample.marshal'
         | 
| 151 | 
            -
              xml = d[:xml]
         | 
| 152 | 
            -
              mars = d[:marshal]
         | 
| 153 | 
            -
             | 
| 154 | 
            -
              # now load from the file
         | 
| 155 | 
            -
              start = Time.now
         | 
| 156 | 
            -
              (1..$iter).each do
         | 
| 157 | 
            -
                obj = Ox.load_file(filename, :mode => :object)
         | 
| 158 | 
            -
              end
         | 
| 159 | 
            -
              ox_read_time = Time.now - start
         | 
| 160 | 
            -
              puts "Loading and parsing #{$iter} times with ox took #{ox_read_time} seconds."
         | 
| 161 | 
            -
             | 
| 162 | 
            -
              start = Time.now
         | 
| 163 | 
            -
              (1..$iter).each do
         | 
| 164 | 
            -
                m = File.read(marshal_filename)
         | 
| 165 | 
            -
                obj = Marshal.load(m)
         | 
| 166 | 
            -
              end
         | 
| 167 | 
            -
              mars_read_time = Time.now - start
         | 
| 168 | 
            -
              puts "Reading and marshalling #{$iter} times took #{mars_read_time} seconds."
         | 
| 169 | 
            -
              puts ">>> Ox is %0.1f faster than Marshal loading and parsing.\n\n" % [mars_read_time/ox_read_time]
         | 
| 170 | 
            -
             | 
| 171 | 
            -
            end
         | 
| 172 | 
            -
             | 
| 173 | 
            -
            def perf_write(d)
         | 
| 174 | 
            -
              ox_write_time = 0
         | 
| 175 | 
            -
              mars_write_time = 0
         | 
| 176 | 
            -
              
         | 
| 177 | 
            -
              ox_filename = 'out.xml'
         | 
| 178 | 
            -
              marshal_filename = 'out.marshal'
         | 
| 179 | 
            -
              obj = d[:obj]
         | 
| 180 | 
            -
             | 
| 181 | 
            -
              start = Time.now
         | 
| 182 | 
            -
              (1..$iter).each do
         | 
| 183 | 
            -
                xml = Ox.to_file(ox_filename, obj, :indent => $indent)
         | 
| 184 | 
            -
              end
         | 
| 185 | 
            -
              ox_write_time = Time.now - start
         | 
| 186 | 
            -
              puts "Ox dumping #{$iter} times with ox took #{ox_write_time} seconds."
         | 
| 187 | 
            -
             | 
| 188 | 
            -
              start = Time.now
         | 
| 189 | 
            -
              (1..$iter).each do
         | 
| 190 | 
            -
                m = Marshal.dump(obj, circular: $circular)
         | 
| 191 | 
            -
                File.open(marshal_filename, "w") { |f| f.write(m) }
         | 
| 192 | 
            -
              end
         | 
| 193 | 
            -
              mars_write_time = Time.now - start
         | 
| 194 | 
            -
              puts "Marshal dumping and writing #{$iter} times took #{mars_write_time} seconds."
         | 
| 195 | 
            -
              puts ">>> Ox is %0.1f faster than Marshal dumping.\n\n" % [mars_write_time/ox_write_time]
         | 
| 196 | 
            -
             | 
| 197 | 
            -
            end
         | 
| 198 | 
            -
             | 
| 199 | 
            -
            #if do_sample or do_files
         | 
| 200 | 
            -
              data.each do |d|
         | 
| 201 | 
            -
                puts "Using file #{d[:file]}."
         | 
| 202 | 
            -
                
         | 
| 203 | 
            -
                perf_load(d) if do_load
         | 
| 204 | 
            -
                perf_dump(d) if do_dump
         | 
| 205 | 
            -
                if do_load and do_dump
         | 
| 206 | 
            -
                  puts ">>> Ox is %0.1f faster than Marshal dumping and loading.\n\n" % [($mars_load_time + $mars_dump_time)/($ox_load_time + $ox_dump_time)] unless 0 == $mars_load_time
         | 
| 207 | 
            -
                end
         | 
| 208 | 
            -
             | 
| 209 | 
            -
                perf_read(d) if do_read
         | 
| 210 | 
            -
                perf_write(d) if do_write
         | 
| 211 | 
            -
             | 
| 212 | 
            -
              end
         | 
| 213 | 
            -
            #end
         |