oj 3.14.3 → 3.15.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.
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