oj 3.14.3 → 3.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/ext/oj/custom.c +5 -15
  4. data/ext/oj/dump.c +27 -2
  5. data/ext/oj/mimic_json.c +21 -0
  6. data/ext/oj/object.c +7 -21
  7. data/ext/oj/oj.c +20 -0
  8. data/ext/oj/oj.h +3 -0
  9. data/ext/oj/strict.c +9 -27
  10. data/ext/oj/wab.c +9 -27
  11. data/lib/oj/version.rb +1 -1
  12. data/lib/oj.rb +3 -0
  13. data/pages/Options.md +4 -0
  14. data/test/_test_active.rb +8 -8
  15. data/test/_test_active_mimic.rb +7 -7
  16. data/test/_test_mimic_rails.rb +17 -19
  17. data/test/files.rb +14 -14
  18. data/test/foo.rb +5 -5
  19. data/test/helper.rb +4 -4
  20. data/test/mem.rb +8 -7
  21. data/test/perf.rb +21 -26
  22. data/test/perf_compat.rb +30 -32
  23. data/test/perf_dump.rb +25 -25
  24. data/test/perf_fast.rb +80 -82
  25. data/test/perf_file.rb +27 -29
  26. data/test/perf_object.rb +65 -68
  27. data/test/perf_once.rb +8 -7
  28. data/test/perf_parser.rb +40 -46
  29. data/test/perf_saj.rb +46 -53
  30. data/test/perf_scp.rb +57 -69
  31. data/test/perf_simple.rb +40 -38
  32. data/test/perf_strict.rb +68 -70
  33. data/test/perf_wab.rb +67 -69
  34. data/test/prec.rb +3 -3
  35. data/test/sample.rb +16 -15
  36. data/test/sample_json.rb +8 -7
  37. data/test/test_compat.rb +44 -46
  38. data/test/test_custom.rb +56 -42
  39. data/test/test_debian.rb +6 -9
  40. data/test/test_fast.rb +78 -72
  41. data/test/test_file.rb +16 -21
  42. data/test/test_gc.rb +5 -5
  43. data/test/test_generate.rb +5 -5
  44. data/test/test_hash.rb +4 -4
  45. data/test/test_integer_range.rb +9 -9
  46. data/test/test_null.rb +18 -20
  47. data/test/test_object.rb +76 -86
  48. data/test/test_parser.rb +4 -4
  49. data/test/test_parser_debug.rb +4 -4
  50. data/test/test_parser_saj.rb +31 -31
  51. data/test/test_parser_usual.rb +3 -3
  52. data/test/test_rails.rb +2 -2
  53. data/test/test_saj.rb +8 -8
  54. data/test/test_scp.rb +29 -29
  55. data/test/test_strict.rb +25 -31
  56. data/test/test_various.rb +121 -75
  57. data/test/test_wab.rb +43 -42
  58. data/test/test_writer.rb +46 -46
  59. data/test/tests.rb +7 -7
  60. data/test/tests_mimic.rb +6 -6
  61. data/test/tests_mimic_addition.rb +6 -6
  62. metadata +3 -6
  63. data/test/bar.rb +0 -11
  64. data/test/baz.rb +0 -16
  65. data/test/bug.rb +0 -16
  66. data/test/zoo.rb +0 -13
data/test/perf_parser.rb CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: UTF-8
2
+ # frozen_string_literal: true
3
3
 
4
- $: << '.'
5
- $: << File.join(File.dirname(__FILE__), "../lib")
6
- $: << File.join(File.dirname(__FILE__), "../ext")
4
+ $LOAD_PATH << '.'
5
+ $LOAD_PATH << File.join(__dir__, '../lib')
6
+ $LOAD_PATH << File.join(__dir__, '../ext')
7
7
 
8
8
  require 'optparse'
9
9
  require 'perf'
@@ -18,26 +18,26 @@ $cache_keys = true
18
18
  $symbol_keys = false
19
19
 
20
20
  opts = OptionParser.new
21
- opts.on("-v", "verbose") { $verbose = true }
22
- opts.on("-c", "--count [Int]", Integer, "iterations") { |i| $iter = i }
23
- opts.on("-s", "--size [Int]", Integer, "size (~Kbytes)") { |i| $size = i }
24
- opts.on("-b", "with bignum") { $with_bignum = true }
25
- opts.on("-k", "no cache") { $cache_keys = false }
26
- opts.on("-sym", "symbol keys") { $symbol_keys = true }
27
- opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
28
- files = opts.parse(ARGV)
21
+ opts.on('-v', 'verbose') { $verbose = true }
22
+ opts.on('-c', '--count [Int]', Integer, 'iterations') { |i| $iter = i }
23
+ opts.on('-s', '--size [Int]', Integer, 'size (~Kbytes)') { |i| $size = i }
24
+ opts.on('-b', 'with bignum') { $with_bignum = true }
25
+ opts.on('-k', 'no cache') { $cache_keys = false }
26
+ opts.on('-sym', 'symbol keys') { $symbol_keys = true }
27
+ opts.on('-h', '--help', 'Show this display') { puts opts; Process.exit!(0) }
28
+ opts.parse(ARGV)
29
29
 
30
30
  $obj = {
31
31
  'a' => 'Alpha', # string
32
32
  'b' => true, # boolean
33
- 'c' => 12345, # number
34
- 'd' => [ true, [false, [-123456789, nil], 3.9676, ['Something else.', false, 1, nil], nil]], # mix it up array
33
+ 'c' => 12_345, # number
34
+ 'd' => [ true, [false, [-123_456_789, nil], 3.9676, ['Something else.', false, 1, nil], nil]], # mix it up array
35
35
  'e' => { 'zero' => nil, 'one' => 1, 'two' => 2, 'three' => [3], 'four' => [0, 1, 2, 3, 4] }, # hash
36
36
  'f' => nil, # nil
37
37
  'h' => { 'a' => { 'b' => { 'c' => { 'd' => {'e' => { 'f' => { 'g' => nil }}}}}}}, # deep hash, not that deep
38
38
  'i' => [[[[[[[nil]]]]]]] # deep array, again, not that deep
39
39
  }
40
- $obj['g'] = 12345678901234567890123456789 if $with_bignum
40
+ $obj['g'] = 12_345_678_901_234_567_890_123_456_789 if $with_bignum
41
41
 
42
42
  if 0 < $size
43
43
  o = $obj
@@ -50,16 +50,14 @@ end
50
50
  $json = Oj.dump($obj)
51
51
  $failed = {} # key is same as String used in tests later
52
52
  Oj.default_options = {create_id: '^', create_additions: true, class_cache: true}
53
- if $cache_keys
54
- Oj.default_options = {cache_keys: true, cache_str: 6, symbol_keys: $symbol_keys}
55
- else
56
- Oj.default_options = {cache_keys: false, cache_str: -1, symbol_keys: $symbol_keys}
57
- end
53
+ Oj.default_options = if $cache_keys
54
+ {cache_keys: true, cache_str: 6, symbol_keys: $symbol_keys}
55
+ else
56
+ {cache_keys: false, cache_str: -1, symbol_keys: $symbol_keys}
57
+ end
58
58
  JSON.parser = JSON::Ext::Parser
59
59
 
60
60
  class AllSaj
61
- def initialize()
62
- end
63
61
 
64
62
  def hash_start(key)
65
63
  end
@@ -77,12 +75,7 @@ class AllSaj
77
75
  end
78
76
  end # AllSaj
79
77
 
80
- class NoSaj
81
- def initialize()
82
- end
83
- end # NoSaj
84
-
85
- no_handler = NoSaj.new()
78
+ no_handler = Object.new()
86
79
  all_handler = AllSaj.new()
87
80
 
88
81
  if $verbose
@@ -93,7 +86,7 @@ end
93
86
  p_val = Oj::Parser.new(:validate)
94
87
 
95
88
  puts '-' * 80
96
- puts "Validate Performance"
89
+ puts 'Validate Performance'
97
90
  perf = Perf.new()
98
91
  perf.add('Oj::Parser.validate', 'none') { p_val.parse($json) }
99
92
  perf.add('Oj::Saj.none', 'none') { Oj.saj_parse(no_handler, $json) }
@@ -106,7 +99,7 @@ p_all.cache_keys = $cache_keys
106
99
  p_all.cache_strings = 6
107
100
 
108
101
  puts '-' * 80
109
- puts "Parse Callback Performance"
102
+ puts 'Parse Callback Performance'
110
103
  perf = Perf.new()
111
104
  perf.add('Oj::Parser.saj', 'all') { p_all.parse($json) }
112
105
  perf.add('Oj::Saj.all', 'all') { Oj.saj_parse(all_handler, $json) }
@@ -119,11 +112,11 @@ p_usual.cache_strings = ($cache_keys ? 6 : 0)
119
112
  p_usual.symbol_keys = $symbol_keys
120
113
 
121
114
  puts '-' * 80
122
- puts "Parse Usual Performance"
115
+ puts 'Parse Usual Performance'
123
116
  perf = Perf.new()
124
117
  perf.add('Oj::Parser.usual', '') { p_usual.parse($json) }
125
118
  perf.add('Oj::strict_load', '') { Oj.strict_load($json) }
126
- perf.add('JSON::Ext', 'parse') { JSON.load($json) }
119
+ perf.add('JSON::Ext', 'parse') { JSON.parse($json) }
127
120
  perf.run($iter)
128
121
 
129
122
  ### Usual Objects ######################
@@ -134,18 +127,19 @@ perf.run($iter)
134
127
 
135
128
  class Stuff
136
129
  attr_accessor :alpha, :bravo, :charlie, :delta, :echo, :foxtrot, :golf, :hotel, :india, :juliet
130
+
137
131
  def self.json_create(arg)
138
- obj = self.new
139
- obj.alpha = arg["alpha"]
140
- obj.bravo = arg["bravo"]
141
- obj.charlie = arg["charlie"]
142
- obj.delta = arg["delta"]
143
- obj.echo = arg["echo"]
144
- obj.foxtrot = arg["foxtrot"]
145
- obj.golf = arg["golf"]
146
- obj.hotel = arg["hotel"]
147
- obj.india = arg["india"]
148
- obj.juliet = arg["juliet"]
132
+ obj = new
133
+ obj.alpha = arg['alpha']
134
+ obj.bravo = arg['bravo']
135
+ obj.charlie = arg['charlie']
136
+ obj.delta = arg['delta']
137
+ obj.echo = arg['echo']
138
+ obj.foxtrot = arg['foxtrot']
139
+ obj.golf = arg['golf']
140
+ obj.hotel = arg['hotel']
141
+ obj.india = arg['india']
142
+ obj.juliet = arg['juliet']
149
143
  obj
150
144
  end
151
145
  end
@@ -175,15 +169,15 @@ p_usual.ignore_json_create = true
175
169
  JSON.create_id = '^'
176
170
 
177
171
  puts '-' * 80
178
- puts "Parse Usual Object Performance"
172
+ puts 'Parse Usual Object Performance'
179
173
  perf = Perf.new()
180
174
  perf.add('Oj::Parser.usual', '') { p_usual.parse($obj_json) }
181
175
  perf.add('Oj::compat_load', '') { Oj.compat_load($obj_json) }
182
- perf.add('JSON::Ext', 'parse') { JSON.load($obj_json) }
176
+ perf.add('JSON::Ext', 'parse') { JSON.parse($obj_json) }
183
177
 
184
178
  perf.run($iter)
185
179
 
186
180
  unless $failed.empty?
187
- puts "The following packages were not included for the reason listed"
181
+ puts 'The following packages were not included for the reason listed'
188
182
  $failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
189
183
  end
data/test/perf_saj.rb CHANGED
@@ -1,40 +1,37 @@
1
1
  #!/usr/bin/env ruby -wW1
2
- # encoding: UTF-8
2
+ # frozen_string_literal: true
3
3
 
4
- $: << '.'
5
- $: << File.join(File.dirname(__FILE__), "../lib")
6
- $: << File.join(File.dirname(__FILE__), "../ext")
4
+ $LOAD_PATH << '.'
5
+ $LOAD_PATH << File.join(__dir__, '../lib')
6
+ $LOAD_PATH << File.join(__dir__, '../ext')
7
7
 
8
8
  require 'optparse'
9
- require 'yajl'
9
+ # require 'yajl'
10
10
  require 'perf'
11
11
  require 'json'
12
12
  require 'json/ext'
13
13
  require 'oj'
14
14
 
15
- $verbose = false
16
- $indent = 0
17
- $iter = 10000
18
- $gets = 0
19
- $fetch = false
20
- $write = false
21
- $read = false
15
+ @verbose = false
16
+ @indent = 0
17
+ @iter = 10_000
18
+ @gets = 0
19
+ @fetch = false
20
+ @write = false
21
+ @read = false
22
22
 
23
23
  opts = OptionParser.new
24
- opts.on("-v", "verbose") { $verbose = true }
25
- opts.on("-c", "--count [Int]", Integer, "iterations") { |i| $iter = i }
26
- opts.on("-i", "--indent [Int]", Integer, "indentation") { |i| $indent = i }
27
- opts.on("-g", "--gets [Int]", Integer, "number of gets") { |i| $gets = i }
28
- opts.on("-f", "fetch") { $fetch = true }
29
- opts.on("-w", "write") { $write = true }
30
- opts.on("-r", "read") { $read = true }
31
- opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
32
- files = opts.parse(ARGV)
24
+ opts.on('-v', 'verbose') { @verbose = true }
25
+ opts.on('-c', '--count [Int]', Integer, 'iterations') { |i| @iter = i }
26
+ opts.on('-i', '--indent [Int]', Integer, 'indentation') { |i| @indent = i }
27
+ opts.on('-g', '--gets [Int]', Integer, 'number of gets') { |i| @gets = i }
28
+ opts.on('-f', 'fetch') { @fetch = true }
29
+ opts.on('-w', 'write') { @write = true }
30
+ opts.on('-r', 'read') { @read = true }
31
+ opts.on('-h', '--help', 'Show this display') { puts opts; Process.exit!(0) }
32
+ opts.parse(ARGV)
33
33
 
34
34
  class AllSaj < Oj::Saj
35
- def initialize()
36
- end
37
-
38
35
  def hash_start(key)
39
36
  end
40
37
 
@@ -52,57 +49,53 @@ class AllSaj < Oj::Saj
52
49
  end # AllSaj
53
50
 
54
51
  class NoSaj < Oj::Saj
55
- def initialize()
56
- end
57
52
  end # NoSaj
58
53
 
59
54
  saj_handler = AllSaj.new()
60
55
  no_saj = NoSaj.new()
61
56
 
62
- $obj = {
57
+ @obj = {
63
58
  'a' => 'Alpha', # string
64
59
  'b' => true, # boolean
65
- 'c' => 12345, # number
66
- 'd' => [ true, [false, {'12345' => 12345, 'nil' => nil}, 3.967, { 'x' => 'something', 'y' => false, 'z' => true}, nil]], # mix it up array
60
+ 'c' => 12_345, # number
61
+ 'd' => [ true, [false, {'12345' => 12_345, 'nil' => nil}, 3.967, { 'x' => 'something', 'y' => false, 'z' => true}, nil]], # mix it up array
67
62
  'e' => { 'one' => 1, 'two' => 2 }, # hash
68
63
  'f' => nil, # nil
69
- 'g' => 12345678901234567890123456789, # big number
64
+ 'g' => 12_345_678_901_234_567_890_123_456_789, # big number
70
65
  'h' => { 'a' => { 'b' => { 'c' => { 'd' => {'e' => { 'f' => { 'g' => nil }}}}}}}, # deep hash, not that deep
71
66
  'i' => [[[[[[[nil]]]]]]] # deep array, again, not that deep
72
67
  }
73
68
 
74
- Oj.default_options = { :indent => $indent, :mode => :compat }
69
+ Oj.default_options = { :indent => @indent, :mode => :compat }
75
70
 
76
- $json = Oj.dump($obj)
77
- $failed = {} # key is same as String used in tests later
71
+ @json = Oj.dump(@obj)
72
+ @failed = {} # key is same as String used in tests later
78
73
 
79
74
  def capture_error(tag, orig, load_key, dump_key, &blk)
80
- begin
81
- obj = blk.call(orig)
82
- raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
83
- rescue Exception => e
84
- $failed[tag] = "#{e.class}: #{e.message}"
85
- end
75
+ obj = blk.call(orig)
76
+ raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
77
+ rescue Exception => e
78
+ @failed[tag] = "#{e.class}: #{e.message}"
86
79
  end
87
80
 
88
81
  # Verify that all packages dump and load correctly and return the same Object as the original.
89
- capture_error('Yajl', $obj, 'encode', 'parse') { |o| Yajl::Parser.parse(Yajl::Encoder.encode(o)) }
90
- capture_error('JSON::Ext', $obj, 'generate', 'parse') { |o| JSON.generator = JSON::Ext::Generator; JSON::Ext::Parser.new(JSON.generate(o)).parse }
82
+ # capture_error('Yajl', @obj, 'encode', 'parse') { |o| Yajl::Parser.parse(Yajl::Encoder.encode(o)) }
83
+ capture_error('JSON::Ext', @obj, 'generate', 'parse') { |o| JSON.generator = JSON::Ext::Generator; JSON::Ext::Parser.new(JSON.generate(o)).parse }
91
84
 
92
- if $verbose
93
- puts "json:\n#{$json}\n"
85
+ if @verbose
86
+ puts "json:\n#{@json}\n"
94
87
  end
95
88
 
96
89
  puts '-' * 80
97
- puts "Parse Performance"
90
+ puts 'Parse Performance'
98
91
  perf = Perf.new()
99
- perf.add('Oj::Saj', 'all') { Oj.saj_parse(saj_handler, $json) }
100
- perf.add('Oj::Saj', 'none') { Oj.saj_parse(no_saj, $json) }
101
- perf.add('Yajl', 'parse') { Yajl::Parser.parse($json) } unless $failed.has_key?('Yajl')
102
- perf.add('JSON::Ext', 'parse') { JSON::Ext::Parser.new($json).parse } unless $failed.has_key?('JSON::Ext')
103
- perf.run($iter)
104
-
105
- unless $failed.empty?
106
- puts "The following packages were not included for the reason listed"
107
- $failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
92
+ perf.add('Oj::Saj', 'all') { Oj.saj_parse(saj_handler, @json) }
93
+ perf.add('Oj::Saj', 'none') { Oj.saj_parse(no_saj, @json) }
94
+ # perf.add('Yajl', 'parse') { Yajl::Parser.parse(@json) } unless @failed.has_key?('Yajl')
95
+ perf.add('JSON::Ext', 'parse') { JSON::Ext::Parser.new(@json).parse } unless @failed.key?('JSON::Ext')
96
+ perf.run(@iter)
97
+
98
+ unless @failed.empty?
99
+ puts 'The following packages were not included for the reason listed'
100
+ @failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
108
101
  end
data/test/perf_scp.rb CHANGED
@@ -1,61 +1,58 @@
1
1
  #!/usr/bin/env ruby -wW1
2
- # encoding: UTF-8
2
+ # frozen_string_literal: true
3
3
 
4
- $: << '.'
5
- $: << File.join(File.dirname(__FILE__), "../lib")
6
- $: << File.join(File.dirname(__FILE__), "../ext")
4
+ $LOAD_PATH << '.'
5
+ $LOAD_PATH << File.join(__dir__, '../lib')
6
+ $LOAD_PATH << File.join(__dir__, '../ext')
7
7
 
8
8
  require 'optparse'
9
- require 'yajl'
9
+ # require 'yajl'
10
10
  require 'perf'
11
11
  require 'json'
12
12
  require 'json/ext'
13
13
  require 'oj'
14
14
 
15
- $verbose = false
16
- $indent = 0
17
- $iter = 50_000
18
- $with_bignum = false
19
- $size = 1
15
+ @verbose = false
16
+ @indent = 0
17
+ @iter = 50_000
18
+ @with_bignum = false
19
+ @size = 1
20
20
 
21
21
  opts = OptionParser.new
22
- opts.on("-v", "verbose") { $verbose = true }
23
- opts.on("-c", "--count [Int]", Integer, "iterations") { |i| $iter = i }
24
- opts.on("-i", "--indent [Int]", Integer, "indentation") { |i| $indent = i }
25
- opts.on("-s", "--size [Int]", Integer, "size (~Kbytes)") { |i| $size = i }
26
- opts.on("-b", "with bignum") { $with_bignum = true }
27
- opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
28
- files = opts.parse(ARGV)
29
-
30
- $obj = {
22
+ opts.on('-v', 'verbose') { @verbose = true }
23
+ opts.on('-c', '--count [Int]', Integer, 'iterations') { |i| @iter = i }
24
+ opts.on('-i', '--indent [Int]', Integer, 'indentation') { |i| @indent = i }
25
+ opts.on('-s', '--size [Int]', Integer, 'size (~Kbytes)') { |i| @size = i }
26
+ opts.on('-b', 'with bignum') { @with_bignum = true }
27
+ opts.on('-h', '--help', 'Show this display') { puts opts; Process.exit!(0) }
28
+ opts.parse(ARGV)
29
+
30
+ @obj = {
31
31
  'a' => 'Alpha', # string
32
32
  'b' => true, # boolean
33
- 'c' => 12345, # number
34
- 'd' => [ true, [false, [-123456789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
33
+ 'c' => 12_345, # number
34
+ 'd' => [ true, [false, [-123_456_789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
35
35
  'e' => { 'zero' => nil, 'one' => 1, 'two' => 2, 'three' => [3], 'four' => [0, 1, 2, 3, 4] }, # hash
36
36
  'f' => nil, # nil
37
37
  'h' => { 'a' => { 'b' => { 'c' => { 'd' => {'e' => { 'f' => { 'g' => nil }}}}}}}, # deep hash, not that deep
38
38
  'i' => [[[[[[[nil]]]]]]] # deep array, again, not that deep
39
39
  }
40
- $obj['g'] = 12345678901234567890123456789 if $with_bignum
40
+ @obj['g'] = 12_345_678_901_234_567_890_123_456_789 if @with_bignum
41
41
 
42
- if 0 < $size
43
- o = $obj
44
- $obj = []
45
- (4 * $size).times do
46
- $obj << o
42
+ if 0 < @size
43
+ ob = @obj
44
+ @obj = []
45
+ (4 * @size).times do
46
+ @obj << ob
47
47
  end
48
48
  end
49
49
 
50
- Oj.default_options = { :indent => $indent, :mode => :strict, cache_keys: true, cache_str: 5 }
50
+ Oj.default_options = { :indent => @indent, :mode => :strict, cache_keys: true, cache_str: 5 }
51
51
 
52
- $json = Oj.dump($obj)
53
- $failed = {} # key is same as String used in tests later
52
+ @json = Oj.dump(@obj)
53
+ @failed = {} # key is same as String used in tests later
54
54
 
55
55
  class AllSaj < Oj::Saj
56
- def initialize()
57
- end
58
-
59
56
  def hash_start(key)
60
57
  end
61
58
 
@@ -73,31 +70,24 @@ class AllSaj < Oj::Saj
73
70
  end # AllSaj
74
71
 
75
72
  class NoSaj < Oj::Saj
76
- def initialize()
77
- end
78
73
  end # NoSaj
79
74
 
80
75
  class NoHandler < Oj::ScHandler
81
- def initialize()
82
- end
83
76
  end # NoHandler
84
77
 
85
78
  class AllHandler < Oj::ScHandler
86
- def initialize()
79
+ def hash_start
80
+ nil
87
81
  end
88
82
 
89
- def hash_start()
90
- return nil
83
+ def hash_end
91
84
  end
92
85
 
93
- def hash_end()
86
+ def array_start
87
+ nil
94
88
  end
95
89
 
96
- def array_start()
97
- return nil
98
- end
99
-
100
- def array_end()
90
+ def array_end
101
91
  end
102
92
 
103
93
  def add_value(value)
@@ -118,35 +108,33 @@ sc_handler = AllHandler.new()
118
108
  no_handler = NoHandler.new()
119
109
 
120
110
  def capture_error(tag, orig, load_key, dump_key, &blk)
121
- begin
122
- obj = blk.call(orig)
123
- raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
124
- rescue Exception => e
125
- $failed[tag] = "#{e.class}: #{e.message}"
126
- end
111
+ obj = blk.call(orig)
112
+ raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
113
+ rescue Exception => e
114
+ @failed[tag] = "#{e.class}: #{e.message}"
127
115
  end
128
116
 
129
117
  # Verify that all packages dump and load correctly and return the same Object as the original.
130
- capture_error('Yajl', $obj, 'encode', 'parse') { |o| Yajl::Parser.parse(Yajl::Encoder.encode(o)) }
131
- capture_error('JSON::Ext', $obj, 'generate', 'parse') { |o| JSON.generator = JSON::Ext::Generator; JSON::Ext::Parser.new(JSON.generate(o)).parse }
118
+ # capture_error('Yajl', @obj, 'encode', 'parse') { |o| Yajl::Parser.parse(Yajl::Encoder.encode(o)) }
119
+ capture_error('JSON::Ext', @obj, 'generate', 'parse') { |o| JSON.generator = JSON::Ext::Generator; JSON::Ext::Parser.new(JSON.generate(o)).parse }
132
120
 
133
- if $verbose
134
- puts "json:\n#{$json}\n"
121
+ if @verbose
122
+ puts "json:\n#{@json}\n"
135
123
  end
136
124
 
137
125
  puts '-' * 80
138
- puts "Parse Performance"
126
+ puts 'Parse Performance'
139
127
  perf = Perf.new()
140
- perf.add('Oj::Saj.all', 'all') { Oj.saj_parse(saj_handler, $json) }
141
- perf.add('Oj::Saj.none', 'none') { Oj.saj_parse(no_saj, $json) }
142
- perf.add('Oj::Scp.all', 'all') { Oj.sc_parse(sc_handler, $json) }
143
- perf.add('Oj::Scp.none', 'none') { Oj.sc_parse(no_handler, $json) }
144
- perf.add('Oj::load', 'none') { Oj.wab_load($json) }
145
- perf.add('Yajl', 'parse') { Yajl::Parser.parse($json) } unless $failed.has_key?('Yajl')
146
- perf.add('JSON::Ext', 'parse') { JSON::Ext::Parser.new($json).parse } unless $failed.has_key?('JSON::Ext')
147
- perf.run($iter)
148
-
149
- unless $failed.empty?
150
- puts "The following packages were not included for the reason listed"
151
- $failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
128
+ perf.add('Oj::Saj.all', 'all') { Oj.saj_parse(saj_handler, @json) }
129
+ perf.add('Oj::Saj.none', 'none') { Oj.saj_parse(no_saj, @json) }
130
+ perf.add('Oj::Scp.all', 'all') { Oj.sc_parse(sc_handler, @json) }
131
+ perf.add('Oj::Scp.none', 'none') { Oj.sc_parse(no_handler, @json) }
132
+ perf.add('Oj::load', 'none') { Oj.wab_load(@json) }
133
+ # perf.add('Yajl', 'parse') { Yajl::Parser.parse(@json) } unless @failed.has_key?('Yajl')
134
+ perf.add('JSON::Ext', 'parse') { JSON::Ext::Parser.new(@json).parse } unless @failed.key?('JSON::Ext')
135
+ perf.run(@iter)
136
+
137
+ unless @failed.empty?
138
+ puts 'The following packages were not included for the reason listed'
139
+ @failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
152
140
  end