ffi-yajl 0.0.1-universal-java → 3.0.1

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 (211) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE +21 -201
  3. data/README.md +105 -10
  4. data/bin/ffi-yajl-bench +11 -11
  5. data/ext/ffi_yajl/ext/dlopen/dlopen.c +40 -0
  6. data/ext/ffi_yajl/ext/dlopen/extconf.rb +16 -0
  7. data/ext/ffi_yajl/ext/dlopen/yajl.sym +18 -0
  8. data/ext/ffi_yajl/ext/encoder/encoder.c +270 -115
  9. data/ext/ffi_yajl/ext/encoder/extconf.rb +71 -14
  10. data/ext/ffi_yajl/ext/parser/extconf.rb +71 -14
  11. data/ext/ffi_yajl/ext/parser/parser.c +85 -44
  12. data/lib/ffi_yajl/benchmark/encode.rb +39 -92
  13. data/lib/ffi_yajl/benchmark/encode_json_and_marshal.rb +23 -23
  14. data/lib/ffi_yajl/benchmark/encode_json_and_yaml.rb +24 -30
  15. data/lib/ffi_yajl/benchmark/encode_profile.rb +15 -19
  16. data/lib/ffi_yajl/benchmark/http.rb +21 -25
  17. data/lib/ffi_yajl/benchmark/parse.rb +77 -117
  18. data/lib/ffi_yajl/benchmark/parse_json_and_marshal.rb +27 -27
  19. data/lib/ffi_yajl/benchmark/parse_json_and_yaml.rb +30 -30
  20. data/lib/ffi_yajl/benchmark/parse_profile.rb +14 -18
  21. data/lib/ffi_yajl/benchmark/parse_profile_ruby_prof.rb +14 -19
  22. data/lib/ffi_yajl/benchmark/parse_stream.rb +28 -28
  23. data/lib/ffi_yajl/benchmark.rb +26 -6
  24. data/lib/ffi_yajl/encoder.rb +47 -6
  25. data/lib/ffi_yajl/ext.rb +37 -10
  26. data/lib/ffi_yajl/ffi/encoder.rb +150 -63
  27. data/lib/ffi_yajl/ffi/parser.rb +82 -64
  28. data/lib/ffi_yajl/ffi.rb +70 -46
  29. data/lib/ffi_yajl/map_library_name.rb +109 -0
  30. data/lib/ffi_yajl/parser.rb +69 -1
  31. data/lib/ffi_yajl/platform.rb +29 -0
  32. data/lib/ffi_yajl/version.rb +23 -1
  33. data/lib/ffi_yajl.rb +44 -8
  34. metadata +25 -238
  35. data/Rakefile +0 -62
  36. data/ext/libyajl2/extconf.rb +0 -65
  37. data/ext/libyajl2/vendored/.git +0 -1
  38. data/ext/libyajl2/vendored/.gitignore +0 -3
  39. data/ext/libyajl2/vendored/BUILDING +0 -23
  40. data/ext/libyajl2/vendored/BUILDING.win32 +0 -27
  41. data/ext/libyajl2/vendored/CMakeLists.txt +0 -79
  42. data/ext/libyajl2/vendored/COPYING +0 -13
  43. data/ext/libyajl2/vendored/ChangeLog +0 -175
  44. data/ext/libyajl2/vendored/README +0 -74
  45. data/ext/libyajl2/vendored/TODO +0 -9
  46. data/ext/libyajl2/vendored/YAJLDoc.cmake +0 -26
  47. data/ext/libyajl2/vendored/configure +0 -79
  48. data/ext/libyajl2/vendored/example/CMakeLists.txt +0 -23
  49. data/ext/libyajl2/vendored/example/README.md +0 -7
  50. data/ext/libyajl2/vendored/example/parse_config.c +0 -69
  51. data/ext/libyajl2/vendored/example/sample.config +0 -101
  52. data/ext/libyajl2/vendored/perf/CMakeLists.txt +0 -23
  53. data/ext/libyajl2/vendored/perf/documents.c +0 -1418
  54. data/ext/libyajl2/vendored/perf/documents.h +0 -28
  55. data/ext/libyajl2/vendored/perf/perftest.c +0 -134
  56. data/ext/libyajl2/vendored/reformatter/CMakeLists.txt +0 -39
  57. data/ext/libyajl2/vendored/reformatter/json_reformat.c +0 -194
  58. data/ext/libyajl2/vendored/src/CMakeLists.txt +0 -86
  59. data/ext/libyajl2/vendored/src/YAJL.dxy +0 -1258
  60. data/ext/libyajl2/vendored/src/api/yajl_common.h +0 -75
  61. data/ext/libyajl2/vendored/src/api/yajl_gen.h +0 -157
  62. data/ext/libyajl2/vendored/src/api/yajl_parse.h +0 -226
  63. data/ext/libyajl2/vendored/src/api/yajl_tree.h +0 -185
  64. data/ext/libyajl2/vendored/src/api/yajl_version.h.cmake +0 -23
  65. data/ext/libyajl2/vendored/src/yajl +0 -33
  66. data/ext/libyajl2/vendored/src/yajl.c +0 -175
  67. data/ext/libyajl2/vendored/src/yajl.pc.cmake +0 -9
  68. data/ext/libyajl2/vendored/src/yajl_alloc.c +0 -52
  69. data/ext/libyajl2/vendored/src/yajl_alloc.h +0 -34
  70. data/ext/libyajl2/vendored/src/yajl_buf.c +0 -103
  71. data/ext/libyajl2/vendored/src/yajl_buf.h +0 -57
  72. data/ext/libyajl2/vendored/src/yajl_bytestack.h +0 -69
  73. data/ext/libyajl2/vendored/src/yajl_encode.c +0 -220
  74. data/ext/libyajl2/vendored/src/yajl_encode.h +0 -34
  75. data/ext/libyajl2/vendored/src/yajl_gen.c +0 -354
  76. data/ext/libyajl2/vendored/src/yajl_lex.c +0 -763
  77. data/ext/libyajl2/vendored/src/yajl_lex.h +0 -117
  78. data/ext/libyajl2/vendored/src/yajl_parser.c +0 -498
  79. data/ext/libyajl2/vendored/src/yajl_parser.h +0 -78
  80. data/ext/libyajl2/vendored/src/yajl_tree.c +0 -503
  81. data/ext/libyajl2/vendored/src/yajl_version.c +0 -7
  82. data/ext/libyajl2/vendored/test/CMakeLists.txt +0 -23
  83. data/ext/libyajl2/vendored/test/cases/ac_difficult_json_c_test_case_with_comments.json +0 -1
  84. data/ext/libyajl2/vendored/test/cases/ac_difficult_json_c_test_case_with_comments.json.gold +0 -36
  85. data/ext/libyajl2/vendored/test/cases/ac_simple_with_comments.json +0 -11
  86. data/ext/libyajl2/vendored/test/cases/ac_simple_with_comments.json.gold +0 -9
  87. data/ext/libyajl2/vendored/test/cases/ag_false_then_garbage.json +0 -1
  88. data/ext/libyajl2/vendored/test/cases/ag_false_then_garbage.json.gold +0 -2
  89. data/ext/libyajl2/vendored/test/cases/ag_null_then_garbage.json +0 -1
  90. data/ext/libyajl2/vendored/test/cases/ag_null_then_garbage.json.gold +0 -2
  91. data/ext/libyajl2/vendored/test/cases/ag_true_then_garbage.json +0 -1
  92. data/ext/libyajl2/vendored/test/cases/ag_true_then_garbage.json.gold +0 -2
  93. data/ext/libyajl2/vendored/test/cases/am_eof.json +0 -1
  94. data/ext/libyajl2/vendored/test/cases/am_eof.json.gold +0 -4
  95. data/ext/libyajl2/vendored/test/cases/am_integers.json +0 -1
  96. data/ext/libyajl2/vendored/test/cases/am_integers.json.gold +0 -3
  97. data/ext/libyajl2/vendored/test/cases/am_multiple.json +0 -3
  98. data/ext/libyajl2/vendored/test/cases/am_multiple.json.gold +0 -5
  99. data/ext/libyajl2/vendored/test/cases/am_stuff.json +0 -7
  100. data/ext/libyajl2/vendored/test/cases/am_stuff.json.gold +0 -14
  101. data/ext/libyajl2/vendored/test/cases/ap_array_open.json +0 -1
  102. data/ext/libyajl2/vendored/test/cases/ap_array_open.json.gold +0 -2
  103. data/ext/libyajl2/vendored/test/cases/ap_eof_str.json +0 -1
  104. data/ext/libyajl2/vendored/test/cases/ap_eof_str.json.gold +0 -1
  105. data/ext/libyajl2/vendored/test/cases/ap_map_open.json +0 -1
  106. data/ext/libyajl2/vendored/test/cases/ap_map_open.json.gold +0 -2
  107. data/ext/libyajl2/vendored/test/cases/ap_partial_ok.json +0 -1
  108. data/ext/libyajl2/vendored/test/cases/ap_partial_ok.json.gold +0 -4
  109. data/ext/libyajl2/vendored/test/cases/array.json +0 -6
  110. data/ext/libyajl2/vendored/test/cases/array.json.gold +0 -22
  111. data/ext/libyajl2/vendored/test/cases/array_close.json +0 -1
  112. data/ext/libyajl2/vendored/test/cases/array_close.json.gold +0 -2
  113. data/ext/libyajl2/vendored/test/cases/bignums.json +0 -1
  114. data/ext/libyajl2/vendored/test/cases/bignums.json.gold +0 -5
  115. data/ext/libyajl2/vendored/test/cases/bogus_char.json +0 -4
  116. data/ext/libyajl2/vendored/test/cases/bogus_char.json.gold +0 -10
  117. data/ext/libyajl2/vendored/test/cases/codepoints_from_unicode_org.json +0 -1
  118. data/ext/libyajl2/vendored/test/cases/codepoints_from_unicode_org.json.gold +0 -2
  119. data/ext/libyajl2/vendored/test/cases/deep_arrays.json +0 -1
  120. data/ext/libyajl2/vendored/test/cases/deep_arrays.json.gold +0 -2049
  121. data/ext/libyajl2/vendored/test/cases/difficult_json_c_test_case.json +0 -1
  122. data/ext/libyajl2/vendored/test/cases/difficult_json_c_test_case.json.gold +0 -36
  123. data/ext/libyajl2/vendored/test/cases/doubles.json +0 -1
  124. data/ext/libyajl2/vendored/test/cases/doubles.json.gold +0 -7
  125. data/ext/libyajl2/vendored/test/cases/doubles_in_array.json +0 -1
  126. data/ext/libyajl2/vendored/test/cases/doubles_in_array.json.gold +0 -8
  127. data/ext/libyajl2/vendored/test/cases/empty_array.json +0 -1
  128. data/ext/libyajl2/vendored/test/cases/empty_array.json.gold +0 -3
  129. data/ext/libyajl2/vendored/test/cases/empty_string.json +0 -1
  130. data/ext/libyajl2/vendored/test/cases/empty_string.json.gold +0 -2
  131. data/ext/libyajl2/vendored/test/cases/escaped_bulgarian.json +0 -4
  132. data/ext/libyajl2/vendored/test/cases/escaped_bulgarian.json.gold +0 -7
  133. data/ext/libyajl2/vendored/test/cases/escaped_foobar.json +0 -1
  134. data/ext/libyajl2/vendored/test/cases/escaped_foobar.json.gold +0 -2
  135. data/ext/libyajl2/vendored/test/cases/false.json +0 -1
  136. data/ext/libyajl2/vendored/test/cases/false.json.gold +0 -2
  137. data/ext/libyajl2/vendored/test/cases/fg_false_then_garbage.json +0 -1
  138. data/ext/libyajl2/vendored/test/cases/fg_false_then_garbage.json.gold +0 -3
  139. data/ext/libyajl2/vendored/test/cases/fg_issue_7.json +0 -1
  140. data/ext/libyajl2/vendored/test/cases/fg_issue_7.json.gold +0 -3
  141. data/ext/libyajl2/vendored/test/cases/fg_null_then_garbage.json +0 -1
  142. data/ext/libyajl2/vendored/test/cases/fg_null_then_garbage.json.gold +0 -3
  143. data/ext/libyajl2/vendored/test/cases/fg_true_then_garbage.json +0 -1
  144. data/ext/libyajl2/vendored/test/cases/fg_true_then_garbage.json.gold +0 -3
  145. data/ext/libyajl2/vendored/test/cases/four_byte_utf8.json +0 -2
  146. data/ext/libyajl2/vendored/test/cases/four_byte_utf8.json.gold +0 -5
  147. data/ext/libyajl2/vendored/test/cases/high_overflow.json +0 -1
  148. data/ext/libyajl2/vendored/test/cases/high_overflow.json.gold +0 -2
  149. data/ext/libyajl2/vendored/test/cases/integers.json +0 -3
  150. data/ext/libyajl2/vendored/test/cases/integers.json.gold +0 -14
  151. data/ext/libyajl2/vendored/test/cases/invalid_utf8.json +0 -1
  152. data/ext/libyajl2/vendored/test/cases/invalid_utf8.json.gold +0 -3
  153. data/ext/libyajl2/vendored/test/cases/isolated_surrogate_marker.json +0 -1
  154. data/ext/libyajl2/vendored/test/cases/isolated_surrogate_marker.json.gold +0 -2
  155. data/ext/libyajl2/vendored/test/cases/leading_zero_in_number.json +0 -1
  156. data/ext/libyajl2/vendored/test/cases/leading_zero_in_number.json.gold +0 -5
  157. data/ext/libyajl2/vendored/test/cases/lonely_minus_sign.json +0 -7
  158. data/ext/libyajl2/vendored/test/cases/lonely_minus_sign.json.gold +0 -9
  159. data/ext/libyajl2/vendored/test/cases/lonely_number.json +0 -1
  160. data/ext/libyajl2/vendored/test/cases/lonely_number.json.gold +0 -2
  161. data/ext/libyajl2/vendored/test/cases/low_overflow.json +0 -1
  162. data/ext/libyajl2/vendored/test/cases/low_overflow.json.gold +0 -2
  163. data/ext/libyajl2/vendored/test/cases/map_close.json +0 -1
  164. data/ext/libyajl2/vendored/test/cases/map_close.json.gold +0 -2
  165. data/ext/libyajl2/vendored/test/cases/missing_integer_after_decimal_point.json +0 -1
  166. data/ext/libyajl2/vendored/test/cases/missing_integer_after_decimal_point.json.gold +0 -2
  167. data/ext/libyajl2/vendored/test/cases/missing_integer_after_exponent.json +0 -1
  168. data/ext/libyajl2/vendored/test/cases/missing_integer_after_exponent.json.gold +0 -2
  169. data/ext/libyajl2/vendored/test/cases/multiple.json +0 -3
  170. data/ext/libyajl2/vendored/test/cases/multiple.json.gold +0 -4
  171. data/ext/libyajl2/vendored/test/cases/non_utf8_char_in_string.json +0 -1
  172. data/ext/libyajl2/vendored/test/cases/non_utf8_char_in_string.json.gold +0 -8
  173. data/ext/libyajl2/vendored/test/cases/np_partial_bad.json +0 -1
  174. data/ext/libyajl2/vendored/test/cases/np_partial_bad.json.gold +0 -5
  175. data/ext/libyajl2/vendored/test/cases/null.json +0 -1
  176. data/ext/libyajl2/vendored/test/cases/null.json.gold +0 -2
  177. data/ext/libyajl2/vendored/test/cases/nulls_and_bools.json +0 -5
  178. data/ext/libyajl2/vendored/test/cases/nulls_and_bools.json.gold +0 -9
  179. data/ext/libyajl2/vendored/test/cases/simple.json +0 -5
  180. data/ext/libyajl2/vendored/test/cases/simple.json.gold +0 -9
  181. data/ext/libyajl2/vendored/test/cases/simple_with_comments.json +0 -11
  182. data/ext/libyajl2/vendored/test/cases/simple_with_comments.json.gold +0 -5
  183. data/ext/libyajl2/vendored/test/cases/string_invalid_escape.json +0 -1
  184. data/ext/libyajl2/vendored/test/cases/string_invalid_escape.json.gold +0 -3
  185. data/ext/libyajl2/vendored/test/cases/string_invalid_hex_char.json +0 -1
  186. data/ext/libyajl2/vendored/test/cases/string_invalid_hex_char.json.gold +0 -2
  187. data/ext/libyajl2/vendored/test/cases/string_with_escapes.json +0 -3
  188. data/ext/libyajl2/vendored/test/cases/string_with_escapes.json.gold +0 -7
  189. data/ext/libyajl2/vendored/test/cases/string_with_invalid_newline.json +0 -2
  190. data/ext/libyajl2/vendored/test/cases/string_with_invalid_newline.json.gold +0 -2
  191. data/ext/libyajl2/vendored/test/cases/three_byte_utf8.json +0 -1
  192. data/ext/libyajl2/vendored/test/cases/three_byte_utf8.json.gold +0 -7
  193. data/ext/libyajl2/vendored/test/cases/true.json +0 -1
  194. data/ext/libyajl2/vendored/test/cases/true.json.gold +0 -2
  195. data/ext/libyajl2/vendored/test/cases/unescaped_bulgarian.json +0 -1
  196. data/ext/libyajl2/vendored/test/cases/unescaped_bulgarian.json.gold +0 -4
  197. data/ext/libyajl2/vendored/test/cases/zerobyte.json +0 -1
  198. data/ext/libyajl2/vendored/test/cases/zerobyte.json.gold +0 -0
  199. data/ext/libyajl2/vendored/test/run_tests.sh +0 -94
  200. data/ext/libyajl2/vendored/test/yajl_test.c +0 -281
  201. data/ext/libyajl2/vendored/verify/CMakeLists.txt +0 -39
  202. data/ext/libyajl2/vendored/verify/json_verify.c +0 -116
  203. data/lib/ffi_yajl/json_gem.rb +0 -121
  204. data/lib/libyajl.so +0 -0
  205. data/lib/libyajl.so.2 +0 -0
  206. data/lib/libyajl.so.2.0.5 +0 -0
  207. data/lib/libyajl_s.a +0 -0
  208. data/spec/ffi_yajl/encoder_spec.rb +0 -39
  209. data/spec/ffi_yajl/json_gem_spec.rb +0 -355
  210. data/spec/ffi_yajl/parser_spec.rb +0 -78
  211. data/spec/spec_helper.rb +0 -14
@@ -1,38 +1,34 @@
1
1
  # Portions Originally Copyright (c) 2008-2011 Brian Lopez - http://github.com/brianmario
2
2
  # See MIT-LICENSE
3
3
 
4
- require 'rubygems'
5
- require 'ffi_yajl'
4
+ require "rubygems" unless defined?(Gem)
5
+ require_relative "../../ffi_yajl"
6
6
  begin
7
- require 'perftools'
8
- rescue Exception
7
+ require "perftools"
8
+ rescue LoadError
9
9
  puts "INFO: perftools.rb gem not installed"
10
10
  end
11
11
 
12
- ENV['CPUPROFILE_FREQUENCY'] = "4000"
12
+ ENV["CPUPROFILE_FREQUENCY"] = "4000"
13
13
 
14
14
  module FFI_Yajl
15
15
  class Benchmark
16
16
  class EncodeProfile
17
-
18
17
  def run
19
- if defined?(PerfTools)
20
- filename = File.expand_path(File.join(File.dirname(__FILE__), "subjects", "ohai.json"))
21
- hash = File.open(filename, 'rb') { |f| FFI_Yajl::Parser.parse(f.read) }
18
+ return unless defined?(PerfTools)
19
+
20
+ filename = File.expand_path(File.join(File.dirname(__FILE__), "subjects", "ohai.json"))
21
+ hash = File.open(filename, "rb") { |f| FFI_Yajl::Parser.parse(f.read) }
22
22
 
23
- times = 1000
24
- puts "Starting profiling encoding #{filename} #{times} times\n\n"
23
+ times = 1000
24
+ puts "Starting profiling encoding #{filename} #{times} times\n\n"
25
25
 
26
- ffi_string_encoder = FFI_Yajl::Encoder.new
27
- PerfTools::CpuProfiler.start("/tmp/ffi_yajl_encode_profile.out") do
28
- times.times {
29
- output = ffi_string_encoder.encode(hash)
30
- }
31
- end
32
- system("pprof.rb --text /tmp/ffi_yajl_encode_profile.out")
26
+ ffi_string_encoder = FFI_Yajl::Encoder.new
27
+ PerfTools::CpuProfiler.start("/tmp/ffi_yajl_encode_profile.out") do
28
+ times.times { ffi_string_encoder.encode(hash) }
33
29
  end
30
+ system("pprof.rb --text /tmp/ffi_yajl_encode_profile.out")
34
31
  end
35
-
36
32
  end
37
33
  end
38
34
  end
@@ -1,32 +1,28 @@
1
- $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..')
2
- $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
1
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + "/..")
2
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
3
3
 
4
- require 'rubygems'
5
- require 'benchmark'
6
- require 'yajl/http_stream'
7
- require 'yajl/gzip'
8
- require 'yajl/deflate'
9
- require 'yajl/bzip2' unless defined?(Bzip2)
10
- require 'json'
11
- require 'uri'
12
- require 'net/http'
4
+ require "rubygems" unless defined?(Gem)
5
+ require "benchmark" unless defined?(Benchmark)
6
+ require "yajl/http_stream"
7
+ require "yajl/gzip"
8
+ require "yajl/deflate"
9
+ require "yajl/bzip2" unless defined?(Bzip2)
10
+ require "json" unless defined?(JSON)
11
+ require "uri" unless defined?(URI)
12
+ require "net/http" unless defined?(Net::HTTP)
13
13
 
14
- uri = URI.parse('http://search.twitter.com/search.json?q=github')
14
+ uri = URI.parse("http://search.twitter.com/search.json?q=github")
15
15
  # uri = URI.parse('http://localhost/yajl-ruby.git/benchmark/subjects/contacts.json')
16
16
 
17
17
  times = ARGV[0] ? ARGV[0].to_i : 1
18
- puts "Starting benchmark parsing #{uri.to_s} #{times} times\n\n"
19
- Benchmark.bmbm { |x|
20
- x.report {
18
+ puts "Starting benchmark parsing #{uri} #{times} times\n\n"
19
+ Benchmark.bmbm do |x|
20
+ x.report do
21
21
  puts "Yajl::HttpStream.get"
22
- times.times {
23
- Yajl::HttpStream.get(uri)
24
- }
25
- }
26
- x.report {
22
+ times.times { Yajl::HttpStream.get(uri) }
23
+ end
24
+ x.report do
27
25
  puts "JSON.parser"
28
- times.times {
29
- JSON.parse(Net::HTTP.get_response(uri).body, :max_nesting => false)
30
- }
31
- }
32
- }
26
+ times.times { JSON.parse(Net::HTTP.get_response(uri).body, max_nesting: false) }
27
+ end
28
+ end
@@ -1,133 +1,93 @@
1
- require 'rubygems'
2
- require 'benchmark'
3
- require 'yaml'
4
- require 'yajl'
5
- require 'ffi_yajl'
1
+ require "rubygems" unless defined?(Gem)
2
+ require "benchmark" unless defined?(Benchmark)
3
+ require "yajl"
4
+ require_relative "../../ffi_yajl"
6
5
  if !defined?(RUBY_ENGINE) || RUBY_ENGINE !~ /jruby/
7
- if ENV['FORCE_FFI_YAJL'] != 'ext'
8
- begin
9
- require 'yajl'
10
- rescue Exception
11
- puts "INFO: yajl-ruby not installed"
12
- end
13
- else
14
- puts "INFO: skipping yajl-ruby because we're using the C extension"
6
+ begin
7
+ require "yajl"
8
+ rescue LoadError
9
+ puts "INFO: yajl-ruby not installed"
15
10
  end
16
11
  else
17
12
  puts "INFO: skipping yajl-ruby on jruby"
18
13
  end
19
14
  begin
20
- require 'json'
21
- rescue LoadError
22
- end
23
- begin
24
- require 'psych'
15
+ require "json" unless defined?(JSON)
25
16
  rescue LoadError
26
17
  end
27
18
  begin
28
- require 'active_support'
19
+ require "oj"
29
20
  rescue LoadError
30
21
  end
31
22
 
32
- class FFI_Yajl::Benchmark::Parse
33
-
34
- def run
35
- filename = File.expand_path(File.join(File.dirname(__FILE__), "subjects", "item.json"))
36
- json = File.new(filename, 'r')
37
- json_str = json.read
23
+ module FFI_Yajl
24
+ class Benchmark
25
+ class Parse
26
+ def run
27
+ filename = File.expand_path(File.join(File.dirname(__FILE__), "subjects", "item.json"))
28
+ json = File.new(filename, "r")
29
+ json_str = json.read
38
30
 
39
- times = ARGV[1] ? ARGV[1].to_i : 10_000
40
- puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n"
41
- Benchmark.bmbm { |x|
42
- x.report {
43
- puts "FFI_Yajl::Parser.parse (from a String)"
44
- times.times {
45
- FFI_Yajl::Parser.parse(json_str)
46
- }
47
- }
48
- # ffi_parser = FFI_Yajl::Parser.new
49
- # x.report {
50
- # puts "FFI_Yajl::Parser#parse (from a String)"
51
- # times.times {
52
- # json.rewind
53
- # ffi_parser.parse(json.read)
54
- # }
55
- # }
56
- if defined?(Yajl::Parser)
57
- x.report {
58
- puts "Yajl::Parser.parse (from a String)"
59
- times.times {
60
- Yajl::Parser.parse(json_str)
61
- }
62
- }
63
- io_parser = Yajl::Parser.new
64
- io_parser.on_parse_complete = lambda {|obj|} if times > 1
65
- x.report {
66
- puts "Yajl::Parser#parse (from an IO)"
67
- times.times {
68
- json.rewind
69
- io_parser.parse(json)
70
- }
71
- }
72
- string_parser = Yajl::Parser.new
73
- string_parser.on_parse_complete = lambda {|obj|} if times > 1
74
- x.report {
75
- puts "Yajl::Parser#parse (from a String)"
76
- times.times {
77
- json.rewind
78
- string_parser.parse(json_str)
79
- }
80
- }
81
- end
82
- if defined?(JSON)
83
- x.report {
84
- puts "JSON.parse"
85
- times.times {
86
- json.rewind
87
- JSON.parse(json.read, :max_nesting => false)
88
- }
89
- }
31
+ times = ARGV[1] ? ARGV[1].to_i : 10_000
32
+ puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n"
33
+ ::Benchmark.bmbm do |x|
34
+ x.report do
35
+ puts "FFI_Yajl::Parser.parse (from a String)"
36
+ times.times { FFI_Yajl::Parser.parse(json_str) }
37
+ end
38
+ # ffi_parser = FFI_Yajl::Parser.new
39
+ # x.report {
40
+ # puts "FFI_Yajl::Parser#parse (from a String)"
41
+ # times.times {
42
+ # json.rewind
43
+ # ffi_parser.parse(json.read)
44
+ # }
45
+ # }
46
+ if defined?(Yajl::Parser)
47
+ x.report do
48
+ puts "Yajl::Parser.parse (from a String)"
49
+ times.times { Yajl::Parser.parse(json_str) }
50
+ end
51
+ io_parser = Yajl::Parser.new
52
+ io_parser.on_parse_complete = ->(obj) {} if times > 1
53
+ x.report do
54
+ puts "Yajl::Parser#parse (from an IO)"
55
+ times.times do
56
+ json.rewind
57
+ io_parser.parse(json)
58
+ end
59
+ end
60
+ string_parser = Yajl::Parser.new
61
+ string_parser.on_parse_complete = ->(obj) {} if times > 1
62
+ x.report do
63
+ puts "Yajl::Parser#parse (from a String)"
64
+ times.times do
65
+ json.rewind
66
+ string_parser.parse(json_str)
67
+ end
68
+ end
69
+ end
70
+ if defined?(Oj)
71
+ x.report do
72
+ puts "Oj.load"
73
+ times.times do
74
+ json.rewind
75
+ Oj.load(json.read)
76
+ end
77
+ end
78
+ end
79
+ if defined?(JSON)
80
+ x.report do
81
+ puts "JSON.parse"
82
+ times.times do
83
+ json.rewind
84
+ JSON.parse(json.read, max_nesting: false)
85
+ end
86
+ end
87
+ end
88
+ end
89
+ json.close
90
90
  end
91
- if defined?(ActiveSupport::JSON)
92
- x.report {
93
- puts "ActiveSupport::JSON.decode"
94
- times.times {
95
- json.rewind
96
- ActiveSupport::JSON.decode(json.read)
97
- }
98
- }
99
- end
100
- x.report {
101
- puts "YAML.load (from an IO)"
102
- times.times {
103
- json.rewind
104
- YAML.load(json)
105
- }
106
- }
107
- x.report {
108
- puts "YAML.load (from a String)"
109
- times.times {
110
- YAML.load(json_str)
111
- }
112
- }
113
- if defined?(Psych)
114
- x.report {
115
- puts "Psych.load (from an IO)"
116
- times.times {
117
- json.rewind
118
- Psych.load(json)
119
- }
120
- }
121
- x.report {
122
- puts "Psych.load (from a String)"
123
- times.times {
124
- Psych.load(json_str)
125
- }
126
- }
127
- end
128
- }
129
- json.close
130
-
91
+ end
131
92
  end
132
93
  end
133
-
@@ -1,50 +1,50 @@
1
- $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..')
2
- $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
1
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + "/..")
2
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
3
3
 
4
- require 'rubygems'
5
- require 'benchmark'
6
- require 'yajl'
4
+ require "rubygems" unless defined?(Gem)
5
+ require "benchmark" unless defined?(Benchmark)
6
+ require "yajl"
7
7
  begin
8
- require 'json'
8
+ require "json" unless defined?(JSON)
9
9
  rescue LoadError
10
10
  end
11
11
 
12
12
  # JSON section
13
- filename = 'benchmark/subjects/ohai.json'
14
- marshal_filename = 'benchmark/subjects/ohai.marshal_dump'
15
- json = File.new(filename, 'r')
16
- marshal_file = File.new(marshal_filename, 'r')
13
+ filename = "benchmark/subjects/ohai.json"
14
+ marshal_filename = "benchmark/subjects/ohai.marshal_dump"
15
+ json = File.new(filename, "r")
16
+ marshal_file = File.new(marshal_filename, "r")
17
17
 
18
18
  hash = {}
19
19
 
20
20
  times = ARGV[0] ? ARGV[0].to_i : 1000
21
21
  puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n"
22
- Benchmark.bmbm { |x|
23
- x.report {
22
+ Benchmark.bmbm do |x|
23
+ x.report do
24
24
  puts "Yajl::Parser#parse"
25
25
  yajl = Yajl::Parser.new
26
- yajl.on_parse_complete = lambda {|obj|} if times > 1
27
- times.times {
26
+ yajl.on_parse_complete = ->(obj) {} if times > 1
27
+ times.times do
28
28
  json.rewind
29
29
  hash = yajl.parse(json)
30
- }
31
- }
30
+ end
31
+ end
32
32
  if defined?(JSON)
33
- x.report {
33
+ x.report do
34
34
  puts "JSON.parse"
35
- times.times {
35
+ times.times do
36
36
  json.rewind
37
- JSON.parse(json.read, :max_nesting => false)
38
- }
39
- }
37
+ JSON.parse(json.read, max_nesting: false)
38
+ end
39
+ end
40
40
  end
41
- x.report {
41
+ x.report do
42
42
  puts "Marshal.load"
43
- times.times {
43
+ times.times do
44
44
  marshal_file.rewind
45
45
  Marshal.load(marshal_file)
46
- }
47
- }
48
- }
46
+ end
47
+ end
48
+ end
49
49
  json.close
50
- marshal_file.close
50
+ marshal_file.close
@@ -1,55 +1,55 @@
1
- $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..')
2
- $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
1
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + "/..")
2
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
3
3
 
4
- require 'rubygems'
5
- require 'benchmark'
6
- require 'yajl'
4
+ require "rubygems" unless defined?(Gem)
5
+ require "benchmark" unless defined?(Benchmark)
6
+ require "yajl"
7
7
  begin
8
- require 'json'
8
+ require "json" unless defined?(JSON)
9
9
  rescue LoadError
10
10
  end
11
- require 'yaml'
11
+ require "yaml" unless defined?(YAML)
12
12
 
13
13
  # JSON section
14
- filename = 'benchmark/subjects/ohai.json'
15
- json = File.new(filename, 'r')
14
+ filename = "benchmark/subjects/ohai.json"
15
+ json = File.new(filename, "r")
16
16
 
17
17
  times = ARGV[0] ? ARGV[0].to_i : 1000
18
18
  puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n"
19
- Benchmark.bmbm { |x|
19
+ Benchmark.bmbm do |x|
20
20
  parser = Yajl::Parser.new
21
- parser.on_parse_complete = lambda {|obj|} if times > 1
22
- x.report {
21
+ parser.on_parse_complete = ->(obj) {} if times > 1
22
+ x.report do
23
23
  puts "Yajl::Parser#parse"
24
- times.times {
24
+ times.times do
25
25
  json.rewind
26
26
  parser.parse(json)
27
- }
28
- }
27
+ end
28
+ end
29
29
  if defined?(JSON)
30
- x.report {
30
+ x.report do
31
31
  puts "JSON.parse"
32
- times.times {
32
+ times.times do
33
33
  json.rewind
34
- JSON.parse(json.read, :max_nesting => false)
35
- }
36
- }
34
+ JSON.parse(json.read, max_nesting: false)
35
+ end
36
+ end
37
37
  end
38
- }
38
+ end
39
39
  json.close
40
40
 
41
41
  # YAML section
42
- filename = 'benchmark/subjects/ohai.yml'
43
- yaml = File.new(filename, 'r')
42
+ filename = "benchmark/subjects/ohai.yml"
43
+ yaml = File.new(filename, "r")
44
44
 
45
45
  puts "Starting benchmark parsing #{File.size(filename)} bytes of YAML data #{times} times\n\n"
46
- Benchmark.bmbm { |x|
47
- x.report {
46
+ Benchmark.bmbm do |x|
47
+ x.report do
48
48
  puts "YAML.load_stream"
49
- times.times {
49
+ times.times do
50
50
  yaml.rewind
51
51
  YAML.load(yaml)
52
- }
53
- }
54
- }
55
- yaml.close
52
+ end
53
+ end
54
+ end
55
+ yaml.close
@@ -1,37 +1,33 @@
1
1
  # Portions Originally Copyright (c) 2008-2011 Brian Lopez - http://github.com/brianmario
2
2
  # See MIT-LICENSE
3
3
 
4
- require 'rubygems'
5
- require 'ffi_yajl'
4
+ require "rubygems" unless defined?(Gem)
5
+ require_relative "../../ffi_yajl"
6
6
  begin
7
- require 'perftools'
8
- rescue Exception
7
+ require "perftools"
8
+ rescue LoadError
9
9
  puts "INFO: perftools.rb gem not installed"
10
10
  end
11
11
 
12
- ENV['CPUPROFILE_FREQUENCY'] = "4000"
12
+ ENV["CPUPROFILE_FREQUENCY"] = "4000"
13
13
 
14
14
  module FFI_Yajl
15
15
  class Benchmark
16
16
  class ParseProfile
17
-
18
17
  def run
19
- if defined?(PerfTools)
20
- filename = File.expand_path(File.join(File.dirname(__FILE__), "subjects", "ohai.json"))
21
- json = File.new(filename, 'r').read
18
+ return if defined?(PerfTools)
19
+
20
+ filename = File.expand_path(File.join(File.dirname(__FILE__), "subjects", "ohai.json"))
21
+ json = File.new(filename, "r").read
22
22
 
23
- times = 1000
24
- puts "Starting profiling encoding #{filename} #{times} times\n\n"
23
+ times = 1000
24
+ puts "Starting profiling encoding #{filename} #{times} times\n\n"
25
25
 
26
- PerfTools::CpuProfiler.start("/tmp/ffi_yajl_encode_profile.out") do
27
- times.times {
28
- output = FFI_Yajl::Parser.parse(json)
29
- }
30
- end
31
- system("pprof.rb --text /tmp/ffi_yajl_encode_profile.out")
26
+ PerfTools::CpuProfiler.start("/tmp/ffi_yajl_encode_profile.out") do
27
+ times.times { FFI_Yajl::Parser.parse(json) }
32
28
  end
29
+ system("pprof.rb --text /tmp/ffi_yajl_encode_profile.out")
33
30
  end
34
-
35
31
  end
36
32
  end
37
33
  end
@@ -1,39 +1,34 @@
1
1
  # Portions Originally Copyright (c) 2008-2011 Brian Lopez - http://github.com/brianmario
2
2
  # See MIT-LICENSE
3
3
 
4
- require 'rubygems'
5
- require 'ffi_yajl'
4
+ require "rubygems" unless defined?(Gem)
5
+ require_relative "../../ffi_yajl"
6
6
 
7
7
  module FFI_Yajl
8
8
  class Benchmark
9
9
  class ParseProfileRubyProf
10
-
11
10
  def run
12
11
  begin
13
- require 'ruby-prof'
14
- rescue Exception
12
+ require "ruby-prof"
13
+ rescue LoadError
15
14
  puts "INFO: perftools.rb gem not installed"
16
15
  end
17
16
 
18
- if defined?(RubyProf)
19
- filename = File.expand_path(File.join(File.dirname(__FILE__), "subjects", "ohai.json"))
20
- json = File.new(filename, 'r').read
21
-
22
- times = 1000
23
- puts "Starting profiling encoding #{filename} #{times} times\n\n"
17
+ return if defined?(RubyProf)
24
18
 
25
- result = RubyProf.profile do
26
- times.times {
27
- output = FFI_Yajl::Parser.parse(json)
28
- }
29
- end
19
+ filename = File.expand_path(File.join(File.dirname(__FILE__), "subjects", "ohai.json"))
20
+ json = File.new(filename, "r").read
30
21
 
31
- printer = RubyProf::GraphPrinter.new(result)
32
- printer.print(STDOUT, {})
22
+ times = 1000
23
+ puts "Starting profiling encoding #{filename} #{times} times\n\n"
33
24
 
25
+ result = RubyProf.profile do
26
+ times.times { FFI_Yajl::Parser.parse(json) }
34
27
  end
35
- end
36
28
 
29
+ printer = RubyProf::GraphPrinter.new(result)
30
+ printer.print(STDOUT, {})
31
+ end
37
32
  end
38
33
  end
39
34
  end