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_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)