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_simple.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby -wW1
2
- # encoding: UTF-8
2
+ # frozen_string_literal: true
3
3
 
4
- $: << File.join(File.dirname(__FILE__), "../lib")
5
- $: << File.join(File.dirname(__FILE__), "../ext")
4
+ $LOAD_PATH << File.join(__dir__, '../lib')
5
+ $LOAD_PATH << File.join(__dir__, '../ext')
6
6
 
7
7
  require 'optparse'
8
8
  require 'yajl'
@@ -14,13 +14,14 @@ require 'oj'
14
14
  require 'ox'
15
15
 
16
16
  class Jazz
17
- def initialize()
17
+ def initialize
18
18
  @boolean = true
19
19
  @number = 58
20
- @string = "A string"
20
+ @string = 'A string'
21
21
  @array = [true, false, nil]
22
22
  @hash = { 'one' => 1, 'two' => 2 }
23
23
  end
24
+
24
25
  def to_json(*_args)
25
26
  %{
26
27
  { "boolean":#{@boolean},
@@ -31,7 +32,8 @@ class Jazz
31
32
  }
32
33
  }
33
34
  end
34
- def to_hash()
35
+
36
+ def to_hash
35
37
  { 'boolean' => @boolean,
36
38
  'number' => @number,
37
39
  'string' => @string,
@@ -39,37 +41,38 @@ class Jazz
39
41
  'hash' => @hash,
40
42
  }
41
43
  end
44
+
42
45
  def to_msgpack(out='')
43
46
  to_hash().to_msgpack(out)
44
47
  end
45
48
  end
46
49
 
47
50
  $indent = 2
48
- $iter = 10000
51
+ $iter = 10_000
49
52
  $with_object = true
50
53
  $with_bignum = true
51
54
  $with_nums = true
52
55
 
53
56
  opts = OptionParser.new
54
- opts.on("-c", "--count [Int]", Integer, "iterations") { |i| $iter = i }
55
- opts.on("-i", "--indent [Int]", Integer, "indentation") { |i| $indent = i }
56
- opts.on("-o", "without objects") { $with_object = false }
57
- opts.on("-b", "without bignum") { $with_bignum = false }
58
- opts.on("-n", "without numbers") { $with_nums = false }
59
- opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
60
- files = opts.parse(ARGV)
57
+ opts.on('-c', '--count [Int]', Integer, 'iterations') { |i| $iter = i }
58
+ opts.on('-i', '--indent [Int]', Integer, 'indentation') { |i| $indent = i }
59
+ opts.on('-o', 'without objects') { $with_object = false }
60
+ opts.on('-b', 'without bignum') { $with_bignum = false }
61
+ opts.on('-n', 'without numbers') { $with_nums = false }
62
+ opts.on('-h', '--help', 'Show this display') { puts opts; Process.exit!(0) }
63
+ opts.parse(ARGV)
61
64
 
62
65
  if $with_nums
63
66
  obj = {
64
67
  'a' => 'Alpha',
65
68
  'b' => true,
66
- 'c' => 12345,
67
- 'd' => [ true, [false, [12345, nil], 3.967, ['something', false], nil]],
69
+ 'c' => 12_345,
70
+ 'd' => [ true, [false, [12_345, nil], 3.967, ['something', false], nil]],
68
71
  'e' => { 'one' => 1, 'two' => 2 },
69
72
  'f' => nil,
70
73
  }
71
74
  obj['g'] = Jazz.new() if $with_object
72
- obj['h'] = 12345678901234567890123456789 if $with_bignum
75
+ obj['h'] = 12_345_678_901_234_567_890_123_456_789 if $with_bignum
73
76
  else
74
77
  obj = {
75
78
  'a' => 'Alpha',
@@ -102,7 +105,7 @@ end
102
105
  dt = Time.now - start
103
106
  base_dt = dt
104
107
  parse_results[:oj] = dt
105
- puts "%d Oj.load()s in %0.3f seconds or %0.1f loads/msec" % [$iter, dt, $iter/dt/1000.0]
108
+ puts '%d Oj.load()s in %0.3f seconds or %0.1f loads/msec' % [$iter, dt, $iter/dt/1000.0]
106
109
 
107
110
  start = Time.now
108
111
  $iter.times do
@@ -114,7 +117,7 @@ if base_dt < dt
114
117
  base_name = 'Yajl'
115
118
  end
116
119
  parse_results[:yajl] = dt
117
- puts "%d Yajl::Parser.parse()s in %0.3f seconds or %0.1f parses/msec" % [$iter, dt, $iter/dt/1000.0]
120
+ puts '%d Yajl::Parser.parse()s in %0.3f seconds or %0.1f parses/msec' % [$iter, dt, $iter/dt/1000.0]
118
121
 
119
122
  begin
120
123
  JSON.parser = JSON::Ext::Parser
@@ -128,7 +131,7 @@ begin
128
131
  base_name = 'JSON::Ext'
129
132
  end
130
133
  parse_results[:ext] = dt
131
- puts "%d JSON::Ext::Parser parse()s in %0.3f seconds or %0.1f parses/msec" % [$iter, dt, $iter/dt/1000.0]
134
+ puts '%d JSON::Ext::Parser parse()s in %0.3f seconds or %0.1f parses/msec' % [$iter, dt, $iter/dt/1000.0]
132
135
  rescue Exception => e
133
136
  puts "JSON::Ext failed: #{e.class}: #{e.message}"
134
137
  end
@@ -145,7 +148,7 @@ begin
145
148
  base_name = 'JSON::Pure'
146
149
  end
147
150
  parse_results[:pure] = dt
148
- puts "%d JSON::Pure::Parser parse()s in %0.3f seconds or %0.1f parses/msec" % [$iter, dt, $iter/dt/1000.0]
151
+ puts '%d JSON::Pure::Parser parse()s in %0.3f seconds or %0.1f parses/msec' % [$iter, dt, $iter/dt/1000.0]
149
152
  rescue Exception => e
150
153
  puts "JSON::Pure failed: #{e.class}: #{e.message}"
151
154
  end
@@ -162,7 +165,7 @@ begin
162
165
  base_name = 'MessagePack'
163
166
  end
164
167
  parse_results[:msgpack] = dt
165
- puts "%d MessagePack.unpack()s in %0.3f seconds or %0.1f packs/msec" % [$iter, dt, $iter/dt/1000.0]
168
+ puts '%d MessagePack.unpack()s in %0.3f seconds or %0.1f packs/msec' % [$iter, dt, $iter/dt/1000.0]
166
169
  rescue Exception => e
167
170
  puts "MessagePack failed: #{e.class}: #{e.message}"
168
171
  end
@@ -173,23 +176,22 @@ $iter.times do
173
176
  end
174
177
  dt = Time.now - start
175
178
  parse_results[:ox] = dt
176
- puts "%d Ox.load()s in %0.3f seconds or %0.1f loads/msec" % [$iter, dt, $iter/dt/1000.0]
179
+ puts '%d Ox.load()s in %0.3f seconds or %0.1f loads/msec' % [$iter, dt, $iter/dt/1000.0]
177
180
 
178
- puts "Parser results:"
181
+ puts 'Parser results:'
179
182
  puts "gem seconds parses/msec X faster than #{base_name} (higher is better)"
180
- parse_results.each do |name, dt|
181
- if 0.0 == dt
183
+ parse_results.each do |name, dt2|
184
+ if dt2 <= 0.0
182
185
  puts "#{name} failed to generate JSON"
183
186
  next
184
187
  end
185
- puts "%-7s %6.3f %5.1f %4.1f" % [name, dt, $iter/dt/1000.0, base_dt/dt]
188
+ puts '%-7s %6.3f %5.1f %4.1f' % [name, dt2, $iter/dt/1000.0, base_dt/dt2]
186
189
  end
187
190
 
188
191
  puts
189
192
 
190
193
  # Back to object mode for best performance when dumping.
191
194
  Oj.default_options = { :indent => $indent, :mode => :object }
192
- dump_results = { :oj => 0.0, :yajl => 0.0, :msgpack => 0.0, :pure => 0.0, :ext => 0.0, :ox => 0.0 }
193
195
 
194
196
  start = Time.now
195
197
  $iter.times do
@@ -199,7 +201,7 @@ dt = Time.now - start
199
201
  base_dt = dt
200
202
  base_name = 'Oj'
201
203
  parse_results[:oj] = dt
202
- puts "%d Oj.dump()s in %0.3f seconds or %0.1f dumps/msec" % [$iter, dt, $iter/dt/1000.0]
204
+ puts '%d Oj.dump()s in %0.3f seconds or %0.1f dumps/msec' % [$iter, dt, $iter/dt/1000.0]
203
205
 
204
206
  start = Time.now
205
207
  $iter.times do
@@ -211,7 +213,7 @@ if base_dt < dt
211
213
  base_name = 'Yajl'
212
214
  end
213
215
  parse_results[:yajl] = dt
214
- puts "%d Yajl::Encoder.encode()s in %0.3f seconds or %0.1f encodes/msec" % [$iter, dt, $iter/dt/1000.0]
216
+ puts '%d Yajl::Encoder.encode()s in %0.3f seconds or %0.1f encodes/msec' % [$iter, dt, $iter/dt/1000.0]
215
217
 
216
218
  begin
217
219
  JSON.parser = JSON::Ext::Parser
@@ -225,7 +227,7 @@ begin
225
227
  base_name = 'JSON::Ext'
226
228
  end
227
229
  parse_results[:pure] = dt
228
- puts "%d JSON::Ext generate()s in %0.3f seconds or %0.1f generates/msec" % [$iter, dt, $iter/dt/1000.0]
230
+ puts '%d JSON::Ext generate()s in %0.3f seconds or %0.1f generates/msec' % [$iter, dt, $iter/dt/1000.0]
229
231
  rescue Exception => e
230
232
  parse_results[:ext] = 0.0
231
233
  puts "JSON::Ext failed: #{e.class}: #{e.message}"
@@ -243,7 +245,7 @@ begin
243
245
  base_name = 'JSON::Pure'
244
246
  end
245
247
  parse_results[:pure] = dt
246
- puts "%d JSON::Pure generate()s in %0.3f seconds or %0.1f generates/msec" % [$iter, dt, $iter/dt/1000.0]
248
+ puts '%d JSON::Pure generate()s in %0.3f seconds or %0.1f generates/msec' % [$iter, dt, $iter/dt/1000.0]
247
249
  rescue Exception => e
248
250
  parse_results[:pure] = 0.0
249
251
  puts "JSON::Pure failed: #{e.class}: #{e.message}"
@@ -260,7 +262,7 @@ begin
260
262
  base_name = 'MessagePack'
261
263
  end
262
264
  parse_results[:msgpack] = dt
263
- puts "%d Msgpack()s in %0.3f seconds or %0.1f unpacks/msec" % [$iter, dt, $iter/dt/1000.0]
265
+ puts '%d Msgpack()s in %0.3f seconds or %0.1f unpacks/msec' % [$iter, dt, $iter/dt/1000.0]
264
266
  rescue Exception => e
265
267
  parse_results[:msgpack] = 0.0
266
268
  puts "MessagePack failed: #{e.class}: #{e.message}"
@@ -272,16 +274,16 @@ $iter.times do
272
274
  end
273
275
  dt = Time.now - start
274
276
  parse_results[:ox] = dt
275
- puts "%d Ox.dump()s in %0.3f seconds or %0.1f dumps/msec" % [$iter, dt, $iter/dt/1000.0]
277
+ puts '%d Ox.dump()s in %0.3f seconds or %0.1f dumps/msec' % [$iter, dt, $iter/dt/1000.0]
276
278
 
277
- puts "Parser results:"
279
+ puts 'Parser results:'
278
280
  puts "gem seconds dumps/msec X faster than #{base_name} (higher is better)"
279
- parse_results.each do |name, dt|
280
- if 0.0 == dt
281
+ parse_results.each do |name, dt2|
282
+ if dt2 <= 0.0
281
283
  puts "#{name} failed to generate JSON"
282
284
  next
283
285
  end
284
- puts "%-7s %6.3f %5.1f %4.1f" % [name, dt, $iter/dt/1000.0, base_dt/dt]
286
+ puts '%-7s %6.3f %5.1f %4.1f' % [name, dt2, $iter/dt/1000.0, base_dt/dt2]
285
287
  end
286
288
 
287
289
  puts
data/test/perf_strict.rb CHANGED
@@ -1,49 +1,49 @@
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'
10
10
  require 'oj'
11
11
 
12
- $verbose = false
13
- $indent = 0
14
- $iter = 20000
15
- $with_bignum = false
16
- $with_nums = true
17
- $size = 0
18
- $symbolize = false
19
- $cache_keys = true
12
+ @verbose = false
13
+ @indent = 0
14
+ @iter = 20_000
15
+ @with_bignum = false
16
+ @with_nums = true
17
+ @size = 0
18
+ @symbolize = false
19
+ @cache_keys = true
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("-n", "without numbers") { $with_nums = false }
28
- opts.on("-z", "--symbolize", "symbolize keys") { $symbolize = true }
29
- opts.on("-k", "--no-cache", "turn off key caching") { $cache_keys = false }
30
- opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
31
- files = opts.parse(ARGV)
32
-
33
- if $with_nums
34
- $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('-n', 'without numbers') { @with_nums = false }
28
+ opts.on('-z', '--symbolize', 'symbolize keys') { @symbolize = true }
29
+ opts.on('-k', '--no-cache', 'turn off key caching') { @cache_keys = false }
30
+ opts.on('-h', '--help', 'Show this display') { puts opts; Process.exit!(0) }
31
+ opts.parse(ARGV)
32
+
33
+ if @with_nums
34
+ @obj = {
35
35
  'a' => 'Alpha', # string
36
36
  'b' => true, # boolean
37
- 'c' => 12345, # number
38
- 'd' => [ true, [false, [-123456789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
37
+ 'c' => 12_345, # number
38
+ 'd' => [ true, [false, [-123_456_789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
39
39
  'e' => { 'zero' => nil, 'one' => 1, 'two' => 2, 'three' => [3], 'four' => [0, 1, 2, 3, 4] }, # hash
40
40
  'f' => nil, # nil
41
41
  'h' => { 'a' => { 'b' => { 'c' => { 'd' => {'e' => { 'f' => { 'g' => nil }}}}}}}, # deep hash, not that deep
42
42
  'i' => [[[[[[[nil]]]]]]] # deep array, again, not that deep
43
43
  }
44
- $obj['g'] = 12345678901234567890123456789 if $with_bignum
44
+ @obj['g'] = 12_345_678_901_234_567_890_123_456_789 if @with_bignum
45
45
  else
46
- $obj = {
46
+ @obj = {
47
47
  'a' => 'Alpha',
48
48
  'b' => true,
49
49
  'c' => '12345',
@@ -55,37 +55,35 @@ else
55
55
  }
56
56
  end
57
57
 
58
- Oj.default_options = { :indent => $indent, :mode => :strict, cache_keys: $cache_keys, cache_str: 5 }
58
+ Oj.default_options = { :indent => @indent, :mode => :strict, cache_keys: @cache_keys, cache_str: 5 }
59
59
 
60
- if 0 < $size
61
- o = $obj
62
- $obj = []
63
- (4 * $size).times do
64
- $obj << o
60
+ if 0 < @size
61
+ ob = @obj
62
+ @obj = []
63
+ (4 * @size).times do
64
+ @obj << ob
65
65
  end
66
66
  end
67
67
 
68
- $json = Oj.dump($obj)
69
- $failed = {} # key is same as String used in tests later
68
+ @json = Oj.dump(@obj)
69
+ @failed = {} # key is same as String used in tests later
70
70
 
71
71
  def capture_error(tag, orig, load_key, dump_key, &blk)
72
- begin
73
- obj = blk.call(orig)
74
- raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
75
- rescue Exception => e
76
- $failed[tag] = "#{e.class}: #{e.message}"
77
- end
72
+ obj = blk.call(orig)
73
+ raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
74
+ rescue Exception => e
75
+ @failed[tag] = "#{e.class}: #{e.message}"
78
76
  end
79
77
 
80
78
  # Verify that all packages dump and load correctly and return the same Object as the original.
81
- capture_error('Oj:strict', $obj, 'load', 'dump') { |o|
79
+ capture_error('Oj:strict', @obj, 'load', 'dump') { |o|
82
80
  Oj.strict_load(Oj.dump(o))
83
81
  }
84
- capture_error('Yajl', $obj, 'encode', 'parse') { |o|
82
+ capture_error('Yajl', @obj, 'encode', 'parse') { |o|
85
83
  require 'yajl'
86
84
  Yajl::Parser.parse(Yajl::Encoder.encode(o))
87
85
  }
88
- capture_error('JSON::Ext', $obj, 'generate', 'parse') { |o|
86
+ capture_error('JSON::Ext', @obj, 'generate', 'parse') { |o|
89
87
  require 'json'
90
88
  require 'json/ext'
91
89
  JSON.generator = JSON::Ext::Generator
@@ -93,47 +91,47 @@ capture_error('JSON::Ext', $obj, 'generate', 'parse') { |o|
93
91
  JSON.parse(JSON.generate(o))
94
92
  }
95
93
 
96
- Oj.default_options = { symbol_keys: $symbolize }
94
+ Oj.default_options = { symbol_keys: @symbolize }
97
95
 
98
- if $verbose
99
- puts "json:\n#{$json}\n"
100
- puts "Oj loaded object:\n#{Oj.strict_load($json)}\n"
101
- puts "Yajl loaded object:\n#{Yajl::Parser.parse($json)}\n"
102
- puts "JSON loaded object:\n#{JSON::Ext::Parser.new($json).parse}\n"
96
+ if @verbose
97
+ puts "json:\n#{@json}\n"
98
+ puts "Oj loaded object:\n#{Oj.strict_load(@json)}\n"
99
+ puts "Yajl loaded object:\n#{Yajl::Parser.parse(@json)}\n"
100
+ puts "JSON loaded object:\n#{JSON::Ext::Parser.new(@json).parse}\n"
103
101
  end
104
102
 
105
103
  puts '-' * 80
106
- puts "Strict Parse Performance"
104
+ puts 'Strict Parse Performance'
107
105
  perf = Perf.new()
108
- unless $failed.has_key?('JSON::Ext')
109
- perf.add('JSON::Ext', 'parse') { JSON.parse($json, symbolize_names: $symbolize) }
106
+ unless @failed.key?('JSON::Ext')
107
+ perf.add('JSON::Ext', 'parse') { JSON.parse(@json, symbolize_names: @symbolize) }
110
108
  perf.before('JSON::Ext') { JSON.parser = JSON::Ext::Parser }
111
109
  end
112
- unless $failed.has_key?('Oj:strict')
113
- perf.add('Oj:strict', 'strict_load') { Oj.strict_load($json) }
114
- perf.add('Oj:wab', 'wab_load') { Oj.wab_load($json) }
110
+ unless @failed.key?('Oj:strict')
111
+ perf.add('Oj:strict', 'strict_load') { Oj.strict_load(@json) }
112
+ perf.add('Oj:wab', 'wab_load') { Oj.wab_load(@json) }
115
113
  end
116
- perf.add('Yajl', 'parse') { Yajl::Parser.parse($json) } unless $failed.has_key?('Yajl')
117
- perf.run($iter)
114
+ perf.add('Yajl', 'parse') { Yajl::Parser.parse(@json) } unless @failed.key?('Yajl')
115
+ perf.run(@iter)
118
116
 
119
117
  puts '-' * 80
120
- puts "Strict Dump Performance"
118
+ puts 'Strict Dump Performance'
121
119
  perf = Perf.new()
122
- unless $failed.has_key?('JSON::Ext')
123
- perf.add('JSON::Ext', 'dump') { JSON.generate($obj) }
120
+ unless @failed.key?('JSON::Ext')
121
+ perf.add('JSON::Ext', 'dump') { JSON.generate(@obj) }
124
122
  perf.before('JSON::Ext') { JSON.generator = JSON::Ext::Generator }
125
123
  end
126
- unless $failed.has_key?('Oj:strict')
127
- perf.add('Oj:strict', 'dump') { Oj.dump($obj) }
124
+ unless @failed.key?('Oj:strict')
125
+ perf.add('Oj:strict', 'dump') { Oj.dump(@obj) }
128
126
  end
129
- perf.add('Yajl', 'encode') { Yajl::Encoder.encode($obj) } unless $failed.has_key?('Yajl')
130
- perf.run($iter)
127
+ perf.add('Yajl', 'encode') { Yajl::Encoder.encode(@obj) } unless @failed.key?('Yajl')
128
+ perf.run(@iter)
131
129
 
132
130
  puts
133
131
  puts '-' * 80
134
132
  puts
135
133
 
136
- unless $failed.empty?
137
- puts "The following packages were not included for the reason listed"
138
- $failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
134
+ unless @failed.empty?
135
+ puts 'The following packages were not included for the reason listed'
136
+ @failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
139
137
  end
data/test/perf_wab.rb CHANGED
@@ -1,131 +1,129 @@
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'
10
10
  require 'oj'
11
11
 
12
- $verbose = false
13
- $indent = 0
14
- $iter = 20000
15
- $with_bignum = false
16
- $with_nums = true
17
- $size = 0
12
+ @verbose = false
13
+ @indent = 0
14
+ @iter = 20_000
15
+ @with_bignum = false
16
+ @with_nums = true
17
+ @size = 0
18
18
 
19
19
  opts = OptionParser.new
20
- opts.on("-v", "verbose") { $verbose = true }
21
- opts.on("-c", "--count [Int]", Integer, "iterations") { |i| $iter = i }
22
- opts.on("-i", "--indent [Int]", Integer, "indentation") { |i| $indent = 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("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
26
- files = opts.parse(ARGV)
20
+ opts.on('-v', 'verbose') { @verbose = true }
21
+ opts.on('-c', '--count [Int]', Integer, 'iterations') { |i| @iter = i }
22
+ opts.on('-i', '--indent [Int]', Integer, 'indentation') { |i| @indent = 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('-h', '--help', 'Show this display') { puts opts; Process.exit!(0) }
26
+ opts.parse(ARGV)
27
27
 
28
- $obj = {
28
+ @obj = {
29
29
  a: 'Alpha', # string
30
30
  b: true, # boolean
31
- c: 12345, # number
32
- d: [ true, [false, [-123456789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
31
+ c: 12_345, # number
32
+ d: [ true, [false, [-123_456_789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
33
33
  e: { zero: nil, one: 1, two: 2, three: [3], four: [0, 1, 2, 3, 4] }, # hash
34
34
  f: nil, # nil
35
35
  h: { a: { b: { c: { d: {e: { f: { g: nil }}}}}}}, # deep hash, not that deep
36
36
  i: [[[[[[[nil]]]]]]] # deep array, again, not that deep
37
37
  }
38
- $obj[:g] = 12345678901234567890123456789 if $with_bignum
38
+ @obj[:g] = 12_345_678_901_234_567_890_123_456_789 if @with_bignum
39
39
 
40
- Oj.default_options = { :indent => $indent, :mode => :wab }
40
+ Oj.default_options = { :indent => @indent, :mode => :wab }
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
- $json = Oj.dump($obj)
51
- $obj_json = Oj.dump($obj, :mode => :object)
52
- #puts "*** size: #{$obj_json.size}"
53
- #puts "*** #{$obj_json}"
54
- $failed = {} # key is same as String used in tests later
50
+ @json = Oj.dump(@obj)
51
+ @obj_json = Oj.dump(@obj, :mode => :object)
52
+ # puts "*** size: #{@obj_json.size}"
53
+ # puts "*** #{@obj_json}"
54
+ @failed = {} # key is same as String used in tests later
55
55
 
56
56
  def capture_error(tag, orig, load_key, dump_key, &blk)
57
- begin
58
- obj = blk.call(orig)
59
- raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
60
- rescue Exception => e
61
- $failed[tag] = "#{e.class}: #{e.message}"
62
- end
57
+ obj = blk.call(orig)
58
+ raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
59
+ rescue Exception => e
60
+ @failed[tag] = "#{e.class}: #{e.message}"
63
61
  end
64
62
 
65
63
  # Verify that all packages dump and load correctly and return the same Object as the original.
66
- capture_error('Oj:wab', $obj, 'load', 'dump') { |o| Oj.wab_load(Oj.dump(o, :mode => :wab)) }
67
- capture_error('Yajl', $obj, 'encode', 'parse') { |o| require 'yajl'; Yajl::Parser.parse(Yajl::Encoder.encode(o)) }
68
- capture_error('JSON::Ext', $obj, 'generate', 'parse') { |o|
64
+ capture_error('Oj:wab', @obj, 'load', 'dump') { |o| Oj.wab_load(Oj.dump(o, :mode => :wab)) }
65
+ capture_error('Yajl', @obj, 'encode', 'parse') { |o| require 'yajl'; Yajl::Parser.parse(Yajl::Encoder.encode(o)) }
66
+ capture_error('JSON::Ext', @obj, 'generate', 'parse') { |o|
69
67
  require 'json'
70
68
  require 'json/ext'
71
69
  JSON.generator = JSON::Ext::Generator
72
70
  JSON.parser = JSON::Ext::Parser
73
71
  JSON.parse(JSON.generate(o))
74
72
  }
75
- capture_error('JSON::Pure', $obj, 'generate', 'parse') { |o|
73
+ capture_error('JSON::Pure', @obj, 'generate', 'parse') { |o|
76
74
  require 'json/pure'
77
75
  JSON.generator = JSON::Pure::Generator
78
76
  JSON.parser = JSON::Pure::Parser
79
77
  JSON.parse(JSON.generate(o))
80
78
  }
81
79
 
82
- if $verbose
83
- puts "json:\n#{$json}\n"
84
- puts "object json:\n#{$obj_json}\n"
85
- puts "Oj loaded object:\n#{Oj.wab_load($json)}\n"
86
- puts "Yajl loaded object:\n#{Yajl::Parser.parse($json)}\n"
87
- puts "JSON loaded object:\n#{JSON::Ext::Parser.new($json).parse}\n"
80
+ if @verbose
81
+ puts "json:\n#{@json}\n"
82
+ puts "object json:\n#{@obj_json}\n"
83
+ puts "Oj loaded object:\n#{Oj.wab_load(@json)}\n"
84
+ puts "Yajl loaded object:\n#{Yajl::Parser.parse(@json)}\n"
85
+ puts "JSON loaded object:\n#{JSON::Ext::Parser.new(@json).parse}\n"
88
86
  end
89
87
 
90
88
  puts '-' * 80
91
- puts "Wab Parse Performance"
89
+ puts 'Wab Parse Performance'
92
90
  perf = Perf.new()
93
- unless $failed.has_key?('JSON::Ext')
94
- perf.add('JSON::Ext', 'parse') { JSON.parse($json) }
91
+ unless @failed.key?('JSON::Ext')
92
+ perf.add('JSON::Ext', 'parse') { JSON.parse(@json) }
95
93
  perf.before('JSON::Ext') { JSON.parser = JSON::Ext::Parser }
96
94
  end
97
- unless $failed.has_key?('JSON::Pure')
98
- perf.add('JSON::Pure', 'parse') { JSON.parse($json) }
95
+ unless @failed.key?('JSON::Pure')
96
+ perf.add('JSON::Pure', 'parse') { JSON.parse(@json) }
99
97
  perf.before('JSON::Pure') { JSON.parser = JSON::Pure::Parser }
100
98
  end
101
- unless $failed.has_key?('Oj:wab')
102
- perf.add('Oj:wab', 'wab_load') { Oj.wab_load($json) }
99
+ unless @failed.key?('Oj:wab')
100
+ perf.add('Oj:wab', 'wab_load') { Oj.wab_load(@json) }
103
101
  end
104
- perf.add('Yajl', 'parse') { Yajl::Parser.parse($json) } unless $failed.has_key?('Yajl')
105
- perf.run($iter)
102
+ perf.add('Yajl', 'parse') { Yajl::Parser.parse(@json) } unless @failed.key?('Yajl')
103
+ perf.run(@iter)
106
104
 
107
105
  puts '-' * 80
108
- puts "Wab Dump Performance"
106
+ puts 'Wab Dump Performance'
109
107
  perf = Perf.new()
110
- unless $failed.has_key?('JSON::Ext')
111
- perf.add('JSON::Ext', 'dump') { JSON.generate($obj) }
108
+ unless @failed.key?('JSON::Ext')
109
+ perf.add('JSON::Ext', 'dump') { JSON.generate(@obj) }
112
110
  perf.before('JSON::Ext') { JSON.generator = JSON::Ext::Generator }
113
111
  end
114
- unless $failed.has_key?('JSON::Pure')
115
- perf.add('JSON::Pure', 'generate') { JSON.generate($obj) }
112
+ unless @failed.key?('JSON::Pure')
113
+ perf.add('JSON::Pure', 'generate') { JSON.generate(@obj) }
116
114
  perf.before('JSON::Pure') { JSON.generator = JSON::Pure::Generator }
117
115
  end
118
- unless $failed.has_key?('Oj:wab')
119
- perf.add('Oj:wab', 'dump') { Oj.dump($obj, :mode => :wab) }
116
+ unless @failed.key?('Oj:wab')
117
+ perf.add('Oj:wab', 'dump') { Oj.dump(@obj, :mode => :wab) }
120
118
  end
121
- perf.add('Yajl', 'encode') { Yajl::Encoder.encode($obj) } unless $failed.has_key?('Yajl')
122
- perf.run($iter)
119
+ perf.add('Yajl', 'encode') { Yajl::Encoder.encode(@obj) } unless @failed.key?('Yajl')
120
+ perf.run(@iter)
123
121
 
124
122
  puts
125
123
  puts '-' * 80
126
124
  puts
127
125
 
128
- unless $failed.empty?
129
- puts "The following packages were not included for the reason listed"
130
- $failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
126
+ unless @failed.empty?
127
+ puts 'The following packages were not included for the reason listed'
128
+ @failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
131
129
  end
data/test/prec.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'oj'
4
4
 
5
- extras = {"locationLng" => -97.14690769100295}
5
+ extras = {'locationLng' => -97.14690769100295}
6
6
 
7
7
  Oj.default_options = {float_precision: 17}
8
8
 
@@ -10,13 +10,13 @@ encoded = Oj.dump(extras)
10
10
  puts encoded
11
11
  puts Oj.load(encoded)
12
12
 
13
- require "active_record"
13
+ require 'active_record'
14
14
 
15
15
  Oj::Rails.set_encoder()
16
16
  Oj::Rails.set_decoder()
17
17
 
18
18
  Oj.default_options = {float_precision: 17}
19
- # Using Oj rails encoder, gets the correct value: {"locationLng":-97.14690769100295}
19
+ # Using Oj rails encoder, gets the correct value: {'locationLng':-97.14690769100295}
20
20
  encoded = ActiveSupport::JSON.encode(extras)
21
21
  puts encoded
22
22
  puts ActiveSupport::JSON.decode(encoded)