oj 3.13.23 → 3.16.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +81 -0
  3. data/README.md +2 -2
  4. data/ext/oj/buf.h +7 -6
  5. data/ext/oj/cache.c +29 -26
  6. data/ext/oj/cache.h +3 -2
  7. data/ext/oj/cache8.c +10 -9
  8. data/ext/oj/circarray.c +7 -5
  9. data/ext/oj/circarray.h +2 -2
  10. data/ext/oj/code.c +5 -12
  11. data/ext/oj/code.h +2 -2
  12. data/ext/oj/compat.c +20 -60
  13. data/ext/oj/custom.c +26 -59
  14. data/ext/oj/debug.c +3 -9
  15. data/ext/oj/dump.c +103 -53
  16. data/ext/oj/dump.h +1 -4
  17. data/ext/oj/dump_compat.c +557 -592
  18. data/ext/oj/dump_leaf.c +3 -5
  19. data/ext/oj/dump_object.c +42 -48
  20. data/ext/oj/dump_strict.c +10 -22
  21. data/ext/oj/encoder.c +1 -1
  22. data/ext/oj/err.c +2 -13
  23. data/ext/oj/err.h +9 -12
  24. data/ext/oj/extconf.rb +16 -7
  25. data/ext/oj/fast.c +60 -92
  26. data/ext/oj/intern.c +62 -47
  27. data/ext/oj/intern.h +3 -7
  28. data/ext/oj/mem.c +318 -0
  29. data/ext/oj/mem.h +53 -0
  30. data/ext/oj/mimic_json.c +51 -32
  31. data/ext/oj/object.c +33 -43
  32. data/ext/oj/odd.c +8 -6
  33. data/ext/oj/odd.h +4 -4
  34. data/ext/oj/oj.c +243 -212
  35. data/ext/oj/oj.h +83 -81
  36. data/ext/oj/parse.c +94 -148
  37. data/ext/oj/parse.h +21 -24
  38. data/ext/oj/parser.c +80 -67
  39. data/ext/oj/parser.h +7 -8
  40. data/ext/oj/rails.c +70 -92
  41. data/ext/oj/reader.c +9 -14
  42. data/ext/oj/reader.h +4 -2
  43. data/ext/oj/resolve.c +3 -4
  44. data/ext/oj/rxclass.c +6 -5
  45. data/ext/oj/rxclass.h +1 -1
  46. data/ext/oj/saj.c +10 -9
  47. data/ext/oj/saj2.c +37 -49
  48. data/ext/oj/saj2.h +1 -1
  49. data/ext/oj/scp.c +3 -14
  50. data/ext/oj/sparse.c +22 -70
  51. data/ext/oj/stream_writer.c +45 -41
  52. data/ext/oj/strict.c +20 -52
  53. data/ext/oj/string_writer.c +64 -38
  54. data/ext/oj/trace.h +31 -4
  55. data/ext/oj/usual.c +125 -114
  56. data/ext/oj/usual.h +7 -6
  57. data/ext/oj/util.h +1 -1
  58. data/ext/oj/val_stack.c +13 -2
  59. data/ext/oj/val_stack.h +8 -7
  60. data/ext/oj/wab.c +25 -57
  61. data/lib/oj/active_support_helper.rb +1 -3
  62. data/lib/oj/bag.rb +7 -1
  63. data/lib/oj/easy_hash.rb +4 -5
  64. data/lib/oj/error.rb +0 -1
  65. data/lib/oj/json.rb +162 -150
  66. data/lib/oj/mimic.rb +7 -7
  67. data/lib/oj/schandler.rb +5 -4
  68. data/lib/oj/state.rb +8 -5
  69. data/lib/oj/version.rb +1 -2
  70. data/lib/oj.rb +2 -0
  71. data/pages/InstallOptions.md +20 -0
  72. data/pages/Options.md +4 -0
  73. data/test/_test_active.rb +8 -9
  74. data/test/_test_active_mimic.rb +7 -8
  75. data/test/_test_mimic_rails.rb +17 -20
  76. data/test/activerecord/result_test.rb +5 -6
  77. data/test/activesupport6/encoding_test.rb +63 -28
  78. data/test/activesupport7/abstract_unit.rb +4 -1
  79. data/test/activesupport7/encoding_test.rb +72 -22
  80. data/test/files.rb +15 -15
  81. data/test/foo.rb +18 -69
  82. data/test/helper.rb +5 -8
  83. data/test/isolated/shared.rb +3 -2
  84. data/test/json_gem/json_addition_test.rb +2 -2
  85. data/test/json_gem/json_common_interface_test.rb +8 -6
  86. data/test/json_gem/json_encoding_test.rb +0 -0
  87. data/test/json_gem/json_ext_parser_test.rb +1 -0
  88. data/test/json_gem/json_fixtures_test.rb +3 -2
  89. data/test/json_gem/json_generator_test.rb +50 -33
  90. data/test/json_gem/json_generic_object_test.rb +11 -11
  91. data/test/json_gem/json_parser_test.rb +46 -46
  92. data/test/json_gem/json_string_matching_test.rb +9 -9
  93. data/test/mem.rb +13 -12
  94. data/test/perf.rb +21 -26
  95. data/test/perf_compat.rb +31 -33
  96. data/test/perf_dump.rb +28 -28
  97. data/test/perf_fast.rb +80 -82
  98. data/test/perf_file.rb +27 -29
  99. data/test/perf_object.rb +65 -69
  100. data/test/perf_once.rb +12 -11
  101. data/test/perf_parser.rb +42 -48
  102. data/test/perf_saj.rb +46 -54
  103. data/test/perf_scp.rb +57 -69
  104. data/test/perf_simple.rb +41 -39
  105. data/test/perf_strict.rb +68 -70
  106. data/test/perf_wab.rb +67 -69
  107. data/test/prec.rb +5 -5
  108. data/test/sample/change.rb +0 -1
  109. data/test/sample/dir.rb +0 -1
  110. data/test/sample/doc.rb +0 -1
  111. data/test/sample/file.rb +0 -1
  112. data/test/sample/group.rb +0 -1
  113. data/test/sample/hasprops.rb +0 -1
  114. data/test/sample/layer.rb +0 -1
  115. data/test/sample/rect.rb +0 -1
  116. data/test/sample/shape.rb +0 -1
  117. data/test/sample/text.rb +0 -1
  118. data/test/sample.rb +16 -16
  119. data/test/sample_json.rb +8 -8
  120. data/test/test_compat.rb +81 -54
  121. data/test/test_custom.rb +63 -52
  122. data/test/test_debian.rb +7 -10
  123. data/test/test_fast.rb +86 -90
  124. data/test/test_file.rb +24 -29
  125. data/test/test_gc.rb +5 -5
  126. data/test/test_generate.rb +5 -5
  127. data/test/test_hash.rb +4 -4
  128. data/test/test_integer_range.rb +9 -9
  129. data/test/test_null.rb +20 -20
  130. data/test/test_object.rb +92 -87
  131. data/test/test_parser.rb +4 -4
  132. data/test/test_parser_debug.rb +5 -5
  133. data/test/test_parser_saj.rb +27 -25
  134. data/test/test_parser_usual.rb +44 -6
  135. data/test/test_rails.rb +2 -2
  136. data/test/test_saj.rb +10 -8
  137. data/test/test_scp.rb +35 -35
  138. data/test/test_strict.rb +38 -32
  139. data/test/test_various.rb +146 -97
  140. data/test/test_wab.rb +46 -44
  141. data/test/test_writer.rb +63 -47
  142. data/test/tests.rb +7 -7
  143. data/test/tests_mimic.rb +6 -6
  144. data/test/tests_mimic_addition.rb +6 -6
  145. metadata +46 -26
  146. data/test/activesupport4/decoding_test.rb +0 -108
  147. data/test/activesupport4/encoding_test.rb +0 -531
  148. data/test/activesupport4/test_helper.rb +0 -41
  149. data/test/activesupport5/abstract_unit.rb +0 -45
  150. data/test/activesupport5/decoding_test.rb +0 -133
  151. data/test/activesupport5/encoding_test.rb +0 -500
  152. data/test/activesupport5/encoding_test_cases.rb +0 -98
  153. data/test/activesupport5/test_helper.rb +0 -72
  154. data/test/activesupport5/time_zone_test_helpers.rb +0 -39
  155. data/test/bar.rb +0 -11
  156. data/test/baz.rb +0 -16
  157. data/test/bug.rb +0 -16
  158. data/test/zoo.rb +0 -13
data/test/perf_once.rb CHANGED
@@ -1,23 +1,24 @@
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
+ require 'English'
5
+ $LOAD_PATH << '.'
6
+ $LOAD_PATH << File.join(__dir__, '../lib')
7
+ $LOAD_PATH << File.join(__dir__, '../ext')
7
8
 
8
9
  require 'oj'
9
10
 
10
11
  filename = 'tmp.json'
11
- File.open(filename, "w") { |f|
12
+ File.open(filename, 'w') { |f|
12
13
  cnt = 0
13
14
  f.puts('{')
14
15
  ('a'..'z').each { |a|
15
16
  ('a'..'z').each { |b|
16
17
  ('a'..'z').each { |c|
17
- ('a'..'z').each { |d|
18
- f.puts(%|"#{a}#{b}#{c}#{d}":#{cnt},|)
19
- cnt += 1
20
- }
18
+ ('a'..'z').each { |d|
19
+ f.puts(%|"#{a}#{b}#{c}#{d}":#{cnt},|)
20
+ cnt += 1
21
+ }
21
22
  }
22
23
  }
23
24
  }
@@ -25,7 +26,7 @@ File.open(filename, "w") { |f|
25
26
  }
26
27
 
27
28
  def mem
28
- `ps -o rss= -p #{$$}`.to_i
29
+ `ps -o rss= -p #{$PROCESS_ID}`.to_i
29
30
  end
30
31
 
31
32
  Oj.default_options = { mode: :strict, cache_keys: false, cache_str: -1 }
@@ -48,7 +49,7 @@ dur = Time.now - start
48
49
  GC.start
49
50
  puts "second cache duration: #{dur} @ #{mem}"
50
51
 
51
- 10.times{ GC.start }
52
+ 10.times { GC.start }
52
53
  start = Time.now
53
54
  Oj.load_file('tmp.json')
54
55
  dur = Time.now - start
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
@@ -164,7 +158,6 @@ $obj_json = %|{
164
158
  "juliet": "junk"
165
159
  }|
166
160
 
167
-
168
161
  p_usual = Oj::Parser.new(:usual)
169
162
  p_usual.cache_keys = $cache_keys
170
163
  p_usual.cache_strings = ($cache_keys ? 6 : 0)
@@ -176,14 +169,15 @@ p_usual.ignore_json_create = true
176
169
  JSON.create_id = '^'
177
170
 
178
171
  puts '-' * 80
179
- puts "Parse Usual Object Performance"
172
+ puts 'Parse Usual Object Performance'
180
173
  perf = Perf.new()
181
174
  perf.add('Oj::Parser.usual', '') { p_usual.parse($obj_json) }
182
175
  perf.add('Oj::compat_load', '') { Oj.compat_load($obj_json) }
183
- perf.add('JSON::Ext', 'parse') { JSON.load($obj_json) }
176
+ perf.add('JSON::Ext', 'parse') { JSON.parse($obj_json) }
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"
188
- $failed.each { |tag,msg| puts "***** #{tag}: #{msg}" }
181
+ puts 'The following packages were not included for the reason listed'
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,58 +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
-
97
89
  puts '-' * 80
98
- puts "Parse Performance"
90
+ puts 'Parse Performance'
99
91
  perf = Perf.new()
100
- perf.add('Oj::Saj', 'all') { Oj.saj_parse(saj_handler, $json) }
101
- perf.add('Oj::Saj', 'none') { Oj.saj_parse(no_saj, $json) }
102
- perf.add('Yajl', 'parse') { Yajl::Parser.parse($json) } unless $failed.has_key?('Yajl')
103
- perf.add('JSON::Ext', 'parse') { JSON::Ext::Parser.new($json).parse } unless $failed.has_key?('JSON::Ext')
104
- perf.run($iter)
105
-
106
- unless $failed.empty?
107
- puts "The following packages were not included for the reason listed"
108
- $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}" }
109
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