json_pure 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/CHANGES +9 -0
  2. data/Rakefile +47 -53
  3. data/VERSION +1 -1
  4. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log +52 -0
  5. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +1000 -0
  6. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +1001 -0
  7. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +900 -0
  8. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +901 -0
  9. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +1000 -0
  10. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +1001 -0
  11. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log +261 -0
  12. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +1000 -0
  13. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +1001 -0
  14. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +1000 -0
  15. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +1001 -0
  16. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +1000 -0
  17. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +1001 -0
  18. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log +262 -0
  19. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +1000 -0
  20. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +1001 -0
  21. data/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log +82 -0
  22. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log +34 -0
  23. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +900 -0
  24. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +901 -0
  25. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log +81 -0
  26. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +1000 -0
  27. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +1001 -0
  28. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log +82 -0
  29. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +1000 -0
  30. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +1001 -0
  31. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log +82 -0
  32. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +1000 -0
  33. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +1001 -0
  34. data/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log +82 -0
  35. data/benchmarks/generator_benchmark.rb +162 -0
  36. data/benchmarks/parser_benchmark.rb +193 -0
  37. data/bin/edit_json.rb +0 -1
  38. data/bin/prettify_json.rb +0 -1
  39. data/doc-templates/main.txt +284 -0
  40. data/ext/json/ext/generator/extconf.rb +2 -0
  41. data/ext/json/ext/generator/generator.c +62 -18
  42. data/ext/json/ext/parser/extconf.rb +2 -0
  43. data/ext/json/ext/parser/parser.c +128 -81
  44. data/ext/json/ext/parser/parser.rl +31 -7
  45. data/ext/json/ext/parser/unicode.c +4 -4
  46. data/lib/json/add/core.rb +1 -1
  47. data/lib/json/editor.rb +11 -2
  48. data/lib/json/ext.rb +2 -0
  49. data/lib/json/pure/generator.rb +77 -41
  50. data/lib/json/pure/parser.rb +6 -2
  51. data/lib/json/pure.rb +2 -0
  52. data/lib/json/version.rb +1 -1
  53. data/lib/json.rb +0 -221
  54. data/tests/test_json.rb +7 -4
  55. data/tests/test_json_addition.rb +8 -5
  56. data/tests/test_json_fixtures.rb +6 -2
  57. data/tests/test_json_generate.rb +8 -2
  58. data/tests/test_json_rails.rb +30 -2
  59. data/tests/test_json_unicode.rb +8 -7
  60. data/tools/fuzz.rb +0 -1
  61. data/tools/server.rb +0 -1
  62. metadata +46 -9
  63. data/benchmarks/benchmark.txt +0 -133
  64. data/benchmarks/benchmark_generator.rb +0 -48
  65. data/benchmarks/benchmark_parser.rb +0 -26
  66. data/benchmarks/benchmark_rails.rb +0 -26
  67. data/tests/runner.rb +0 -25
data/CHANGES CHANGED
@@ -1,3 +1,12 @@
1
+ 2009-04-01 (1.1.4)
2
+ * Fixed a bug in the creation of serialized generic rails objects reported by
3
+ Friedrich Graeter <graeter@hydrixos.org>.
4
+ * Deleted tests/runner.rb, we're using testrb instead.
5
+ * Editor supports Infinity in numbers now.
6
+ * Made some changes in order to get the library to compile/run under Ruby
7
+ 1.9.
8
+ * Improved speed of the code path for the fast_generate method in the pure
9
+ variant.
1
10
  2008-07-10 (1.1.3)
2
11
  * Wesley Beary <monki@geemus.com> reported a bug in json/add/core's DateTime
3
12
  handling: If the nominator and denominator of the offset were divisible by
data/Rakefile CHANGED
@@ -19,12 +19,12 @@ PKG_FILES << EXT_PARSER_SRC
19
19
  EXT_GENERATOR_DIR = "#{EXT_ROOT_DIR}/generator"
20
20
  EXT_GENERATOR_DL = "#{EXT_ROOT_DIR}/generator.#{CONFIG['DLEXT']}"
21
21
  EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
22
- RAGEL_CODEGEN = %w[rlcodegen rlgen-cd].find { |c| system(c, '-v') }
23
- RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd].find { |c| system(c, '-v') }
22
+ RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find { |c| system(c, '-v') }
23
+ RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find { |c| system(c, '-v') }
24
24
  RAGEL_PATH = "#{EXT_PARSER_DIR}/parser.rl"
25
25
  CLEAN.include 'doc', 'coverage', FileList['diagrams/*.*'],
26
26
  FileList["ext/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def}"],
27
- FileList["ext/**/Makefile"]
27
+ FileList["ext/**/{Makefile,mkmf.log}"]
28
28
 
29
29
 
30
30
  desc "Installing library (pure)"
@@ -55,10 +55,10 @@ file EXT_PARSER_DL => EXT_PARSER_SRC do
55
55
  cd EXT_PARSER_DIR do
56
56
  ruby 'extconf.rb'
57
57
  if ON_WINDOWS
58
- sh 'nmake'
59
- sh "mt -manifest parser.#{CONFIG['DLEXT']}.manifest -outputresource:parser.#{CONFIG['DLEXT']};2"
58
+ system 'nmake'
59
+ system "mt -manifest parser.#{CONFIG['DLEXT']}.manifest -outputresource:parser.#{CONFIG['DLEXT']};2"
60
60
  else
61
- sh 'make'
61
+ system 'make'
62
62
  end
63
63
  end
64
64
  cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
@@ -68,10 +68,10 @@ file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
68
68
  cd EXT_GENERATOR_DIR do
69
69
  ruby 'extconf.rb'
70
70
  if ON_WINDOWS
71
- sh 'nmake'
72
- sh "mt -manifest generator.#{CONFIG['DLEXT']}.manifest -outputresource:generator.#{CONFIG['DLEXT']};2"
71
+ system 'nmake'
72
+ system "mt -manifest generator.#{CONFIG['DLEXT']}.manifest -outputresource:generator.#{CONFIG['DLEXT']};2"
73
73
  else
74
- sh 'make'
74
+ system 'make'
75
75
  end
76
76
  end
77
77
  cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
@@ -86,7 +86,11 @@ end
86
86
 
87
87
  file EXT_PARSER_SRC => RAGEL_PATH do
88
88
  cd EXT_PARSER_DIR do
89
- sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
89
+ if RAGEL_CODEGEN == 'ragel'
90
+ system "ragel parser.rl -G2 -o parser.c"
91
+ else
92
+ system "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
93
+ end
90
94
  end
91
95
  end
92
96
 
@@ -96,7 +100,11 @@ task :ragel_dot_ps do
96
100
  specs = []
97
101
  File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
98
102
  for s in specs
99
- sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
103
+ if RAGEL_DOTGEN == 'ragel'
104
+ system "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tps -o#{root}/#{s}.ps"
105
+ else
106
+ system "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
107
+ end
100
108
  end
101
109
  end
102
110
 
@@ -106,7 +114,11 @@ task :ragel_dot_png do
106
114
  specs = []
107
115
  File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
108
116
  for s in specs
109
- sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
117
+ if RAGEL_DOTGEN == 'ragel'
118
+ system "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tpng -o#{root}/#{s}.png"
119
+ else
120
+ system "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
121
+ end
110
122
  end
111
123
  end
112
124
 
@@ -115,57 +127,39 @@ task :ragel_dot => [ :ragel_dot_png, :ragel_dot_ps ]
115
127
 
116
128
  desc "Testing library (pure ruby)"
117
129
  task :test_pure => :clean do
118
- ruby '-v -I lib tests/runner.rb'
130
+ ENV['JSON'] = 'pure'
131
+ ENV['RUBYOPT'] = "-Iext:lib #{ENV['RUBYOPT']}"
132
+ system "testrb #{Dir['tests/*.rb'] * ' '}"
119
133
  end
120
134
 
121
135
  desc "Testing library (extension)"
122
136
  task :test_ext => :compile do
123
- ruby '-v -I ext:lib tests/runner.rb'
137
+ ENV['JSON'] = 'ext'
138
+ ENV['RUBYOPT'] = "-Iext:lib #{ENV['RUBYOPT']}"
139
+ system "testrb #{Dir['tests/*.rb'] * ' '}"
124
140
  end
125
141
 
126
- desc "Benchmarking parser (pure)"
127
- task :benchmark_parser_pure do
128
- ruby '-I lib benchmarks/benchmark_parser.rb pure'
142
+ desc "Benchmarking parser"
143
+ task :benchmark_parser do
144
+ ruby 'benchmarks/parser_benchmark.rb'
129
145
  end
130
146
 
131
- desc "Benchmarking generator (pure)"
132
- task :benchmark_generator_pure do
133
- ruby '-I lib benchmarks/benchmark_generator.rb pure'
134
- ruby 'benchmarks/benchmark_rails.rb'
147
+ desc "Benchmarking generator"
148
+ task :benchmark_generator do
149
+ ruby 'benchmarks/generator_benchmark.rb'
135
150
  end
136
151
 
137
- desc "Benchmarking library (pure)"
138
- task :benchmark_pure => [ :benchmark_parser_pure, :benchmark_generator_pure ]
139
-
140
- desc "Benchmarking parser (extension)"
141
- task :benchmark_parser_ext => :compile do
142
- ruby '-I ext:lib benchmarks/benchmark_parser.rb ext'
143
- end
144
-
145
- desc "Benchmarking generator (extension)"
146
- task :benchmark_generator_ext => :compile do
147
- ruby '-I ext:lib benchmarks/benchmark_generator.rb ext'
148
- ruby 'benchmarks/benchmark_rails.rb'
149
- end
150
-
151
- desc "Benchmarking library (extension)"
152
- task :benchmark_ext => [ :benchmark_parser_ext, :benchmark_generator_ext ]
153
-
154
- task :benchmark do
155
- puts "Benchmarking extension variant"
156
- Rake::Task[:benchmark_ext].invoke
157
- puts "Benchmarking pure variant"
158
- Rake::Task[:benchmark_pure].invoke
159
- end
152
+ desc "Benchmarking library"
153
+ task :benchmark => [ :benchmark_parser, :benchmark_generator ]
160
154
 
161
- desc "Testing library with coverage" # XXX broken
162
- task :coverage do
163
- system 'RUBYOPT="" rcov -x tests -Ilib tests/runner.rb'
155
+ desc "Clean benchmark data"
156
+ task :clean_benchmark_data do
157
+ rm_rf Dir['benchmarks/data/*.{dat,log}']
164
158
  end
165
159
 
166
160
  desc "Create RDOC documentation"
167
161
  task :doc => [ :version, EXT_PARSER_SRC ] do
168
- sh "rdoc -m JSON -S -o doc lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
162
+ system "rdoc -S -o doc -m main.txt doc-templates/main.txt lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
169
163
  end
170
164
 
171
165
  if defined? Gem
@@ -187,7 +181,7 @@ if defined? Gem
187
181
  s.rdoc_options <<
188
182
  '--title' << 'JSON -- A JSON implemention' <<
189
183
  '--main' << 'JSON' << '--line-numbers'
190
- s.test_files << 'tests/runner.rb'
184
+ s.test_files.concat Dir['tests/*.rb']
191
185
 
192
186
  s.author = "Florian Frank"
193
187
  s.email = "flori@ping.de"
@@ -224,7 +218,7 @@ if defined? Gem
224
218
  s.rdoc_options <<
225
219
  '--title' << 'JSON -- A JSON implemention' <<
226
220
  '--main' << 'JSON' << '--line-numbers'
227
- s.test_files << 'tests/runner.rb'
221
+ s.test_files.concat Dir['tests/*.rb']
228
222
 
229
223
  s.author = "Florian Frank"
230
224
  s.email = "flori@ping.de"
@@ -262,7 +256,7 @@ if defined? Gem
262
256
  s.rdoc_options <<
263
257
  '--title' << 'JSON -- A JSON implemention' <<
264
258
  '--main' << 'JSON' << '--line-numbers'
265
- s.test_files << 'tests/runner.rb'
259
+ s.test_files.concat Dir['tests/*.rb']
266
260
 
267
261
  s.author = "Florian Frank"
268
262
  s.email = "flori@ping.de"
@@ -276,9 +270,9 @@ if defined? Gem
276
270
  end
277
271
  end
278
272
 
279
- task :mrproper => [ :ragel_clean, :clean ] do
273
+ task :mrproper => [ :ragel_clean, :clean, :clean_benchmark_data ] do
280
274
  for dir in [ EXT_PARSER_DIR, EXT_GENERATOR_DIR ]
281
- cd(dir) { rm_f 'Makefile' }
275
+ cd(dir) { rm_f %w[Makefile mkmf.log] }
282
276
  end
283
277
  end
284
278
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.3
1
+ 1.1.4
@@ -0,0 +1,52 @@
1
+ ========================== 2009-04-01T16:54:14 CEST ===========================
2
+
3
+ Comparing times (call_time_mean):
4
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
5
+ 547.354332608 ( real) -> 15.090x
6
+ 0.001826970
7
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
8
+ 443.968212317 ( real) -> 12.240x
9
+ 0.002252414
10
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
11
+ 375.104545883 ( real) -> 10.341x
12
+ 0.002665923
13
+ 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
14
+ 49.978706968 ( real) -> 1.378x
15
+ 0.020008521
16
+ 5 GeneratorBenchmarkRails#generator 1000 repeats:
17
+ 38.531868759 ( real) -> 1.062x
18
+ 0.025952543
19
+ 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
20
+ 36.927649925 ( real) -> 1.018x 7 (>=3859)
21
+ 0.027079979
22
+ 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
23
+ 36.272134441 ( real) -> 1.000x 6 (>=3859)
24
+ 0.027569373
25
+ calls/sec ( time) -> speed covers
26
+ secs/call
27
+
28
+ Comparing times (call_time_median):
29
+ 1 GeneratorBenchmarkExt#generator_fast 1000 repeats:
30
+ 708.258020939 ( real) -> 16.547x
31
+ 0.001411915
32
+ 2 GeneratorBenchmarkExt#generator_safe 1000 repeats:
33
+ 569.105020353 ( real) -> 13.296x
34
+ 0.001757145
35
+ 3 GeneratorBenchmarkExt#generator_pretty 900 repeats:
36
+ 482.825371244 ( real) -> 11.280x
37
+ 0.002071142
38
+ 4 GeneratorBenchmarkPure#generator_fast 1000 repeats:
39
+ 62.717626652 ( real) -> 1.465x
40
+ 0.015944481
41
+ 5 GeneratorBenchmarkRails#generator 1000 repeats:
42
+ 43.965681162 ( real) -> 1.027x
43
+ 0.022745013
44
+ 6 GeneratorBenchmarkPure#generator_safe 1000 repeats:
45
+ 43.929073409 ( real) -> 1.026x 7 (>=3859)
46
+ 0.022763968
47
+ 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats:
48
+ 42.802514491 ( real) -> 1.000x 6 (>=3859)
49
+ 0.023363113
50
+ calls/sec ( time) -> speed covers
51
+ secs/call
52
+ ===============================================================================