libxml-ruby 2.9.0 → 3.0.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 (139) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY +811 -790
  3. data/LICENSE +20 -20
  4. data/MANIFEST +166 -166
  5. data/README.rdoc +188 -184
  6. data/Rakefile +1 -1
  7. data/ext/libxml/libxml.c +80 -80
  8. data/ext/libxml/ruby_libxml.h +75 -75
  9. data/ext/libxml/ruby_xml.c +0 -84
  10. data/ext/libxml/ruby_xml.h +0 -10
  11. data/ext/libxml/ruby_xml_attr.h +12 -12
  12. data/ext/libxml/ruby_xml_attr_decl.c +153 -153
  13. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  14. data/ext/libxml/ruby_xml_attributes.c +275 -275
  15. data/ext/libxml/ruby_xml_attributes.h +15 -15
  16. data/ext/libxml/ruby_xml_document.c +21 -27
  17. data/ext/libxml/ruby_xml_document.h +11 -11
  18. data/ext/libxml/ruby_xml_dtd.c +2 -13
  19. data/ext/libxml/ruby_xml_dtd.h +9 -9
  20. data/ext/libxml/ruby_xml_error.c +996 -996
  21. data/ext/libxml/ruby_xml_error.h +12 -12
  22. data/ext/libxml/ruby_xml_html_parser.c +89 -92
  23. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  24. data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
  25. data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
  26. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  27. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  28. data/ext/libxml/ruby_xml_io.c +0 -1
  29. data/ext/libxml/ruby_xml_io.h +10 -10
  30. data/ext/libxml/ruby_xml_namespace.c +153 -153
  31. data/ext/libxml/ruby_xml_namespace.h +10 -10
  32. data/ext/libxml/ruby_xml_namespaces.c +293 -293
  33. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  34. data/ext/libxml/ruby_xml_node.c +100 -143
  35. data/ext/libxml/ruby_xml_node.h +13 -11
  36. data/ext/libxml/ruby_xml_parser.c +91 -94
  37. data/ext/libxml/ruby_xml_parser.h +12 -12
  38. data/ext/libxml/ruby_xml_parser_context.h +10 -10
  39. data/ext/libxml/ruby_xml_parser_options.c +66 -66
  40. data/ext/libxml/ruby_xml_parser_options.h +12 -12
  41. data/ext/libxml/ruby_xml_reader.c +45 -37
  42. data/ext/libxml/ruby_xml_reader.h +17 -17
  43. data/ext/libxml/ruby_xml_relaxng.h +10 -10
  44. data/ext/libxml/ruby_xml_sax2_handler.c +3 -3
  45. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  46. data/ext/libxml/ruby_xml_sax_parser.c +116 -120
  47. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  48. data/ext/libxml/ruby_xml_schema.h +809 -809
  49. data/ext/libxml/ruby_xml_schema_attribute.c +109 -109
  50. data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
  51. data/ext/libxml/ruby_xml_schema_element.c +94 -94
  52. data/ext/libxml/ruby_xml_schema_element.h +14 -14
  53. data/ext/libxml/ruby_xml_schema_facet.c +52 -52
  54. data/ext/libxml/ruby_xml_schema_facet.h +13 -13
  55. data/ext/libxml/ruby_xml_schema_type.c +259 -259
  56. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  57. data/ext/libxml/ruby_xml_version.h +9 -9
  58. data/ext/libxml/ruby_xml_writer.c +1136 -1136
  59. data/ext/libxml/ruby_xml_writer.h +10 -10
  60. data/ext/libxml/ruby_xml_xinclude.c +16 -16
  61. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  62. data/ext/libxml/ruby_xml_xpath.c +42 -36
  63. data/ext/libxml/ruby_xml_xpath.h +13 -13
  64. data/ext/libxml/ruby_xml_xpath_context.c +1 -1
  65. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  66. data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
  67. data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
  68. data/ext/libxml/ruby_xml_xpath_object.c +5 -2
  69. data/ext/libxml/ruby_xml_xpath_object.h +17 -17
  70. data/ext/libxml/ruby_xml_xpointer.c +99 -99
  71. data/ext/libxml/ruby_xml_xpointer.h +11 -11
  72. data/ext/vc/libxml_ruby.sln +17 -15
  73. data/lib/libxml.rb +1 -6
  74. data/lib/libxml/node.rb +2 -78
  75. data/lib/libxml/parser.rb +0 -266
  76. data/lib/libxml/sax_parser.rb +0 -17
  77. data/lib/libxml/schema.rb +66 -66
  78. data/lib/libxml/schema/attribute.rb +19 -19
  79. data/lib/libxml/schema/element.rb +27 -27
  80. data/lib/libxml/schema/type.rb +29 -29
  81. data/script/benchmark/depixelate +634 -634
  82. data/script/benchmark/hamlet.xml +9054 -9054
  83. data/script/benchmark/parsecount +170 -170
  84. data/script/benchmark/throughput +41 -41
  85. data/script/test +6 -6
  86. data/test/c14n/given/example-1.xml +14 -14
  87. data/test/c14n/given/example-2.xml +11 -11
  88. data/test/c14n/given/example-3.xml +18 -18
  89. data/test/c14n/given/example-4.xml +9 -9
  90. data/test/c14n/given/example-5.xml +12 -12
  91. data/test/c14n/given/example-6.xml +2 -2
  92. data/test/c14n/given/example-7.xml +11 -11
  93. data/test/c14n/given/example-8.xml +11 -11
  94. data/test/c14n/given/example-8.xpath +9 -9
  95. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  96. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  97. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  98. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  99. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  100. data/test/c14n/result/with-comments/example-1 +5 -5
  101. data/test/c14n/result/with-comments/example-2 +10 -10
  102. data/test/c14n/result/with-comments/example-3 +13 -13
  103. data/test/c14n/result/with-comments/example-4 +8 -8
  104. data/test/c14n/result/with-comments/example-5 +3 -3
  105. data/test/c14n/result/without-comments/example-1 +3 -3
  106. data/test/c14n/result/without-comments/example-2 +10 -10
  107. data/test/c14n/result/without-comments/example-3 +13 -13
  108. data/test/c14n/result/without-comments/example-4 +8 -8
  109. data/test/c14n/result/without-comments/example-5 +2 -2
  110. data/test/model/atom.xml +12 -12
  111. data/test/model/bands.iso-8859-1.xml +4 -4
  112. data/test/model/bands.utf-8.xml +4 -4
  113. data/test/model/bands.xml +4 -4
  114. data/test/model/books.xml +153 -153
  115. data/test/model/merge_bug_data.xml +58 -58
  116. data/test/model/ruby-lang.html +238 -238
  117. data/test/model/rubynet.xml +79 -79
  118. data/test/model/shiporder.rnc +28 -28
  119. data/test/model/shiporder.rng +86 -86
  120. data/test/model/shiporder.xml +22 -22
  121. data/test/model/shiporder.xsd +39 -39
  122. data/test/model/soap.xml +27 -27
  123. data/test/model/xinclude.xml +4 -4
  124. data/test/tc_attributes.rb +0 -6
  125. data/test/tc_error.rb +157 -158
  126. data/test/tc_node.rb +33 -17
  127. data/test/tc_node_edit.rb +0 -15
  128. data/test/tc_node_pi.rb +39 -39
  129. data/test/tc_parser.rb +0 -48
  130. data/test/tc_reader.rb +12 -53
  131. data/test/tc_writer.rb +447 -447
  132. data/test/tc_xpath.rb +1 -1
  133. data/test/test_helper.rb +2 -2
  134. metadata +3 -8
  135. data/ext/libxml/extconf.h +0 -4
  136. data/lib/libxml/ns.rb +0 -22
  137. data/lib/libxml/properties.rb +0 -23
  138. data/lib/libxml/reader.rb +0 -29
  139. data/lib/libxml/xpath_object.rb +0 -16
@@ -1,170 +1,170 @@
1
- #!/usr/bin/env ruby
2
- #
3
- # Each test has an XML Parser open a 98k XML document and count one type of leaf
4
- # element (466 entries). This is repeated a total of 100 times, twice for each Parser.
5
- # Summary measurements are from the second test.
6
- #
7
- # Tests run on a MacBook Pro, Mac OS X 10.5.5, 4GB memory, 2.5 GHz Intel Core 2 Duo.
8
- #
9
- # Library versions:
10
- # hpricot 0.6.164
11
- # libxml: 0.9.2
12
- #
13
- # All benchmarks were run twice in sequence and the measurements presented here are from
14
- # the second run. Java automatically optimizes JRuby code which is run many times and the
15
- # speedup from the first to the second test is from 40 to 75%. There is no essential
16
- # difference in the speed of the C version of Ruby between the first test and the second.
17
- #
18
- # Summary:
19
- #
20
- # 100 times: Open 98k XML document and count one type of leaf element (466 entries)
21
- #
22
- # JRuby (Java 1.6.0_03-p3-Soylatte using server mode): jdom_document_builder 0.360
23
- # MRI: libxml v0.9.2 0.383
24
- # JRuby (Java 1.6.0_07): jdom_document_builder 0.401
25
- # JRuby (Java 1.5.0_16): jdom_document_builder 0.428
26
- # JRuby (Java 1.6.0_03-p3-Soylatte using server mode): hpricot 1.977
27
- # JRuby (Java 1.5.0_16): hpricot 2.027
28
- # JRuby (Java 1.6.0_07): hpricot 2.094
29
- # MRI: hpricot 2.140
30
- # JRuby (Java 1.6.0_03-p3-Soylatte using server mode): rexml 5.488
31
- # JRuby (Java 1.5.0_16): rexml 5.569
32
- # JRuby (Java 1.5.0_16): rexml 5.578
33
- # MRI: rexml 8.606
34
- #
35
- # Ruby version: MRI 1.8.6 (2008-03-03 rev 114), platform: universal-darwin9.0
36
- # --------------------------------------------------------------------------------
37
- # user system total real
38
- # rexml 8.170000 0.100000 8.270000 ( 8.606676)
39
- # hpricot 1.990000 0.040000 2.030000 ( 2.140865)
40
- # libxml 0.350000 0.020000 0.370000 ( 0.383475)
41
- #
42
- # JRuby 1.1.5 (svn r8078) on Java 1.5.0_16
43
- # --------------------------------------------------------------------------------
44
- # user system total real
45
- # rexml 5.578000 0.000000 5.578000 ( 5.578371)
46
- # hpricot 2.028000 0.000000 2.028000 ( 2.027348)
47
- # jdom_document_builder 0.429000 0.000000 0.429000 ( 0.428713)
48
- #
49
- # JRuby 1.1.5 (svn r8078) on Java 1.6.0_07
50
- # --------------------------------------------------------------------------------
51
- # user system total real
52
- # rexml 5.569000 0.000000 5.569000 ( 5.569135)
53
- # hpricot 2.094000 0.000000 2.094000 ( 2.093635)
54
- # jdom_document_builder 0.401000 0.000000 0.401000 ( 0.401115)
55
- #
56
- # JRuby 1.1.5 (svn r8078) on Java 1.6.0_07 using server mode (-J-server)
57
- # --------------------------------------------------------------------------------
58
- # user system total real
59
- # rexml 5.489000 0.000000 5.489000 ( 5.488560)
60
- # hpricot 1.977000 0.000000 1.977000 ( 1.976845)
61
- # jdom_document_builder 0.377000 0.000000 0.377000 ( 0.377808)
62
- #
63
- # JRuby 1.1.5 (svn r8078) on Java 1.6.0_03-p3 (Soylatte) using server mode (-J-server)
64
- # --------------------------------------------------------------------------------
65
- # user system total real
66
- # rexml 5.596000 0.000000 5.596000 ( 5.596212)
67
- # hpricot 1.937000 0.000000 1.937000 ( 1.937312)
68
- # jdom_document_builder 0.360000 0.000000 0.360000 ( 0.360068)
69
-
70
- require 'rubygems'
71
- require 'benchmark'
72
- require "rexml/document"
73
- require 'hpricot'
74
-
75
- if RUBY_PLATFORM =~ /java/
76
- include Java
77
- import javax.xml.parsers.DocumentBuilder
78
- import javax.xml.parsers.DocumentBuilderFactory
79
- @dbf = DocumentBuilderFactory.new_instance
80
- @ruby_info = "Ruby version: JRuby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} rev #{RUBY_PATCHLEVEL}) [i386-jruby#{JRUBY_VERSION}]"
81
- @ruby_info << ", platform: Java, version #{java.lang.System.getProperty('java.version')}"
82
- else
83
- @ruby_info = "Ruby version: MRI #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} rev #{RUBY_PATCHLEVEL})"
84
- @ruby_info << ", platform: #{RUBY_PLATFORM}"
85
-
86
- gem 'nokogiri', '>= 1.0.6'
87
- require 'nokogiri'
88
-
89
- gem 'libxml-ruby', '>= 0.9.2'
90
- require 'libxml'
91
- @xml_parser = LibXML::XML::Parser.new
92
- end
93
-
94
- file = File.expand_path(File.join(File.dirname(__FILE__), "sock_entries.xml"))
95
- @bundle_with_466_sock_entries = File.read(file)
96
-
97
- def rexml_count_socks
98
- doc = REXML::Document.new(@bundle_with_466_sock_entries).root
99
- socks = doc.elements.to_a('./sockEntries').length
100
- end
101
-
102
- unless RUBY_PLATFORM =~ /java/
103
- def nokogiri_count_socks
104
- #doc = Nokogiri(@bundle_with_466_sock_entries)
105
- #socks = doc.search('//sockEntries').length
106
- end
107
-
108
- def libxml_count_socks
109
- @xml_parser = LibXML::XML::Parser.new
110
- @xml_parser.string = @bundle_with_466_sock_entries
111
- doc = @xml_parser.parse
112
- socks = doc.find('//sockEntries').length
113
- end
114
- end
115
-
116
- def hpricot_count_socks
117
- doc = Hpricot.XML(@bundle_with_466_sock_entries)
118
- socks = doc.search("//sockEntries").length
119
- end
120
-
121
- if RUBY_PLATFORM =~ /java/
122
- def jdom_document_builder_count_socks
123
- file = File.expand_path(File.join(File.dirname(__FILE__), "sock_entries.xml"))
124
- doc = @dbf.new_document_builder.parse(file).get_document_element
125
- socks = doc.getElementsByTagName("sockEntries")
126
- socks.get_length
127
- end
128
- end
129
-
130
- n = 100
131
- test_iterations = ARGV.first.to_i
132
- test_iterations = 1 unless test_iterations > 1
133
- puts
134
- puts @ruby_info
135
- puts
136
- puts "#{n} times: Open 98k XML document and count one type of leaf element (466 entries)"
137
- puts
138
- print "running benchmark "
139
- if test_iterations == 1
140
- puts "once.\n\n"
141
- else
142
- puts "#{test_iterations} times.\n\n"
143
- end
144
- test_iterations.times do
145
- Benchmark.bmbm do |x|
146
- x.report("rexml") { n.times {rexml_count_socks} }
147
- x.report("hpricot") { n.times {hpricot_count_socks} }
148
- x.report("jdom_document_builder") { n.times {jdom_document_builder_count_socks} } if RUBY_PLATFORM =~ /java/
149
- #x.report("nokogiri") { n.times {nokogiri_count_socks} } unless RUBY_PLATFORM =~ /java/
150
- x.report("libxml") { n.times {libxml_count_socks} } unless RUBY_PLATFORM =~ /java/
151
- end
152
- puts
153
- end
154
-
155
- #
156
- # jrexml doesn't appear to have any speedup in this test
157
- #
158
- # if RUBY_PLATFORM =~ /java/
159
- # require 'jrexml'
160
- # def rexml_with_jrexml_count_socks
161
- # doc = REXML::Document.new(@bundle_with_466_sock_entries).root
162
- # socks = doc.elements.to_a('./sockEntries').length
163
- # end
164
- #
165
- # puts "\nNow add in JREXML to see if it speeds up rexml\n"
166
- # Benchmark.bmbm do |x|
167
- # x.report("rexml+jrexml") { n.times {rexml_with_jrexml_count_socks} }
168
- # end
169
- # puts
170
- # end
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Each test has an XML Parser open a 98k XML document and count one type of leaf
4
+ # element (466 entries). This is repeated a total of 100 times, twice for each Parser.
5
+ # Summary measurements are from the second test.
6
+ #
7
+ # Tests run on a MacBook Pro, Mac OS X 10.5.5, 4GB memory, 2.5 GHz Intel Core 2 Duo.
8
+ #
9
+ # Library versions:
10
+ # hpricot 0.6.164
11
+ # libxml: 0.9.2
12
+ #
13
+ # All benchmarks were run twice in sequence and the measurements presented here are from
14
+ # the second run. Java automatically optimizes JRuby code which is run many times and the
15
+ # speedup from the first to the second test is from 40 to 75%. There is no essential
16
+ # difference in the speed of the C version of Ruby between the first test and the second.
17
+ #
18
+ # Summary:
19
+ #
20
+ # 100 times: Open 98k XML document and count one type of leaf element (466 entries)
21
+ #
22
+ # JRuby (Java 1.6.0_03-p3-Soylatte using server mode): jdom_document_builder 0.360
23
+ # MRI: libxml v0.9.2 0.383
24
+ # JRuby (Java 1.6.0_07): jdom_document_builder 0.401
25
+ # JRuby (Java 1.5.0_16): jdom_document_builder 0.428
26
+ # JRuby (Java 1.6.0_03-p3-Soylatte using server mode): hpricot 1.977
27
+ # JRuby (Java 1.5.0_16): hpricot 2.027
28
+ # JRuby (Java 1.6.0_07): hpricot 2.094
29
+ # MRI: hpricot 2.140
30
+ # JRuby (Java 1.6.0_03-p3-Soylatte using server mode): rexml 5.488
31
+ # JRuby (Java 1.5.0_16): rexml 5.569
32
+ # JRuby (Java 1.5.0_16): rexml 5.578
33
+ # MRI: rexml 8.606
34
+ #
35
+ # Ruby version: MRI 1.8.6 (2008-03-03 rev 114), platform: universal-darwin9.0
36
+ # --------------------------------------------------------------------------------
37
+ # user system total real
38
+ # rexml 8.170000 0.100000 8.270000 ( 8.606676)
39
+ # hpricot 1.990000 0.040000 2.030000 ( 2.140865)
40
+ # libxml 0.350000 0.020000 0.370000 ( 0.383475)
41
+ #
42
+ # JRuby 1.1.5 (svn r8078) on Java 1.5.0_16
43
+ # --------------------------------------------------------------------------------
44
+ # user system total real
45
+ # rexml 5.578000 0.000000 5.578000 ( 5.578371)
46
+ # hpricot 2.028000 0.000000 2.028000 ( 2.027348)
47
+ # jdom_document_builder 0.429000 0.000000 0.429000 ( 0.428713)
48
+ #
49
+ # JRuby 1.1.5 (svn r8078) on Java 1.6.0_07
50
+ # --------------------------------------------------------------------------------
51
+ # user system total real
52
+ # rexml 5.569000 0.000000 5.569000 ( 5.569135)
53
+ # hpricot 2.094000 0.000000 2.094000 ( 2.093635)
54
+ # jdom_document_builder 0.401000 0.000000 0.401000 ( 0.401115)
55
+ #
56
+ # JRuby 1.1.5 (svn r8078) on Java 1.6.0_07 using server mode (-J-server)
57
+ # --------------------------------------------------------------------------------
58
+ # user system total real
59
+ # rexml 5.489000 0.000000 5.489000 ( 5.488560)
60
+ # hpricot 1.977000 0.000000 1.977000 ( 1.976845)
61
+ # jdom_document_builder 0.377000 0.000000 0.377000 ( 0.377808)
62
+ #
63
+ # JRuby 1.1.5 (svn r8078) on Java 1.6.0_03-p3 (Soylatte) using server mode (-J-server)
64
+ # --------------------------------------------------------------------------------
65
+ # user system total real
66
+ # rexml 5.596000 0.000000 5.596000 ( 5.596212)
67
+ # hpricot 1.937000 0.000000 1.937000 ( 1.937312)
68
+ # jdom_document_builder 0.360000 0.000000 0.360000 ( 0.360068)
69
+
70
+ require 'rubygems'
71
+ require 'benchmark'
72
+ require "rexml/document"
73
+ require 'hpricot'
74
+
75
+ if RUBY_PLATFORM =~ /java/
76
+ include Java
77
+ import javax.xml.parsers.DocumentBuilder
78
+ import javax.xml.parsers.DocumentBuilderFactory
79
+ @dbf = DocumentBuilderFactory.new_instance
80
+ @ruby_info = "Ruby version: JRuby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} rev #{RUBY_PATCHLEVEL}) [i386-jruby#{JRUBY_VERSION}]"
81
+ @ruby_info << ", platform: Java, version #{java.lang.System.getProperty('java.version')}"
82
+ else
83
+ @ruby_info = "Ruby version: MRI #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} rev #{RUBY_PATCHLEVEL})"
84
+ @ruby_info << ", platform: #{RUBY_PLATFORM}"
85
+
86
+ gem 'nokogiri', '>= 1.0.6'
87
+ require 'nokogiri'
88
+
89
+ gem 'libxml-ruby', '>= 0.9.2'
90
+ require 'libxml'
91
+ @xml_parser = LibXML::XML::Parser.new
92
+ end
93
+
94
+ file = File.expand_path(File.join(File.dirname(__FILE__), "sock_entries.xml"))
95
+ @bundle_with_466_sock_entries = File.read(file)
96
+
97
+ def rexml_count_socks
98
+ doc = REXML::Document.new(@bundle_with_466_sock_entries).root
99
+ socks = doc.elements.to_a('./sockEntries').length
100
+ end
101
+
102
+ unless RUBY_PLATFORM =~ /java/
103
+ def nokogiri_count_socks
104
+ #doc = Nokogiri(@bundle_with_466_sock_entries)
105
+ #socks = doc.search('//sockEntries').length
106
+ end
107
+
108
+ def libxml_count_socks
109
+ @xml_parser = LibXML::XML::Parser.new
110
+ @xml_parser.string = @bundle_with_466_sock_entries
111
+ doc = @xml_parser.parse
112
+ socks = doc.find('//sockEntries').length
113
+ end
114
+ end
115
+
116
+ def hpricot_count_socks
117
+ doc = Hpricot.XML(@bundle_with_466_sock_entries)
118
+ socks = doc.search("//sockEntries").length
119
+ end
120
+
121
+ if RUBY_PLATFORM =~ /java/
122
+ def jdom_document_builder_count_socks
123
+ file = File.expand_path(File.join(File.dirname(__FILE__), "sock_entries.xml"))
124
+ doc = @dbf.new_document_builder.parse(file).get_document_element
125
+ socks = doc.getElementsByTagName("sockEntries")
126
+ socks.get_length
127
+ end
128
+ end
129
+
130
+ n = 100
131
+ test_iterations = ARGV.first.to_i
132
+ test_iterations = 1 unless test_iterations > 1
133
+ puts
134
+ puts @ruby_info
135
+ puts
136
+ puts "#{n} times: Open 98k XML document and count one type of leaf element (466 entries)"
137
+ puts
138
+ print "running benchmark "
139
+ if test_iterations == 1
140
+ puts "once.\n\n"
141
+ else
142
+ puts "#{test_iterations} times.\n\n"
143
+ end
144
+ test_iterations.times do
145
+ Benchmark.bmbm do |x|
146
+ x.report("rexml") { n.times {rexml_count_socks} }
147
+ x.report("hpricot") { n.times {hpricot_count_socks} }
148
+ x.report("jdom_document_builder") { n.times {jdom_document_builder_count_socks} } if RUBY_PLATFORM =~ /java/
149
+ #x.report("nokogiri") { n.times {nokogiri_count_socks} } unless RUBY_PLATFORM =~ /java/
150
+ x.report("libxml") { n.times {libxml_count_socks} } unless RUBY_PLATFORM =~ /java/
151
+ end
152
+ puts
153
+ end
154
+
155
+ #
156
+ # jrexml doesn't appear to have any speedup in this test
157
+ #
158
+ # if RUBY_PLATFORM =~ /java/
159
+ # require 'jrexml'
160
+ # def rexml_with_jrexml_count_socks
161
+ # doc = REXML::Document.new(@bundle_with_466_sock_entries).root
162
+ # socks = doc.elements.to_a('./sockEntries').length
163
+ # end
164
+ #
165
+ # puts "\nNow add in JREXML to see if it speeds up rexml\n"
166
+ # Benchmark.bmbm do |x|
167
+ # x.report("rexml+jrexml") { n.times {rexml_with_jrexml_count_socks} }
168
+ # end
169
+ # puts
170
+ # end
@@ -1,41 +1,41 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rubygems'
4
- require 'hpricot'
5
- require 'xml'
6
- require 'rexml/document'
7
-
8
- ITERATIONS = 3
9
- NESTED_ITERATIONS = 5
10
-
11
- def bm(name, filename, &block)
12
- text = File.open(filename).read
13
- length = text.length / 1024.0 / 1024.0
14
- puts "#{filename}: #{name} (#{(length * 1024).round} kb)"
15
- for j in 0 .. NESTED_ITERATIONS
16
- s = Time.now.to_f
17
- for i in 0 .. ITERATIONS
18
- block.call(text)
19
- end
20
- timer = Time.now.to_f - s
21
- puts "\t#{length * ITERATIONS / timer} MB/s"
22
- end
23
- end
24
-
25
- def bm_suite(filenames)
26
- filenames.each do |filename|
27
- bm("LIBXML THROUGHPUT:", filename) do |text|
28
- XML::Document.file(filename)
29
- end
30
-
31
- bm("HPRICOT THROUGHPUT:", filename) do |text|
32
- Hpricot.XML(text)
33
- end
34
-
35
- bm("REXML THROUGHPUT:", filename) do |text|
36
- REXML::Document.new(text)
37
- end
38
- end
39
- end
40
-
41
- bm_suite("hamlet.xml")
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'hpricot'
5
+ require 'xml'
6
+ require 'rexml/document'
7
+
8
+ ITERATIONS = 3
9
+ NESTED_ITERATIONS = 5
10
+
11
+ def bm(name, filename, &block)
12
+ text = File.open(filename).read
13
+ length = text.length / 1024.0 / 1024.0
14
+ puts "#{filename}: #{name} (#{(length * 1024).round} kb)"
15
+ for j in 0 .. NESTED_ITERATIONS
16
+ s = Time.now.to_f
17
+ for i in 0 .. ITERATIONS
18
+ block.call(text)
19
+ end
20
+ timer = Time.now.to_f - s
21
+ puts "\t#{length * ITERATIONS / timer} MB/s"
22
+ end
23
+ end
24
+
25
+ def bm_suite(filenames)
26
+ filenames.each do |filename|
27
+ bm("LIBXML THROUGHPUT:", filename) do |text|
28
+ XML::Document.file(filename)
29
+ end
30
+
31
+ bm("HPRICOT THROUGHPUT:", filename) do |text|
32
+ Hpricot.XML(text)
33
+ end
34
+
35
+ bm("REXML THROUGHPUT:", filename) do |text|
36
+ REXML::Document.new(text)
37
+ end
38
+ end
39
+ end
40
+
41
+ bm_suite("hamlet.xml")
@@ -1,6 +1,6 @@
1
- #!/usr/bin/env ruby
2
-
3
- %w{test lib ext/libxml}.each{ |path| $LOAD_PATH.unshift(path) }
4
-
5
- load './test/test_suite.rb'
6
-
1
+ #!/usr/bin/env ruby
2
+
3
+ %w{test lib ext/libxml}.each{ |path| $LOAD_PATH.unshift(path) }
4
+
5
+ load './test/test_suite.rb'
6
+
@@ -1,14 +1,14 @@
1
- <?xml version="1.0"?>
2
-
3
- <?xml-stylesheet href="doc.xsl"
4
- type="text/xsl" ?>
5
-
6
- <!DOCTYPE doc SYSTEM "doc.dtd">
7
-
8
- <doc>Hello, world!<!-- Comment 1 --></doc>
9
-
10
- <?pi-without-data ?>
11
-
12
- <!-- Comment 2 -->
13
-
14
- <!-- Comment 3 -->
1
+ <?xml version="1.0"?>
2
+
3
+ <?xml-stylesheet href="doc.xsl"
4
+ type="text/xsl" ?>
5
+
6
+ <!DOCTYPE doc SYSTEM "doc.dtd">
7
+
8
+ <doc>Hello, world!<!-- Comment 1 --></doc>
9
+
10
+ <?pi-without-data ?>
11
+
12
+ <!-- Comment 2 -->
13
+
14
+ <!-- Comment 3 -->