rhodes 3.1.1 → 3.2.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2987) hide show
  1. data/CHANGELOG +5 -2
  2. data/doc/alert-api.txt +51 -0
  3. data/doc/build.txt +52 -43
  4. data/doc/configuration.txt +9 -5
  5. data/doc/connect-to-web-services.txt +4 -4
  6. data/doc/device-caps.txt +80 -28
  7. data/doc/extensions.txt +1 -1
  8. data/doc/install.txt +1 -1
  9. data/doc/introduction.txt +1 -1
  10. data/doc/rhodes-api.txt +62 -62
  11. data/doc/rhom.txt +36 -23
  12. data/doc/{rhodes-api/ringtonemanager-api.txt → ringtonemanager-api.txt} +0 -0
  13. data/doc/scanner.txt +507 -0
  14. data/doc/simulator.txt +6 -1
  15. data/doc/synchronization.txt +32 -27
  16. data/doc/{rhodes-api/timer-api.txt → timer-api.txt} +1 -1
  17. data/doc/tutorial.txt +8 -8
  18. data/installer/OLD-README.html +81 -0
  19. data/installer/README.html +6 -4
  20. data/installer/RHOSTUDIO-LICENSE.txt +675 -0
  21. data/installer/rhostudio.nsi +147 -20
  22. data/lib/build/compileRB/compileRB.rb +5 -2
  23. data/lib/build/jake.rb +3 -2
  24. data/lib/extensions/barcode/ext/barcode/platform/android/Rakefile +1 -1
  25. data/lib/extensions/barcode/ext/barcode/platform/bb/Rakefile +1 -1
  26. data/lib/extensions/barcode/ext/barcode/shared/ruby/barcode_wrap.c +391 -111
  27. data/lib/extensions/digest-md5/ext/Rakefile +1 -1
  28. data/lib/extensions/digest-sha1/ext/Rakefile +1 -1
  29. data/lib/extensions/digest/ext/Rakefile +1 -1
  30. data/lib/extensions/fcntl/ext/Rakefile +1 -1
  31. data/lib/extensions/mspec/mspec/expectations/expectations.rb +4 -4
  32. data/lib/extensions/mspec/mspec/expectations/should.rb +9 -8
  33. data/lib/extensions/mspec/mspec/guards.rb +3 -0
  34. data/lib/extensions/mspec/mspec/guards/conflict.rb +7 -2
  35. data/lib/extensions/mspec/mspec/guards/endian.rb +7 -10
  36. data/lib/extensions/mspec/mspec/guards/feature.rb +47 -0
  37. data/lib/extensions/mspec/mspec/guards/guard.rb +18 -13
  38. data/lib/extensions/mspec/mspec/guards/platform.rb +4 -0
  39. data/lib/extensions/mspec/mspec/guards/specified.rb +66 -0
  40. data/lib/extensions/mspec/mspec/guards/user.rb +17 -0
  41. data/lib/extensions/mspec/mspec/helpers.rb +6 -4
  42. data/lib/extensions/mspec/mspec/helpers/const_lookup.rb +2 -1
  43. data/lib/extensions/mspec/mspec/helpers/datetime.rb +30 -0
  44. data/lib/extensions/mspec/mspec/helpers/ducktype.rb +4 -4
  45. data/lib/extensions/mspec/mspec/helpers/encode.rb +21 -0
  46. data/lib/extensions/mspec/mspec/helpers/environment.rb +13 -9
  47. data/lib/extensions/mspec/mspec/helpers/fixture.rb +2 -1
  48. data/lib/extensions/mspec/mspec/helpers/flunk.rb +1 -1
  49. data/lib/extensions/mspec/mspec/helpers/fmode.rb +15 -0
  50. data/lib/extensions/mspec/mspec/helpers/io.rb +21 -2
  51. data/lib/extensions/mspec/mspec/helpers/language_version.rb +13 -3
  52. data/lib/extensions/mspec/mspec/helpers/numeric.rb +89 -0
  53. data/lib/extensions/mspec/mspec/helpers/ruby_exe.rb +138 -123
  54. data/lib/extensions/mspec/mspec/helpers/singleton_class.rb +7 -0
  55. data/lib/extensions/mspec/mspec/helpers/stasy.rb +33 -0
  56. data/lib/extensions/mspec/mspec/helpers/tmp.rb +34 -26
  57. data/lib/extensions/mspec/mspec/matchers.rb +9 -0
  58. data/lib/extensions/mspec/mspec/matchers/base.rb +14 -14
  59. data/lib/extensions/mspec/mspec/matchers/be_computed_by.rb +36 -0
  60. data/lib/extensions/mspec/mspec/matchers/be_computed_by_function.rb +35 -0
  61. data/lib/extensions/mspec/mspec/matchers/be_valid_dns_name.rb +24 -0
  62. data/lib/extensions/mspec/mspec/matchers/equal_utf16.rb +5 -7
  63. data/lib/extensions/mspec/mspec/matchers/have_class_variable.rb +12 -0
  64. data/lib/extensions/mspec/mspec/matchers/have_constant.rb +6 -24
  65. data/lib/extensions/mspec/mspec/matchers/have_data.rb +49 -0
  66. data/lib/extensions/mspec/mspec/matchers/have_instance_method.rb +1 -1
  67. data/lib/extensions/mspec/mspec/matchers/have_instance_variable.rb +12 -0
  68. data/lib/extensions/mspec/mspec/matchers/have_method.rb +1 -1
  69. data/lib/extensions/mspec/mspec/matchers/have_private_instance_method.rb +1 -1
  70. data/lib/extensions/mspec/mspec/matchers/have_private_method.rb +24 -0
  71. data/lib/extensions/mspec/mspec/matchers/have_protected_instance_method.rb +24 -0
  72. data/lib/extensions/mspec/mspec/matchers/have_public_instance_method.rb +1 -1
  73. data/lib/extensions/mspec/mspec/matchers/have_singleton_method.rb +24 -0
  74. data/lib/extensions/mspec/mspec/matchers/output_to_fd.rb +71 -71
  75. data/lib/extensions/mspec/mspec/matchers/raise_error.rb +4 -3
  76. data/lib/extensions/mspec/mspec/matchers/stringsymboladapter.rb +1 -1
  77. data/lib/extensions/mspec/mspec/matchers/variable.rb +28 -0
  78. data/lib/extensions/mspec/mspec/mocks/mock.rb +102 -60
  79. data/lib/extensions/mspec/mspec/mocks/object.rb +5 -1
  80. data/lib/extensions/mspec/mspec/mocks/proxy.rb +41 -6
  81. data/lib/extensions/mspec/mspec/runner.rb +1 -0
  82. data/lib/extensions/mspec/mspec/runner/actions/debug.rb +2 -0
  83. data/lib/extensions/mspec/mspec/runner/context.rb +58 -13
  84. data/lib/extensions/mspec/mspec/runner/exception.rb +7 -6
  85. data/lib/extensions/mspec/mspec/runner/formatters.rb +1 -0
  86. data/lib/extensions/mspec/mspec/runner/formatters/dotted.rb +15 -3
  87. data/lib/extensions/mspec/mspec/runner/formatters/profile.rb +70 -0
  88. data/lib/extensions/mspec/mspec/runner/mspec.rb +32 -19
  89. data/lib/extensions/mspec/mspec/runner/object.rb +4 -0
  90. data/lib/extensions/mspec/mspec/runner/shared.rb +1 -1
  91. data/lib/extensions/mspec/mspec/utils/name_map.rb +8 -1
  92. data/lib/extensions/mspec/mspec/utils/options.rb +25 -8
  93. data/lib/extensions/mspec/mspec/utils/ruby_name.rb +1 -1
  94. data/lib/extensions/mspec/mspec/utils/script.rb +4 -4
  95. data/lib/extensions/mspec/mspec/version.rb +1 -1
  96. data/lib/extensions/nfc/ext/nfc/platform/android/Rakefile +1 -1
  97. data/lib/extensions/nfc/ext/nfc/shared/ruby/nfc_wrap.c +427 -149
  98. data/lib/extensions/set/tsort.rb +242 -0
  99. data/lib/extensions/thread/monitor.rb +277 -0
  100. data/lib/extensions/thread/thread.rb +357 -0
  101. data/lib/framework/base64.rb +4 -4
  102. data/lib/framework/date/format.rb +36 -64
  103. data/lib/framework/dateOrig.rb +40 -23
  104. data/lib/framework/ostruct.rb +14 -8
  105. data/lib/framework/rational.rb +2 -2
  106. data/lib/framework/rbconfig.rb +71 -0
  107. data/lib/framework/rho/rho.rb +46 -43
  108. data/lib/framework/rho/rhocontact.rb +60 -36
  109. data/lib/framework/rho/rhofsconnector.rb +2 -2
  110. data/lib/framework/rho/rhoutils.rb +10 -6
  111. data/lib/framework/rhodes.rb +1 -1
  112. data/lib/framework/rhoframework.rb +0 -13
  113. data/lib/framework/rhom/rhom.rb +64 -1
  114. data/lib/framework/rhom/rhom_object_factory.rb +4 -4
  115. data/lib/framework/rhosystem.rb +27 -25
  116. data/lib/framework/time.rb +48 -16
  117. data/lib/framework/version.rb +1 -1
  118. data/lib/rhodes.rb +1 -1
  119. data/lib/test/framework_test.rb +1 -1
  120. data/platform/android/Rhodes/AndroidManifest.xml +35 -9
  121. data/platform/android/Rhodes/default.properties +1 -1
  122. data/platform/android/Rhodes/jni/Android.mk +5 -4
  123. data/platform/android/Rhodes/jni/include/rhodes.h +65 -3
  124. data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +3 -1
  125. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_geolocation_GeoLocationImpl.h +12 -2
  126. data/platform/android/Rhodes/jni/src/callbacks.cpp +6 -2
  127. data/platform/android/Rhodes/jni/src/event.cpp +60 -1
  128. data/platform/android/Rhodes/jni/src/geolocation.cpp +42 -13
  129. data/platform/android/Rhodes/jni/src/mapview.cpp +169 -42
  130. data/platform/android/Rhodes/jni/src/phonebook.cpp +90 -74
  131. data/platform/android/Rhodes/jni/src/rhodes.cpp +91 -3
  132. data/platform/android/Rhodes/jni/src/rhodesapp.cpp +1 -1
  133. data/platform/android/Rhodes/res/drawable/callout_a1.png +0 -0
  134. data/platform/android/Rhodes/res/drawable/callout_a2.png +0 -0
  135. data/platform/android/Rhodes/res/drawable/callout_a3.png +0 -0
  136. data/platform/android/Rhodes/res/drawable/callout_b1.png +0 -0
  137. data/platform/android/Rhodes/res/drawable/callout_b2.png +0 -0
  138. data/platform/android/Rhodes/res/drawable/callout_b3.png +0 -0
  139. data/platform/android/Rhodes/res/drawable/callout_c1.png +0 -0
  140. data/platform/android/Rhodes/res/drawable/callout_c2.png +0 -0
  141. data/platform/android/Rhodes/res/drawable/callout_c3.png +0 -0
  142. data/platform/android/Rhodes/res/drawable/callout_d.png +0 -0
  143. data/platform/android/Rhodes/res/drawable/google.png +0 -0
  144. data/platform/android/Rhodes/res/drawable/location.png +0 -0
  145. data/platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java +12 -0
  146. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +44 -21
  147. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +12 -25
  148. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/PopupActivity.java +2 -1
  149. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothDeviceListActivity.java +2 -1
  150. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/CameraSettings.java +11 -0
  151. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +13 -3
  152. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/Event.java +7 -0
  153. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +127 -37
  154. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java +69 -23
  155. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +287 -124
  156. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Annotation.java +6 -0
  157. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/AnnotationsOverlay.java +57 -6
  158. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Callout.java +296 -0
  159. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/CalloutOverlay.java +143 -0
  160. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/GoogleMapView.java +109 -3
  161. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapView.java +53 -5
  162. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +16 -119
  163. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessor.java +4 -1
  164. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +284 -120
  165. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +58 -23
  166. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java +42 -77
  167. data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +1 -1
  168. data/platform/android/build/RhodesSRC_build.files +2 -0
  169. data/platform/android/build/android.rake +90 -40
  170. data/platform/android/build/android_tools.rb +16 -0
  171. data/platform/android/build/androidcommon.rb +2 -0
  172. data/platform/android/build/librhocommon_build.files +3 -0
  173. data/platform/android/build/libruby_build.files +2 -1
  174. data/platform/bb/RubyVM/src/com/rho/net/AsyncHttp.java +6 -2
  175. data/platform/bb/RubyVM/src/com/rho/sync/ClientRegister.java +3 -2
  176. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +17 -24
  177. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +26 -2
  178. data/platform/bb/RubyVM/src/com/rho/sync/SyncProtocol_3.java +6 -1
  179. data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +4 -0
  180. data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +50 -54
  181. data/platform/bb/build/bb.rake +4 -4
  182. data/platform/bb/rhodes/src/com/rho/rubyext/RhoPhonebook.java +6 -6
  183. data/platform/bb/rhodes/src/rhomobile/camera/Camera.java +7 -0
  184. data/platform/bb/rhodes/src/rhomobile/mapview/MapView.java +10 -0
  185. data/platform/iphone/Classes/AppManager/AppManager.m +29 -0
  186. data/platform/iphone/Classes/Dispatcher/Dispatcher.c +1 -1
  187. data/platform/iphone/Classes/GeoLocation/LocationController.h +2 -1
  188. data/platform/iphone/Classes/GeoLocation/LocationController.m +23 -0
  189. data/platform/iphone/Classes/MapView/MapAnnotation.h +6 -0
  190. data/platform/iphone/Classes/MapView/MapAnnotation.m +5 -1
  191. data/platform/iphone/Classes/MapView/MapViewController.m +48 -4
  192. data/platform/iphone/Classes/MapView/MapViewManager.m +7 -0
  193. data/platform/iphone/Classes/Phonebook/phonebook.m +44 -0
  194. data/platform/iphone/Classes/Rhodes.m +1 -1
  195. data/platform/iphone/Info.plist +1 -1
  196. data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +3 -3
  197. data/platform/iphone/curl/curl.xcodeproj/project.pbxproj +3 -3
  198. data/platform/iphone/rbuild/iphone.rake +3 -1
  199. data/platform/iphone/rhoextlib/rhoextlib.xcodeproj/project.pbxproj +3 -3
  200. data/platform/iphone/rhorubylib/rhorubylib.xcodeproj/project.pbxproj +18 -7
  201. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +3 -2
  202. data/platform/iphone/rhosynclib/rhosynclib.xcodeproj/project.pbxproj +3 -3
  203. data/platform/linux/files.txt +2 -2
  204. data/platform/linux/target/compiler/rubylinux +0 -0
  205. data/platform/mac/RubyMac/RubyMac.xcodeproj/project.pbxproj +8 -2
  206. data/platform/osx/bin/RhoSimulator/RhoSimulator.app/Contents/MacOS/RhoSimulator +0 -0
  207. data/platform/osx/build/osx.rake +1 -3
  208. data/platform/shared/RhoConnectClient/RhoConnectClient.cpp +65 -26
  209. data/platform/shared/RhoConnectClient/RhoConnectClient.h +5 -1
  210. data/platform/shared/common/Android.mk +3 -0
  211. data/platform/shared/common/AppMenu.cpp +2 -2
  212. data/platform/shared/common/RhoPort.h +2 -2
  213. data/platform/shared/common/RhodesApp.cpp +20 -2
  214. data/platform/shared/common/RhodesApp.h +1 -0
  215. data/platform/shared/common/ThreadQueue.cpp +5 -0
  216. data/platform/shared/common/ThreadQueue.h +1 -0
  217. data/platform/shared/common/map/BaseMapEngine.cpp +1393 -0
  218. data/platform/shared/common/map/BaseMapEngine.h +368 -0
  219. data/platform/shared/common/map/ESRIMapEngine.cpp +23 -896
  220. data/platform/shared/common/map/ESRIMapEngine.h +11 -243
  221. data/platform/shared/common/map/GeocodingMapEngine.cpp +200 -0
  222. data/platform/shared/common/map/GeocodingMapEngine.h +86 -0
  223. data/platform/shared/common/map/GoogleMapEngine.cpp +70 -135
  224. data/platform/shared/common/map/GoogleMapEngine.h +21 -38
  225. data/platform/shared/common/map/MapEngine.cpp +145 -24
  226. data/platform/shared/common/map/MapEngine.h +156 -54
  227. data/platform/shared/common/map/OSMMapEngine.cpp +94 -0
  228. data/platform/shared/common/map/OSMMapEngine.h +65 -0
  229. data/platform/shared/curl/lib/config-symbian.h +3 -1
  230. data/platform/shared/db/DBAdapter.cpp +30 -4
  231. data/platform/shared/db/DBAdapter.h +24 -1
  232. data/platform/shared/logging/RhoLog.h +26 -0
  233. data/platform/shared/net/AsyncHttp.cpp +6 -2
  234. data/platform/shared/net/CompatWince.cpp +1 -0
  235. data/platform/shared/net/HttpServer.cpp +5 -2
  236. data/platform/shared/qt/rhodes/RhoSimulator.h +1 -1
  237. data/platform/shared/qt/rhodes/impl/GeoLocationImpl.cpp +6 -0
  238. data/platform/shared/qt/rhodes/impl/MapViewImpl.cpp +4 -0
  239. data/platform/shared/qt/rhodes/impl/PhonebookImpl.cpp +12 -0
  240. data/platform/shared/qt/rhodes/impl/SystemImpl.cpp +26 -0
  241. data/platform/shared/qt/rholib/rholib.pro +14 -19
  242. data/platform/shared/qt/rubylib/rubylib.pro +7 -4
  243. data/platform/shared/ruby/Android.mk +3 -2
  244. data/platform/shared/ruby/GPL +340 -0
  245. data/platform/shared/ruby/android/ruby/config.h +283 -0
  246. data/platform/shared/ruby/array.c +1318 -595
  247. data/platform/shared/ruby/bignum.c +1092 -278
  248. data/platform/shared/ruby/class.c +689 -201
  249. data/platform/shared/ruby/compar.c +22 -20
  250. data/platform/shared/ruby/compile.c +327 -249
  251. data/platform/shared/ruby/complex.c +593 -138
  252. data/platform/shared/ruby/cont.c +213 -95
  253. data/platform/shared/ruby/debug.c +15 -10
  254. data/platform/shared/ruby/debug.h +1 -1
  255. data/platform/shared/ruby/dir.c +247 -104
  256. data/platform/shared/ruby/dln.c +102 -309
  257. data/platform/shared/ruby/dln.h +3 -3
  258. data/platform/shared/ruby/dln_find.c +305 -0
  259. data/platform/shared/ruby/dmydln.c +7 -2
  260. data/platform/shared/ruby/dmyversion.c +2 -0
  261. data/platform/shared/ruby/enc/Makefile.in +1 -0
  262. data/platform/shared/ruby/enc/big5.c +142 -5
  263. data/platform/shared/ruby/enc/depend +1 -0
  264. data/platform/shared/ruby/enc/emacs_mule.c +1 -1
  265. data/platform/shared/ruby/enc/encdb.c +3 -1
  266. data/platform/shared/ruby/enc/euc_tw.c +1 -10
  267. data/platform/shared/ruby/enc/iso_2022_jp.h +36 -0
  268. data/platform/shared/ruby/enc/iso_8859_5.c +1 -1
  269. data/platform/shared/ruby/enc/koi8_r.c +1 -1
  270. data/platform/shared/ruby/enc/koi8_u.c +1 -1
  271. data/platform/shared/ruby/enc/prelude.rb +1 -1
  272. data/platform/shared/ruby/enc/shift_jis.c +3 -3
  273. data/platform/shared/ruby/enc/trans/big5-hkscs-tbl.rb +18385 -0
  274. data/platform/shared/ruby/enc/trans/big5-uao-tbl.rb +19784 -0
  275. data/platform/shared/ruby/enc/trans/big5.c +53810 -12566
  276. data/platform/shared/ruby/enc/trans/big5.trans +10 -1
  277. data/platform/shared/ruby/enc/trans/chinese.c +113 -71
  278. data/platform/shared/ruby/enc/trans/chinese.trans +6 -4
  279. data/platform/shared/ruby/enc/trans/escape.c +3 -3
  280. data/platform/shared/ruby/enc/trans/escape.trans +3 -3
  281. data/platform/shared/ruby/enc/trans/gb18030-tbl.rb +32 -0
  282. data/platform/shared/ruby/enc/trans/gb18030.c +17431 -91305
  283. data/platform/shared/ruby/enc/trans/gb18030.trans +105 -5
  284. data/platform/shared/ruby/enc/trans/gbk.c +13 -13
  285. data/platform/shared/ruby/enc/trans/iso2022.c +374 -13
  286. data/platform/shared/ruby/enc/trans/iso2022.trans +313 -0
  287. data/platform/shared/ruby/enc/trans/japanese.c +26 -24
  288. data/platform/shared/ruby/enc/trans/japanese_euc.c +30 -30
  289. data/platform/shared/ruby/enc/trans/japanese_sjis.c +282 -276
  290. data/platform/shared/ruby/enc/trans/korean.c +182 -159
  291. data/platform/shared/ruby/enc/trans/newline.c +18 -14
  292. data/platform/shared/ruby/enc/trans/newline.trans +15 -11
  293. data/platform/shared/ruby/enc/trans/single_byte.c +497 -394
  294. data/platform/shared/ruby/enc/trans/single_byte.trans +1 -2
  295. data/platform/shared/ruby/enc/trans/transdb.c +1 -1
  296. data/platform/shared/ruby/enc/trans/utf8_mac-tbl.rb +945 -0
  297. data/platform/shared/ruby/enc/trans/utf8_mac.c +10853 -0
  298. data/platform/shared/ruby/enc/trans/utf8_mac.trans +242 -0
  299. data/platform/shared/ruby/enc/trans/utf_16_32.c +89 -86
  300. data/platform/shared/ruby/enc/unicode.c +30 -8779
  301. data/platform/shared/ruby/enc/unicode/name2ctype.h +17985 -0
  302. data/platform/shared/ruby/enc/unicode/name2ctype.h.blt +17985 -0
  303. data/platform/shared/ruby/enc/unicode/name2ctype.kwd +16711 -0
  304. data/platform/shared/ruby/enc/unicode/name2ctype.src +16711 -0
  305. data/platform/shared/ruby/enc/utf_16be.c +3 -4
  306. data/platform/shared/ruby/enc/utf_16le.c +3 -4
  307. data/platform/shared/ruby/enc/utf_8.c +3 -1
  308. data/platform/shared/ruby/enc/x_emoji.h +26 -0
  309. data/platform/shared/ruby/encdb.h +18 -2
  310. data/platform/shared/ruby/encoding.c +248 -111
  311. data/platform/shared/ruby/enum.c +1006 -200
  312. data/platform/shared/ruby/enumerator.c +555 -254
  313. data/platform/shared/ruby/error.c +478 -79
  314. data/platform/shared/ruby/eval.c +186 -94
  315. data/platform/shared/ruby/eval_error.c +16 -10
  316. data/platform/shared/ruby/eval_intern.h +24 -9
  317. data/platform/shared/ruby/eval_jump.c +2 -1
  318. data/platform/shared/ruby/ext/geolocation/geolocation.i +10 -1
  319. data/platform/shared/ruby/ext/geolocation/geolocation_wrap.c +49 -6
  320. data/platform/shared/ruby/ext/mapview/mapview.i +6 -0
  321. data/platform/shared/ruby/ext/mapview/mapview_wrap.c +279 -0
  322. data/platform/shared/ruby/ext/nativebar/nativebar_wrap.c +402 -124
  323. data/platform/shared/ruby/ext/phonebook/phonebook.i +41 -7
  324. data/platform/shared/ruby/ext/phonebook/phonebook_wrap.c +216 -47
  325. data/platform/shared/ruby/ext/rho/rhoruby.c +9 -5
  326. data/platform/shared/ruby/ext/rho/rhosupport.c +1 -1
  327. data/platform/shared/ruby/ext/socket/getaddrinfo.c +4 -0
  328. data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +2 -2
  329. data/platform/shared/ruby/ext/syncengine/syncengine.i +14 -5
  330. data/platform/shared/ruby/ext/syncengine/syncengine_wrap.c +55 -7
  331. data/platform/shared/ruby/ext/system/system.i +7 -2
  332. data/platform/shared/ruby/ext/system/system_wrap.c +28 -2
  333. data/platform/shared/ruby/file.c +1243 -683
  334. data/platform/shared/ruby/gc.c +509 -217
  335. data/platform/shared/ruby/gc.h +7 -5
  336. data/platform/shared/ruby/generated/insns.inc +11 -9
  337. data/platform/shared/ruby/generated/insns_info.inc +69 -62
  338. data/platform/shared/ruby/generated/known_errors.inc +360 -245
  339. data/platform/shared/ruby/generated/lex.c +49 -47
  340. data/platform/shared/ruby/generated/node_name.inc +0 -8
  341. data/platform/shared/ruby/generated/optinsn.inc +1 -1
  342. data/platform/shared/ruby/generated/parse.c +4480 -4162
  343. data/platform/shared/ruby/generated/parse.h +13 -14
  344. data/platform/shared/ruby/generated/vm.inc +485 -269
  345. data/platform/shared/ruby/generated/vmtc.inc +2 -1
  346. data/platform/shared/ruby/golf_prelude.c +21 -4
  347. data/platform/shared/ruby/goruby.c +1 -1
  348. data/platform/shared/ruby/hash.c +429 -180
  349. data/platform/shared/ruby/ia64.s +42 -0
  350. data/platform/shared/ruby/id.c +13 -14
  351. data/platform/shared/ruby/id.h +25 -18
  352. data/platform/shared/ruby/include/ruby.h +1 -1
  353. data/platform/shared/ruby/include/ruby/backward/rubysig.h +2 -2
  354. data/platform/shared/ruby/include/ruby/defines.h +50 -29
  355. data/platform/shared/ruby/include/ruby/encoding.h +40 -14
  356. data/platform/shared/ruby/include/ruby/intern.h +81 -24
  357. data/platform/shared/ruby/include/ruby/io.h +4 -4
  358. data/platform/shared/ruby/include/ruby/missing.h +28 -18
  359. data/platform/shared/ruby/include/ruby/oniguruma.h +22 -7
  360. data/platform/shared/ruby/include/ruby/re.h +4 -4
  361. data/platform/shared/ruby/include/ruby/ruby.h +294 -76
  362. data/platform/shared/ruby/include/ruby/st.h +27 -9
  363. data/platform/shared/ruby/include/ruby/util.h +14 -6
  364. data/platform/shared/ruby/include/ruby/version.h +61 -0
  365. data/platform/shared/ruby/include/ruby/vm.h +21 -1
  366. data/platform/shared/ruby/include/ruby/win32.h +223 -63
  367. data/platform/shared/ruby/inits.c +1 -1
  368. data/platform/shared/ruby/insns.def +236 -111
  369. data/platform/shared/ruby/io.c +2188 -774
  370. data/platform/shared/ruby/iphone/ruby/config.h +75 -45
  371. data/platform/shared/ruby/iseq.c +261 -104
  372. data/platform/shared/ruby/iseq.h +13 -11
  373. data/platform/shared/ruby/linux/ruby/config.h +95 -100
  374. data/platform/shared/ruby/load.c +115 -81
  375. data/platform/shared/ruby/main.c +122 -0
  376. data/platform/shared/ruby/marshal.c +418 -230
  377. data/platform/shared/ruby/math.c +219 -152
  378. data/platform/shared/ruby/method.h +103 -0
  379. data/platform/shared/ruby/miniprelude.c +35 -23
  380. data/platform/shared/ruby/missing/acosh.c +4 -4
  381. data/platform/shared/ruby/missing/alloca.c +4 -1
  382. data/platform/shared/ruby/missing/close.c +67 -0
  383. data/platform/shared/ruby/missing/crypt.c +9 -9
  384. data/platform/shared/ruby/missing/dup2.c +0 -1
  385. data/platform/shared/ruby/missing/langinfo.c +4 -3
  386. data/platform/shared/ruby/missing/signbit.c +19 -0
  387. data/platform/shared/ruby/newline.c +18 -14
  388. data/platform/shared/ruby/node.c +921 -0
  389. data/platform/shared/ruby/node.h +14 -47
  390. data/platform/shared/ruby/numeric.c +544 -302
  391. data/platform/shared/ruby/object.c +430 -426
  392. data/platform/shared/ruby/pack.c +677 -628
  393. data/platform/shared/ruby/parse.y +847 -523
  394. data/platform/shared/ruby/proc.c +631 -341
  395. data/platform/shared/ruby/process.c +811 -421
  396. data/platform/shared/ruby/random.c +858 -177
  397. data/platform/shared/ruby/range.c +234 -133
  398. data/platform/shared/ruby/rational.c +936 -173
  399. data/platform/shared/ruby/re.c +351 -192
  400. data/platform/shared/ruby/regcomp.c +125 -138
  401. data/platform/shared/ruby/regenc.c +26 -25
  402. data/platform/shared/ruby/regenc.h +7 -3
  403. data/platform/shared/ruby/regerror.c +44 -34
  404. data/platform/shared/ruby/regexec.c +31 -38
  405. data/platform/shared/ruby/regint.h +16 -17
  406. data/platform/shared/ruby/regparse.c +266 -136
  407. data/platform/shared/ruby/regparse.h +4 -1
  408. data/platform/shared/ruby/regsyntax.c +2 -2
  409. data/platform/shared/ruby/revision.h +0 -1
  410. data/platform/shared/ruby/ruby.c +276 -248
  411. data/platform/shared/ruby/safe.c +14 -8
  412. data/platform/shared/ruby/signal.c +61 -68
  413. data/platform/shared/ruby/sprintf.c +77 -38
  414. data/platform/shared/ruby/st.c +437 -61
  415. data/platform/shared/ruby/strftime.c +252 -110
  416. data/platform/shared/ruby/string.c +1361 -1009
  417. data/platform/shared/ruby/struct.c +200 -133
  418. data/platform/shared/ruby/symbian/ruby/config.h +56 -24
  419. data/platform/shared/ruby/thread.c +732 -247
  420. data/platform/shared/ruby/thread_pthread.c +122 -69
  421. data/platform/shared/ruby/thread_pthread.h +4 -1
  422. data/platform/shared/ruby/thread_win32.c +73 -41
  423. data/platform/shared/ruby/thread_win32.h +1 -1
  424. data/platform/shared/ruby/time.c +3271 -919
  425. data/platform/shared/ruby/timev.h +21 -0
  426. data/platform/shared/ruby/transcode.c +289 -95
  427. data/platform/shared/ruby/transcode_data.h +17 -14
  428. data/platform/shared/ruby/transdb.h +32 -0
  429. data/platform/shared/ruby/util.c +330 -123
  430. data/platform/shared/ruby/variable.c +294 -176
  431. data/platform/shared/ruby/version.c +71 -2
  432. data/platform/shared/ruby/version.h +22 -19
  433. data/platform/shared/ruby/vm.c +368 -203
  434. data/platform/shared/ruby/vm_core.h +110 -66
  435. data/platform/shared/ruby/vm_dump.c +51 -44
  436. data/platform/shared/ruby/vm_eval.c +547 -230
  437. data/platform/shared/ruby/vm_exec.c +3 -3
  438. data/platform/shared/ruby/vm_insnhelper.c +397 -200
  439. data/platform/shared/ruby/vm_insnhelper.h +27 -14
  440. data/platform/shared/ruby/vm_method.c +493 -296
  441. data/platform/shared/ruby/vm_opts.h +1 -1
  442. data/platform/shared/ruby/{missing/vsnprintf.c → vsnprintf.c} +114 -74
  443. data/platform/shared/ruby/win32/dir.h +5 -4
  444. data/platform/shared/ruby/win32/miniprelude.c +34 -21
  445. data/platform/shared/ruby/win32/newline.c +18 -14
  446. data/platform/shared/ruby/win32/ruby/config.h +58 -20
  447. data/platform/shared/ruby/win32/win32.c +1398 -475
  448. data/platform/shared/ruby/wince/direct.c +17 -1
  449. data/platform/shared/ruby/wince/io_wce.c +16 -8
  450. data/platform/shared/ruby/wince/ruby/config.h +54 -24
  451. data/platform/shared/ruby/wince/sys/stat.c +81 -0
  452. data/platform/shared/ruby/wince/time_wce.c +47 -4
  453. data/platform/shared/ruby/wince/wince.h +16 -0
  454. data/platform/shared/rubyext/Android.mk +1 -1
  455. data/platform/shared/rubyext/GeoLocation.cpp +93 -48
  456. data/platform/shared/rubyext/GeoLocation.h +9 -4
  457. data/platform/shared/rubyext/System.cpp +6 -0
  458. data/platform/shared/sync/ClientRegister.cpp +1 -1
  459. data/platform/shared/sync/SyncEngine.cpp +15 -55
  460. data/platform/shared/sync/SyncEngine.h +4 -4
  461. data/platform/shared/sync/SyncProtocol_3.h +6 -1
  462. data/platform/shared/sync/SyncSource.cpp +6 -1
  463. data/platform/shared/sync/SyncSource.h +1 -0
  464. data/platform/shared/sync/SyncThread.cpp +20 -9
  465. data/platform/shared/sync/SyncThread.h +14 -9
  466. data/platform/shared/wtl80/include/atlapp.h +2 -0
  467. data/platform/symbian/build/symbian.rake +56 -5
  468. data/platform/symbian/curl/curl.pro +4 -0
  469. data/platform/symbian/rhodes/rhodes.pro +16 -4
  470. data/platform/symbian/rhodes/src/phonebook/ruby_phonebook.cpp +10 -0
  471. data/platform/symbian/rholib/rholib.pro +4 -0
  472. data/platform/symbian/rubylib/rubylib.pro +6 -2
  473. data/platform/symbian/sqlite3/sqlite3.pro +2 -1
  474. data/platform/symbian/syncengine/syncengine.pro +4 -0
  475. data/platform/win32/RhoSimulator/RhoSimulator.exe +0 -0
  476. data/platform/wm/RhoLib/RhoLib.vcproj +333 -0
  477. data/platform/wm/build/build_inf.js +1 -0
  478. data/platform/wm/build/wm.rake +43 -17
  479. data/platform/wm/rhodes.sln +140 -76
  480. data/platform/wm/rhodes/Alert.cpp +1 -1
  481. data/platform/wm/rhodes/IBrowserEngine.cpp +10 -0
  482. data/platform/wm/rhodes/IBrowserEngine.h +24 -0
  483. data/platform/wm/rhodes/IEBrowserEngine.cpp +179 -0
  484. data/platform/wm/rhodes/IEBrowserEngine.h +36 -0
  485. data/platform/wm/rhodes/MainWindow.cpp +176 -178
  486. data/platform/wm/rhodes/MainWindow.h +78 -20
  487. data/platform/wm/rhodes/MapView/Graphics.h +10 -0
  488. data/platform/wm/rhodes/MapView/MapViewManager.cpp +7 -0
  489. data/platform/wm/rhodes/OutlookApp.cpp +3 -3
  490. data/platform/wm/rhodes/RhoWebKitBrowser.cpp +10 -0
  491. data/platform/wm/rhodes/Rhodes.cpp +499 -443
  492. data/platform/wm/rhodes/bluetooth/Bluetooth.cpp +1 -4
  493. data/platform/wm/rhodes/bluetooth/Bluetooth.h +1 -1
  494. data/platform/wm/rhodes/camera/Camera.cpp +3 -6
  495. data/platform/wm/rhodes/phonebook/phonebook.cpp +20 -11
  496. data/platform/wm/rhodes/phonebook/phonebook.h +4 -2
  497. data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +3 -3
  498. data/platform/wm/rhodes/rho/rubyext/GeoLocationImpl.cpp +12 -7
  499. data/platform/wm/rhodes/rho/rubyext/GeoLocationImpl.h +1 -1
  500. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +24 -6
  501. data/platform/wm/rhodes/rho/rubyext/WebView.cpp +0 -32
  502. data/platform/wm/rhodes/rho/rubyext/calendar.cpp +1 -1
  503. data/platform/wm/rhodes/rhodes.vcproj +1792 -129
  504. data/platform/wm/rhodes/rhoelements/RhoWKBrowserEngine.cpp +384 -0
  505. data/platform/wm/rhodes/rhoelements/RhoWKBrowserEngine.h +41 -0
  506. data/platform/wm/rhodes/signature/Signature.cpp +4 -8
  507. data/platform/wm/rhodes/signature/Signature.h +1 -1
  508. data/platform/wm/rhodes/simulator/MainWindowQt.cpp +1 -0
  509. data/platform/wm/rhodes/simulator/MainWindowQt.h +2 -0
  510. data/platform/wm/rhodes/stdafx.h +17 -5
  511. data/platform/wm/rhoelements.sln +447 -0
  512. data/platform/wm/rubylib/rubylib.vcproj +355 -10
  513. data/platform/wm/sqlite3/sqlite3.vcproj +305 -0
  514. data/platform/wm/syncengine/syncengine.vcproj +309 -0
  515. data/platform/wp7/IronRuby/bin/Silverlight3Release/IronRuby.Libraries.dll +0 -0
  516. data/platform/wp7/IronRuby/bin/Silverlight3Release/IronRuby.dll +0 -0
  517. data/platform/wp7/RhoAppRunner/Program.cs +2 -2
  518. data/platform/wp7/RhoRubyExtGen/RhoCamera.cs +59 -0
  519. data/platform/wp7/RhoRubyExtGen/RhoNativeBar.cs +3 -20
  520. data/platform/wp7/RhoRubyExtGen/RhoRubyExtGen.csproj +1 -0
  521. data/platform/wp7/RhoRubyLib/Initializers.Generated.cs +6 -9
  522. data/platform/wp7/RhoRubyLib/RhoRubyLib.csproj +2 -1
  523. data/platform/wp7/RhoRubyLib/rubyext/RhoCamera.cs +130 -0
  524. data/platform/wp7/RhoRubyLib/rubyext/RhoNativeBar.cs +5 -73
  525. data/res/build-tools/RhoRuby.exe +0 -0
  526. data/res/build-tools/RubyMac +0 -0
  527. data/res/build-tools/detool.exe +0 -0
  528. data/res/build-tools/rubylinux +0 -0
  529. data/res/generators/rhogen.rb +5 -0
  530. data/res/generators/templates/application/app/helpers/browser_helper.rb +4 -0
  531. data/res/generators/templates/application/app/index.erb +6 -2
  532. data/res/generators/templates/application/app/layout.erb +8 -5
  533. data/res/generators/templates/application/build.yml +3 -1
  534. data/res/generators/templates/application/gitignore +7 -0
  535. data/res/generators/templates/application/public/css/android.css +366 -5
  536. data/res/generators/templates/application/public/css/blackberry.css +16 -5
  537. data/res/generators/templates/application/public/css/iphone.css +349 -5
  538. data/res/generators/templates/application/public/css/windows_mobile.css +105 -0
  539. data/res/generators/templates/application/public/jqmobile/{jquery.mobile-1.0b2.css → jquery.mobile-1.0b3.css} +64 -5
  540. data/res/generators/templates/application/public/jqmobile/{jquery.mobile-1.0b2.js → jquery.mobile-1.0b3.js} +1125 -727
  541. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b3.min.css +8 -0
  542. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b3.min.js +169 -0
  543. data/res/generators/templates/application/public/jquery/{jquery-1.6.2.js → jquery-1.6.3.js} +226 -163
  544. data/res/generators/templates/application/public/jquery/jquery-1.6.3.min.js +4 -0
  545. data/res/generators/templates/application/public/js/wp7.js +5 -0
  546. data/res/generators/templates/model/edit.erb +6 -2
  547. data/res/generators/templates/model/index.erb +8 -4
  548. data/res/generators/templates/model/new.erb +3 -1
  549. data/res/generators/templates/model/show.erb +6 -2
  550. data/rhobuild.yml.example +0 -1
  551. data/rhodes.gemspec +1 -1
  552. data/spec/framework_spec/app/spec/core/argf/argf_spec.rb +1 -1
  553. data/spec/framework_spec/app/spec/core/argf/binmode_spec.rb +19 -7
  554. data/spec/framework_spec/app/spec/core/argf/bytes_spec.rb +3 -3
  555. data/spec/framework_spec/app/spec/core/argf/chars_spec.rb +3 -3
  556. data/spec/framework_spec/app/spec/core/argf/close_spec.rb +31 -5
  557. data/spec/framework_spec/app/spec/core/argf/closed_spec.rb +6 -5
  558. data/spec/framework_spec/app/spec/core/argf/each_byte_spec.rb +2 -2
  559. data/spec/framework_spec/app/spec/core/argf/each_char_spec.rb +3 -3
  560. data/spec/framework_spec/app/spec/core/argf/each_line_spec.rb +2 -2
  561. data/spec/framework_spec/app/spec/core/argf/each_spec.rb +2 -2
  562. data/spec/framework_spec/app/spec/core/argf/eof_spec.rb +2 -2
  563. data/spec/framework_spec/app/spec/core/argf/file_spec.rb +4 -4
  564. data/spec/framework_spec/app/spec/core/argf/filename_spec.rb +2 -2
  565. data/spec/framework_spec/app/spec/core/argf/fileno_spec.rb +2 -2
  566. data/spec/framework_spec/app/spec/core/argf/getc_spec.rb +5 -5
  567. data/spec/framework_spec/app/spec/core/argf/gets_spec.rb +5 -5
  568. data/spec/framework_spec/app/spec/core/argf/lineno_spec.rb +24 -18
  569. data/spec/framework_spec/app/spec/core/argf/path_spec.rb +2 -2
  570. data/spec/framework_spec/app/spec/core/argf/pos_spec.rb +5 -5
  571. data/spec/framework_spec/app/spec/core/argf/read_spec.rb +19 -20
  572. data/spec/framework_spec/app/spec/core/argf/readchar_spec.rb +5 -5
  573. data/spec/framework_spec/app/spec/core/argf/readline_spec.rb +5 -5
  574. data/spec/framework_spec/app/spec/core/argf/readlines_spec.rb +2 -2
  575. data/spec/framework_spec/app/spec/core/argf/rewind_spec.rb +18 -4
  576. data/spec/framework_spec/app/spec/core/argf/seek_spec.rb +6 -4
  577. data/spec/framework_spec/app/spec/core/argf/shared/each_byte.rb +3 -3
  578. data/spec/framework_spec/app/spec/core/argf/shared/each_char.rb +4 -4
  579. data/spec/framework_spec/app/spec/core/argf/shared/each_line.rb +9 -3
  580. data/spec/framework_spec/app/spec/core/argf/shared/eof.rb +3 -3
  581. data/spec/framework_spec/app/spec/core/argf/shared/filename.rb +3 -3
  582. data/spec/framework_spec/app/spec/core/argf/shared/fileno.rb +3 -3
  583. data/spec/framework_spec/app/spec/core/argf/shared/getc.rb +3 -3
  584. data/spec/framework_spec/app/spec/core/argf/shared/gets.rb +41 -43
  585. data/spec/framework_spec/app/spec/core/argf/shared/pos.rb +3 -3
  586. data/spec/framework_spec/app/spec/core/argf/shared/readlines.rb +2 -2
  587. data/spec/framework_spec/app/spec/core/argf/skip_spec.rb +12 -4
  588. data/spec/framework_spec/app/spec/core/argf/tell_spec.rb +2 -2
  589. data/spec/framework_spec/app/spec/core/argf/to_a_spec.rb +2 -2
  590. data/spec/framework_spec/app/spec/core/argf/to_i_spec.rb +2 -2
  591. data/spec/framework_spec/app/spec/core/argf/to_io_spec.rb +4 -4
  592. data/spec/framework_spec/app/spec/core/argf/to_s_spec.rb +4 -4
  593. data/spec/framework_spec/app/spec/core/array/allocate_spec.rb +3 -3
  594. data/spec/framework_spec/app/spec/core/array/append_spec.rb +2 -2
  595. data/spec/framework_spec/app/spec/core/array/array_spec.rb +1 -1
  596. data/spec/framework_spec/app/spec/core/array/assoc_spec.rb +5 -5
  597. data/spec/framework_spec/app/spec/core/array/at_spec.rb +5 -5
  598. data/spec/framework_spec/app/spec/core/array/choice_spec.rb +2 -2
  599. data/spec/framework_spec/app/spec/core/array/clear_spec.rb +3 -3
  600. data/spec/framework_spec/app/spec/core/array/clone_spec.rb +3 -3
  601. data/spec/framework_spec/app/spec/core/array/collect_spec.rb +3 -3
  602. data/spec/framework_spec/app/spec/core/array/combination_spec.rb +38 -13
  603. data/spec/framework_spec/app/spec/core/array/compact_spec.rb +33 -11
  604. data/spec/framework_spec/app/spec/core/array/comparison_spec.rb +11 -5
  605. data/spec/framework_spec/app/spec/core/array/concat_spec.rb +13 -13
  606. data/spec/framework_spec/app/spec/core/array/constructor_spec.rb +4 -4
  607. data/spec/framework_spec/app/spec/core/array/count_spec.rb +7 -0
  608. data/spec/framework_spec/app/spec/core/array/cycle_spec.rb +82 -14
  609. data/spec/framework_spec/app/spec/core/array/delete_at_spec.rb +2 -2
  610. data/spec/framework_spec/app/spec/core/array/delete_if_spec.rb +16 -7
  611. data/spec/framework_spec/app/spec/core/array/delete_spec.rb +8 -2
  612. data/spec/framework_spec/app/spec/core/array/drop_spec.rb +7 -0
  613. data/spec/framework_spec/app/spec/core/array/drop_while_spec.rb +7 -0
  614. data/spec/framework_spec/app/spec/core/array/dup_spec.rb +3 -3
  615. data/spec/framework_spec/app/spec/core/array/each_index_spec.rb +29 -30
  616. data/spec/framework_spec/app/spec/core/array/each_spec.rb +8 -33
  617. data/spec/framework_spec/app/spec/core/array/element_reference_spec.rb +30 -6
  618. data/spec/framework_spec/app/spec/core/array/element_set_spec.rb +19 -2
  619. data/spec/framework_spec/app/spec/core/array/empty_spec.rb +2 -2
  620. data/spec/framework_spec/app/spec/core/array/eql_spec.rb +3 -3
  621. data/spec/framework_spec/app/spec/core/array/equal_value_spec.rb +34 -3
  622. data/spec/framework_spec/app/spec/core/array/fetch_spec.rb +4 -4
  623. data/spec/framework_spec/app/spec/core/array/fill_spec.rb +27 -12
  624. data/spec/framework_spec/app/spec/core/array/find_index_spec.rb +7 -0
  625. data/spec/framework_spec/app/spec/core/array/first_spec.rb +13 -13
  626. data/spec/framework_spec/app/spec/core/array/fixtures/classes.rb +447 -6
  627. data/spec/framework_spec/app/spec/core/array/flatten_spec.rb +42 -19
  628. data/spec/framework_spec/app/spec/core/array/frozen_spec.rb +17 -15
  629. data/spec/framework_spec/app/spec/core/array/hash_spec.rb +22 -3
  630. data/spec/framework_spec/app/spec/core/array/include_spec.rb +3 -3
  631. data/spec/framework_spec/app/spec/core/array/index_spec.rb +1 -1
  632. data/spec/framework_spec/app/spec/core/array/indexes_spec.rb +3 -3
  633. data/spec/framework_spec/app/spec/core/array/indices_spec.rb +3 -3
  634. data/spec/framework_spec/app/spec/core/array/initialize_copy_spec.rb +3 -3
  635. data/spec/framework_spec/app/spec/core/array/initialize_spec.rb +2 -2
  636. data/spec/framework_spec/app/spec/core/array/insert_spec.rb +13 -11
  637. data/spec/framework_spec/app/spec/core/array/inspect_spec.rb +33 -3
  638. data/spec/framework_spec/app/spec/core/array/intersection_spec.rb +13 -13
  639. data/spec/framework_spec/app/spec/core/array/join_spec.rb +24 -4
  640. data/spec/framework_spec/app/spec/core/array/keep_if_spec.rb +12 -0
  641. data/spec/framework_spec/app/spec/core/array/last_spec.rb +11 -11
  642. data/spec/framework_spec/app/spec/core/array/length_spec.rb +3 -3
  643. data/spec/framework_spec/app/spec/core/array/map_spec.rb +3 -3
  644. data/spec/framework_spec/app/spec/core/array/minus_spec.rb +9 -9
  645. data/spec/framework_spec/app/spec/core/array/multiply_spec.rb +23 -10
  646. data/spec/framework_spec/app/spec/core/array/new_spec.rb +4 -4
  647. data/spec/framework_spec/app/spec/core/array/nitems_spec.rb +3 -3
  648. data/spec/framework_spec/app/spec/core/array/pack/a_spec.rb +59 -0
  649. data/spec/framework_spec/app/spec/core/array/pack/at_spec.rb +30 -0
  650. data/spec/framework_spec/app/spec/core/array/pack/b_spec.rb +109 -0
  651. data/spec/framework_spec/app/spec/core/array/pack/c_spec.rb +83 -0
  652. data/spec/framework_spec/app/spec/core/array/pack/comment_spec.rb +25 -0
  653. data/spec/framework_spec/app/spec/core/array/pack/d_spec.rb +39 -0
  654. data/spec/framework_spec/app/spec/core/array/pack/e_spec.rb +25 -0
  655. data/spec/framework_spec/app/spec/core/array/pack/f_spec.rb +39 -0
  656. data/spec/framework_spec/app/spec/core/array/pack/g_spec.rb +25 -0
  657. data/spec/framework_spec/app/spec/core/array/pack/h_spec.rb +201 -0
  658. data/spec/framework_spec/app/spec/core/array/pack/i_spec.rb +73 -0
  659. data/spec/framework_spec/app/spec/core/array/pack/l_spec.rb +193 -0
  660. data/spec/framework_spec/app/spec/core/array/pack/m_spec.rb +337 -0
  661. data/spec/framework_spec/app/spec/core/array/pack/n_spec.rb +25 -0
  662. data/spec/framework_spec/app/spec/core/array/pack/percent_spec.rb +7 -0
  663. data/spec/framework_spec/app/spec/core/array/pack/q_spec.rb +43 -0
  664. data/spec/framework_spec/app/spec/core/array/pack/s_spec.rb +73 -0
  665. data/spec/framework_spec/app/spec/core/array/pack/shared/basic.rb +57 -0
  666. data/spec/framework_spec/app/spec/core/array/pack/shared/encodings.rb +16 -0
  667. data/spec/framework_spec/app/spec/core/array/pack/shared/float.rb +277 -0
  668. data/spec/framework_spec/app/spec/core/array/pack/shared/integer.rb +381 -0
  669. data/spec/framework_spec/app/spec/core/array/pack/shared/numeric_basic.rb +54 -0
  670. data/spec/framework_spec/app/spec/core/array/pack/shared/string.rb +83 -0
  671. data/spec/framework_spec/app/spec/core/array/pack/shared/unicode.rb +89 -0
  672. data/spec/framework_spec/app/spec/core/array/pack/u_spec.rb +130 -0
  673. data/spec/framework_spec/app/spec/core/array/pack/v_spec.rb +25 -0
  674. data/spec/framework_spec/app/spec/core/array/pack/w_spec.rb +44 -0
  675. data/spec/framework_spec/app/spec/core/array/pack/x_spec.rb +64 -0
  676. data/spec/framework_spec/app/spec/core/array/pack/z_spec.rb +32 -0
  677. data/spec/framework_spec/app/spec/core/array/pack_spec.rb +409 -369
  678. data/spec/framework_spec/app/spec/core/array/partition_spec.rb +6 -6
  679. data/spec/framework_spec/app/spec/core/array/permutation_spec.rb +34 -15
  680. data/spec/framework_spec/app/spec/core/array/plus_spec.rb +6 -6
  681. data/spec/framework_spec/app/spec/core/array/pop_spec.rb +17 -4
  682. data/spec/framework_spec/app/spec/core/array/product_spec.rb +49 -5
  683. data/spec/framework_spec/app/spec/core/array/push_spec.rb +4 -4
  684. data/spec/framework_spec/app/spec/core/array/rassoc_spec.rb +2 -2
  685. data/spec/framework_spec/app/spec/core/array/reject_spec.rb +42 -29
  686. data/spec/framework_spec/app/spec/core/array/repeated_combination_spec.rb +59 -0
  687. data/spec/framework_spec/app/spec/core/array/repeated_permutation_spec.rb +72 -0
  688. data/spec/framework_spec/app/spec/core/array/replace_spec.rb +3 -3
  689. data/spec/framework_spec/app/spec/core/array/reverse_each_spec.rb +26 -39
  690. data/spec/framework_spec/app/spec/core/array/reverse_spec.rb +15 -7
  691. data/spec/framework_spec/app/spec/core/array/rindex_spec.rb +28 -16
  692. data/spec/framework_spec/app/spec/core/array/rotate_spec.rb +85 -0
  693. data/spec/framework_spec/app/spec/core/array/sample_spec.rb +4 -10
  694. data/spec/framework_spec/app/spec/core/array/select_spec.rb +16 -3
  695. data/spec/framework_spec/app/spec/core/array/shared/clone.rb +2 -2
  696. data/spec/framework_spec/app/spec/core/array/shared/collect.rb +3 -3
  697. data/spec/framework_spec/app/spec/core/array/shared/enumeratorize.rb +12 -0
  698. data/spec/framework_spec/app/spec/core/array/shared/eql.rb +9 -5
  699. data/spec/framework_spec/app/spec/core/array/shared/indexes.rb +1 -1
  700. data/spec/framework_spec/app/spec/core/array/shared/join.rb +122 -90
  701. data/spec/framework_spec/app/spec/core/array/shared/keep_if.rb +11 -0
  702. data/spec/framework_spec/app/spec/core/array/shared/slice.rb +67 -6
  703. data/spec/framework_spec/app/spec/core/array/shift_spec.rb +18 -4
  704. data/spec/framework_spec/app/spec/core/array/shuffle_spec.rb +23 -14
  705. data/spec/framework_spec/app/spec/core/array/size_spec.rb +3 -3
  706. data/spec/framework_spec/app/spec/core/array/slice_spec.rb +19 -3
  707. data/spec/framework_spec/app/spec/core/array/sort_by_spec.rb +48 -0
  708. data/spec/framework_spec/app/spec/core/array/sort_spec.rb +65 -65
  709. data/spec/framework_spec/app/spec/core/array/take_spec.rb +7 -0
  710. data/spec/framework_spec/app/spec/core/array/take_while_spec.rb +7 -0
  711. data/spec/framework_spec/app/spec/core/array/to_a_spec.rb +7 -8
  712. data/spec/framework_spec/app/spec/core/array/to_ary_spec.rb +2 -2
  713. data/spec/framework_spec/app/spec/core/array/to_s_spec.rb +2 -5
  714. data/spec/framework_spec/app/spec/core/array/transpose_spec.rb +6 -6
  715. data/spec/framework_spec/app/spec/core/array/try_convert_spec.rb +15 -17
  716. data/spec/framework_spec/app/spec/core/array/union_spec.rb +13 -13
  717. data/spec/framework_spec/app/spec/core/array/uniq_spec.rb +41 -15
  718. data/spec/framework_spec/app/spec/core/array/unshift_spec.rb +9 -7
  719. data/spec/framework_spec/app/spec/core/array/values_at_spec.rb +5 -5
  720. data/spec/framework_spec/app/spec/core/array/zip_spec.rb +15 -3
  721. data/spec/framework_spec/app/spec/core/basicobject/__send___spec.rb +9 -0
  722. data/spec/framework_spec/app/spec/core/basicobject/ancestors_spec.rb +9 -0
  723. data/spec/framework_spec/app/spec/core/basicobject/basicobject_spec.rb +67 -0
  724. data/spec/framework_spec/app/spec/core/basicobject/class_spec.rb +9 -0
  725. data/spec/framework_spec/app/spec/core/basicobject/equal_spec.rb +20 -0
  726. data/spec/framework_spec/app/spec/core/basicobject/equal_value_spec.rb +26 -0
  727. data/spec/framework_spec/app/spec/core/basicobject/fixtures/common.rb +5 -0
  728. data/spec/framework_spec/app/spec/core/basicobject/fixtures/remove_method_missing.rb +9 -0
  729. data/spec/framework_spec/app/spec/core/basicobject/initialize_spec.rb +9 -0
  730. data/spec/framework_spec/app/spec/core/basicobject/instance_eval_spec.rb +14 -0
  731. data/spec/framework_spec/app/spec/core/basicobject/instance_exec_spec.rb +19 -0
  732. data/spec/framework_spec/app/spec/core/basicobject/method_missing_spec.rb +15 -0
  733. data/spec/framework_spec/app/spec/core/basicobject/new_spec.rb +7 -5
  734. data/spec/framework_spec/app/spec/core/basicobject/not_equal_spec.rb +26 -0
  735. data/spec/framework_spec/app/spec/core/basicobject/not_spec.rb +13 -0
  736. data/spec/framework_spec/app/spec/core/basicobject/singleton_method_added_spec.rb +8 -0
  737. data/spec/framework_spec/app/spec/core/basicobject/singleton_method_removed_spec.rb +8 -0
  738. data/spec/framework_spec/app/spec/core/basicobject/singleton_method_undefined_spec.rb +7 -0
  739. data/spec/framework_spec/app/spec/core/basicobject/superclass_spec.rb +9 -0
  740. data/spec/framework_spec/app/spec/core/bignum/abs_spec.rb +4 -5
  741. data/spec/framework_spec/app/spec/core/bignum/bit_and_spec.rb +4 -4
  742. data/spec/framework_spec/app/spec/core/bignum/bit_or_spec.rb +5 -5
  743. data/spec/framework_spec/app/spec/core/bignum/bit_xor_spec.rb +5 -5
  744. data/spec/framework_spec/app/spec/core/bignum/case_compare_spec.rb +7 -0
  745. data/spec/framework_spec/app/spec/core/bignum/coerce_spec.rb +1 -1
  746. data/spec/framework_spec/app/spec/core/bignum/comparison_spec.rb +143 -20
  747. data/spec/framework_spec/app/spec/core/bignum/complement_spec.rb +1 -1
  748. data/spec/framework_spec/app/spec/core/bignum/div_spec.rb +2 -2
  749. data/spec/framework_spec/app/spec/core/bignum/divide_spec.rb +2 -2
  750. data/spec/framework_spec/app/spec/core/bignum/divmod_spec.rb +11 -6
  751. data/spec/framework_spec/app/spec/core/bignum/element_reference_spec.rb +4 -4
  752. data/spec/framework_spec/app/spec/core/bignum/eql_spec.rb +1 -1
  753. data/spec/framework_spec/app/spec/core/bignum/equal_value_spec.rb +6 -6
  754. data/spec/framework_spec/app/spec/core/bignum/even_spec.rb +21 -0
  755. data/spec/framework_spec/app/spec/core/bignum/exponent_spec.rb +16 -2
  756. data/spec/framework_spec/app/spec/core/bignum/fdiv_spec.rb +7 -0
  757. data/spec/framework_spec/app/spec/core/bignum/gt_spec.rb +3 -3
  758. data/spec/framework_spec/app/spec/core/bignum/gte_spec.rb +2 -2
  759. data/spec/framework_spec/app/spec/core/bignum/hash_spec.rb +1 -1
  760. data/spec/framework_spec/app/spec/core/bignum/left_shift_spec.rb +64 -40
  761. data/spec/framework_spec/app/spec/core/bignum/lt_spec.rb +5 -5
  762. data/spec/framework_spec/app/spec/core/bignum/lte_spec.rb +2 -2
  763. data/spec/framework_spec/app/spec/core/bignum/magnitude_spec.rb +10 -0
  764. data/spec/framework_spec/app/spec/core/bignum/minus_spec.rb +3 -3
  765. data/spec/framework_spec/app/spec/core/bignum/modulo_spec.rb +2 -2
  766. data/spec/framework_spec/app/spec/core/bignum/multiply_spec.rb +2 -2
  767. data/spec/framework_spec/app/spec/core/bignum/odd_spec.rb +21 -0
  768. data/spec/framework_spec/app/spec/core/bignum/plus_spec.rb +3 -3
  769. data/spec/framework_spec/app/spec/core/bignum/quo_spec.rb +1 -1
  770. data/spec/framework_spec/app/spec/core/bignum/remainder_spec.rb +19 -8
  771. data/spec/framework_spec/app/spec/core/bignum/right_shift_spec.rb +93 -34
  772. data/spec/framework_spec/app/spec/core/bignum/shared/abs.rb +6 -0
  773. data/spec/framework_spec/app/spec/core/bignum/shared/divide.rb +2 -2
  774. data/spec/framework_spec/app/spec/core/bignum/shared/modulo.rb +13 -4
  775. data/spec/framework_spec/app/spec/core/bignum/size_spec.rb +15 -1
  776. data/spec/framework_spec/app/spec/core/bignum/to_f_spec.rb +1 -1
  777. data/spec/framework_spec/app/spec/core/bignum/to_s_spec.rb +4 -4
  778. data/spec/framework_spec/app/spec/core/bignum/uminus_spec.rb +2 -2
  779. data/spec/framework_spec/app/spec/core/binding/clone_spec.rb +7 -8
  780. data/spec/framework_spec/app/spec/core/binding/dup_spec.rb +7 -8
  781. data/spec/framework_spec/app/spec/core/binding/eval_spec.rb +19 -25
  782. data/spec/framework_spec/app/spec/core/binding/fixtures/classes.rb +1 -1
  783. data/spec/framework_spec/app/spec/core/builtin_constants/builtin_constants_spec.rb +57 -0
  784. data/spec/framework_spec/app/spec/core/class/allocate_spec.rb +11 -5
  785. data/spec/framework_spec/app/spec/core/class/dup_spec.rb +72 -0
  786. data/spec/framework_spec/app/spec/core/class/fixtures/classes.rb +5 -5
  787. data/spec/framework_spec/app/spec/core/class/inherited_spec.rb +22 -22
  788. data/spec/framework_spec/app/spec/core/class/initialize_copy_spec.rb +22 -1
  789. data/spec/framework_spec/app/spec/core/class/initialize_spec.rb +37 -6
  790. data/spec/framework_spec/app/spec/core/class/new_spec.rb +11 -2
  791. data/spec/framework_spec/app/spec/core/class/superclass_spec.rb +37 -8
  792. data/spec/framework_spec/app/spec/core/comparable/between_spec.rb +3 -3
  793. data/spec/framework_spec/app/spec/core/comparable/equal_value_spec.rb +11 -11
  794. data/spec/framework_spec/app/spec/core/comparable/fixtures/classes.rb +3 -3
  795. data/spec/framework_spec/app/spec/core/comparable/gt_spec.rb +8 -8
  796. data/spec/framework_spec/app/spec/core/comparable/gte_spec.rb +9 -9
  797. data/spec/framework_spec/app/spec/core/comparable/lt_spec.rb +9 -9
  798. data/spec/framework_spec/app/spec/core/comparable/lte_spec.rb +8 -8
  799. data/spec/framework_spec/app/spec/core/complex/Complex_spec.rb +20 -0
  800. data/spec/framework_spec/app/spec/core/complex/abs2_spec.rb +8 -0
  801. data/spec/framework_spec/app/spec/core/complex/abs_spec.rb +8 -0
  802. data/spec/framework_spec/app/spec/core/complex/angle_spec.rb +10 -0
  803. data/spec/framework_spec/app/spec/core/complex/arg_spec.rb +10 -0
  804. data/spec/framework_spec/app/spec/core/complex/coerce_spec.rb +8 -0
  805. data/spec/framework_spec/app/spec/core/complex/conj_spec.rb +10 -0
  806. data/spec/framework_spec/app/spec/core/complex/conjugate_spec.rb +10 -0
  807. data/spec/framework_spec/app/spec/core/complex/denominator_spec.rb +9 -0
  808. data/spec/framework_spec/app/spec/core/complex/divide_spec.rb +24 -0
  809. data/spec/framework_spec/app/spec/core/complex/eql_spec.rb +7 -0
  810. data/spec/framework_spec/app/spec/core/complex/equal_value_spec.rb +16 -0
  811. data/spec/framework_spec/app/spec/core/complex/exponent_spec.rb +24 -0
  812. data/spec/framework_spec/app/spec/core/complex/fdiv_spec.rb +131 -0
  813. data/spec/framework_spec/app/spec/core/complex/hash_spec.rb +8 -0
  814. data/spec/framework_spec/app/spec/core/complex/imag_spec.rb +7 -0
  815. data/spec/framework_spec/app/spec/core/complex/imaginary_spec.rb +7 -0
  816. data/spec/framework_spec/app/spec/core/complex/inspect_spec.rb +7 -0
  817. data/spec/framework_spec/app/spec/core/complex/integer_spec.rb +13 -0
  818. data/spec/framework_spec/app/spec/core/complex/magnitude_spec.rb +8 -0
  819. data/spec/framework_spec/app/spec/core/complex/marshal_dump_spec.rb +7 -0
  820. data/spec/framework_spec/app/spec/core/complex/marshal_load_spec.rb +7 -0
  821. data/spec/framework_spec/app/spec/core/complex/minus_spec.rb +15 -0
  822. data/spec/framework_spec/app/spec/core/complex/multiply_spec.rb +16 -0
  823. data/spec/framework_spec/app/spec/core/complex/numerator_spec.rb +7 -0
  824. data/spec/framework_spec/app/spec/core/complex/phase_spec.rb +7 -0
  825. data/spec/framework_spec/app/spec/core/complex/plus_spec.rb +16 -0
  826. data/spec/framework_spec/app/spec/core/complex/polar_spec.rb +17 -0
  827. data/spec/framework_spec/app/spec/core/complex/quo_spec.rb +7 -0
  828. data/spec/framework_spec/app/spec/core/complex/rationalize_spec.rb +15 -0
  829. data/spec/framework_spec/app/spec/core/complex/real_spec.rb +26 -0
  830. data/spec/framework_spec/app/spec/core/complex/rect_spec.rb +11 -0
  831. data/spec/framework_spec/app/spec/core/complex/rectangular_spec.rb +14 -0
  832. data/spec/framework_spec/app/spec/core/complex/to_f_spec.rb +7 -0
  833. data/spec/framework_spec/app/spec/core/complex/to_i_spec.rb +7 -0
  834. data/spec/framework_spec/app/spec/core/complex/to_r_spec.rb +7 -0
  835. data/spec/framework_spec/app/spec/core/complex/to_s_spec.rb +12 -0
  836. data/spec/framework_spec/app/spec/core/complex/uminus_spec.rb +7 -0
  837. data/spec/framework_spec/app/spec/core/continuation/call_spec.rb +8 -1
  838. data/spec/framework_spec/app/spec/core/continuation/element_reference_spec.rb +8 -1
  839. data/spec/framework_spec/app/spec/core/continuation/new_spec.rb +8 -0
  840. data/spec/framework_spec/app/spec/core/dir/chdir_spec.rb +64 -17
  841. data/spec/framework_spec/app/spec/core/dir/chroot_spec.rb +50 -26
  842. data/spec/framework_spec/app/spec/core/dir/close_spec.rb +32 -16
  843. data/spec/framework_spec/app/spec/core/dir/delete_spec.rb +11 -3
  844. data/spec/framework_spec/app/spec/core/dir/dir_spec.rb +1 -1
  845. data/spec/framework_spec/app/spec/core/dir/each_spec.rb +24 -8
  846. data/spec/framework_spec/app/spec/core/dir/element_reference_spec.rb +19 -3
  847. data/spec/framework_spec/app/spec/core/dir/entries_spec.rb +19 -3
  848. data/spec/framework_spec/app/spec/core/dir/exist_spec.rb +17 -0
  849. data/spec/framework_spec/app/spec/core/dir/exists_spec.rb +17 -0
  850. data/spec/framework_spec/app/spec/core/dir/fixtures/common.rb +96 -73
  851. data/spec/framework_spec/app/spec/core/dir/foreach_spec.rb +20 -4
  852. data/spec/framework_spec/app/spec/core/dir/getwd_spec.rb +12 -4
  853. data/spec/framework_spec/app/spec/core/dir/glob_spec.rb +60 -8
  854. data/spec/framework_spec/app/spec/core/dir/home_spec.rb +15 -6
  855. data/spec/framework_spec/app/spec/core/dir/initialize_spec.rb +29 -2
  856. data/spec/framework_spec/app/spec/core/dir/inspect_spec.rb +26 -0
  857. data/spec/framework_spec/app/spec/core/dir/mkdir_spec.rb +56 -21
  858. data/spec/framework_spec/app/spec/core/dir/open_spec.rb +11 -3
  859. data/spec/framework_spec/app/spec/core/dir/path_spec.rb +8 -24
  860. data/spec/framework_spec/app/spec/core/dir/pos_spec.rb +28 -4
  861. data/spec/framework_spec/app/spec/core/dir/pwd_spec.rb +44 -20
  862. data/spec/framework_spec/app/spec/core/dir/read_spec.rb +11 -5
  863. data/spec/framework_spec/app/spec/core/dir/rewind_spec.rb +13 -7
  864. data/spec/framework_spec/app/spec/core/dir/rmdir_spec.rb +11 -3
  865. data/spec/framework_spec/app/spec/core/dir/seek_spec.rb +11 -3
  866. data/spec/framework_spec/app/spec/core/dir/shared/chroot.rb +43 -0
  867. data/spec/framework_spec/app/spec/core/dir/shared/delete.rb +27 -8
  868. data/spec/framework_spec/app/spec/core/dir/shared/exists.rb +53 -0
  869. data/spec/framework_spec/app/spec/core/dir/shared/glob.rb +61 -8
  870. data/spec/framework_spec/app/spec/core/dir/shared/open.rb +18 -2
  871. data/spec/framework_spec/app/spec/core/dir/shared/path.rb +29 -0
  872. data/spec/framework_spec/app/spec/core/dir/shared/pos.rb +1 -1
  873. data/spec/framework_spec/app/spec/core/dir/shared/pwd.rb +13 -13
  874. data/spec/framework_spec/app/spec/core/dir/tell_spec.rb +12 -6
  875. data/spec/framework_spec/app/spec/core/dir/to_path.rb +17 -0
  876. data/spec/framework_spec/app/spec/core/dir/to_path_spec.rb +7 -0
  877. data/spec/framework_spec/app/spec/core/dir/unlink_spec.rb +11 -3
  878. data/spec/framework_spec/app/spec/core/encoding/_dump_spec.rb +7 -0
  879. data/spec/framework_spec/app/spec/core/encoding/_load_spec.rb +7 -0
  880. data/spec/framework_spec/app/spec/core/encoding/aliases_spec.rb +45 -0
  881. data/spec/framework_spec/app/spec/core/encoding/ascii_compatible_spec.rb +13 -0
  882. data/spec/framework_spec/app/spec/core/encoding/compatible_spec.rb +26 -0
  883. data/spec/framework_spec/app/spec/core/encoding/converter/asciicompat_encoding_spec.rb +48 -0
  884. data/spec/framework_spec/app/spec/core/encoding/converter/constants_spec.rb +133 -0
  885. data/spec/framework_spec/app/spec/core/encoding/converter/convert_spec.rb +46 -0
  886. data/spec/framework_spec/app/spec/core/encoding/converter/convpath_spec.rb +65 -0
  887. data/spec/framework_spec/app/spec/core/encoding/converter/destination_encoding_spec.rb +13 -0
  888. data/spec/framework_spec/app/spec/core/encoding/converter/finish_spec.rb +38 -0
  889. data/spec/framework_spec/app/spec/core/encoding/converter/insert_output_spec.rb +7 -0
  890. data/spec/framework_spec/app/spec/core/encoding/converter/inspect_spec.rb +7 -0
  891. data/spec/framework_spec/app/spec/core/encoding/converter/last_error_spec.rb +84 -0
  892. data/spec/framework_spec/app/spec/core/encoding/converter/primitive_convert_spec.rb +137 -0
  893. data/spec/framework_spec/app/spec/core/encoding/converter/primitive_errinfo_spec.rb +71 -0
  894. data/spec/framework_spec/app/spec/core/encoding/converter/putback_spec.rb +49 -0
  895. data/spec/framework_spec/app/spec/core/encoding/converter/replacement_spec.rb +63 -0
  896. data/spec/framework_spec/app/spec/core/encoding/converter/search_convpath_spec.rb +73 -0
  897. data/spec/framework_spec/app/spec/core/encoding/converter/source_encoding_spec.rb +13 -0
  898. data/spec/framework_spec/app/spec/core/encoding/default_external_spec.rb +57 -0
  899. data/spec/framework_spec/app/spec/core/encoding/default_internal_spec.rb +83 -0
  900. data/spec/framework_spec/app/spec/core/encoding/dummy_spec.rb +16 -0
  901. data/spec/framework_spec/app/spec/core/encoding/find_spec.rb +82 -0
  902. data/spec/framework_spec/app/spec/core/encoding/fixtures/classes.rb +48 -0
  903. data/spec/framework_spec/app/spec/core/encoding/inspect_spec.rb +21 -0
  904. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/destination_encoding_name_spec.rb +20 -0
  905. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/destination_encoding_spec.rb +20 -0
  906. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/error_bytes_spec.rb +31 -0
  907. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/incomplete_input_spec.rb +30 -0
  908. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/readagain_bytes_spec.rb +31 -0
  909. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/source_encoding_name_spec.rb +30 -0
  910. data/spec/framework_spec/app/spec/core/encoding/invalid_byte_sequence_error/source_encoding_spec.rb +35 -0
  911. data/spec/framework_spec/app/spec/core/encoding/list_spec.rb +43 -0
  912. data/spec/framework_spec/app/spec/core/encoding/locale_charmap_spec.rb +38 -0
  913. data/spec/framework_spec/app/spec/core/encoding/name_list_spec.rb +25 -0
  914. data/spec/framework_spec/app/spec/core/encoding/name_spec.rb +7 -0
  915. data/spec/framework_spec/app/spec/core/encoding/names_spec.rb +37 -0
  916. data/spec/framework_spec/app/spec/core/encoding/replicate_spec.rb +34 -0
  917. data/spec/framework_spec/app/spec/core/encoding/shared/name.rb +15 -0
  918. data/spec/framework_spec/app/spec/core/encoding/to_s_spec.rb +7 -0
  919. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/destination_encoding_name_spec.rb +17 -0
  920. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/destination_encoding_spec.rb +17 -0
  921. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/error_char_spec.rb +29 -0
  922. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/source_encoding_name_spec.rb +30 -0
  923. data/spec/framework_spec/app/spec/core/encoding/undefined_conversion_error/source_encoding_spec.rb +31 -0
  924. data/spec/framework_spec/app/spec/core/enumerable/all_spec.rb +2 -15
  925. data/spec/framework_spec/app/spec/core/enumerable/any_spec.rb +2 -7
  926. data/spec/framework_spec/app/spec/core/enumerable/chunk_spec.rb +44 -0
  927. data/spec/framework_spec/app/spec/core/enumerable/collect_concat_spec.rb +9 -0
  928. data/spec/framework_spec/app/spec/core/enumerable/collect_spec.rb +4 -4
  929. data/spec/framework_spec/app/spec/core/enumerable/count_spec.rb +4 -4
  930. data/spec/framework_spec/app/spec/core/enumerable/cycle_spec.rb +20 -6
  931. data/spec/framework_spec/app/spec/core/enumerable/detect_spec.rb +4 -4
  932. data/spec/framework_spec/app/spec/core/enumerable/drop_spec.rb +2 -2
  933. data/spec/framework_spec/app/spec/core/enumerable/drop_while_spec.rb +5 -5
  934. data/spec/framework_spec/app/spec/core/enumerable/each_cons_spec.rb +8 -8
  935. data/spec/framework_spec/app/spec/core/enumerable/each_entry_spec.rb +40 -0
  936. data/spec/framework_spec/app/spec/core/enumerable/each_slice_spec.rb +8 -8
  937. data/spec/framework_spec/app/spec/core/enumerable/each_with_index_spec.rb +15 -15
  938. data/spec/framework_spec/app/spec/core/enumerable/each_with_object_spec.rb +6 -6
  939. data/spec/framework_spec/app/spec/core/enumerable/entries_spec.rb +5 -5
  940. data/spec/framework_spec/app/spec/core/enumerable/find_all_spec.rb +4 -4
  941. data/spec/framework_spec/app/spec/core/enumerable/{find_index.rb → find_index_spec.rb} +5 -5
  942. data/spec/framework_spec/app/spec/core/enumerable/find_spec.rb +4 -4
  943. data/spec/framework_spec/app/spec/core/enumerable/first_spec.rb +6 -6
  944. data/spec/framework_spec/app/spec/core/enumerable/fixtures/classes.rb +67 -16
  945. data/spec/framework_spec/app/spec/core/enumerable/flat_map_spec.rb +9 -0
  946. data/spec/framework_spec/app/spec/core/enumerable/grep_spec.rb +12 -7
  947. data/spec/framework_spec/app/spec/core/enumerable/group_by_spec.rb +5 -5
  948. data/spec/framework_spec/app/spec/core/enumerable/include_spec.rb +4 -4
  949. data/spec/framework_spec/app/spec/core/enumerable/inject_spec.rb +4 -4
  950. data/spec/framework_spec/app/spec/core/enumerable/map_spec.rb +5 -5
  951. data/spec/framework_spec/app/spec/core/enumerable/max_by_spec.rb +4 -4
  952. data/spec/framework_spec/app/spec/core/enumerable/max_spec.rb +27 -12
  953. data/spec/framework_spec/app/spec/core/enumerable/member_spec.rb +4 -4
  954. data/spec/framework_spec/app/spec/core/enumerable/min_by_spec.rb +4 -4
  955. data/spec/framework_spec/app/spec/core/enumerable/min_spec.rb +27 -11
  956. data/spec/framework_spec/app/spec/core/enumerable/minmax_by_spec.rb +4 -4
  957. data/spec/framework_spec/app/spec/core/enumerable/minmax_spec.rb +26 -10
  958. data/spec/framework_spec/app/spec/core/enumerable/none_spec.rb +42 -0
  959. data/spec/framework_spec/app/spec/core/enumerable/one_spec.rb +5 -0
  960. data/spec/framework_spec/app/spec/core/enumerable/partition_spec.rb +4 -4
  961. data/spec/framework_spec/app/spec/core/enumerable/reduce_spec.rb +4 -4
  962. data/spec/framework_spec/app/spec/core/enumerable/reject_spec.rb +5 -5
  963. data/spec/framework_spec/app/spec/core/enumerable/reverse_each_spec.rb +4 -4
  964. data/spec/framework_spec/app/spec/core/enumerable/select_spec.rb +4 -4
  965. data/spec/framework_spec/app/spec/core/enumerable/shared/collect.rb +13 -5
  966. data/spec/framework_spec/app/spec/core/enumerable/shared/collect_concat.rb +27 -0
  967. data/spec/framework_spec/app/spec/core/enumerable/shared/entries.rb +5 -1
  968. data/spec/framework_spec/app/spec/core/enumerable/shared/find.rb +24 -11
  969. data/spec/framework_spec/app/spec/core/enumerable/shared/find_all.rb +9 -3
  970. data/spec/framework_spec/app/spec/core/enumerable/shared/include.rb +14 -3
  971. data/spec/framework_spec/app/spec/core/enumerable/shared/inject.rb +8 -8
  972. data/spec/framework_spec/app/spec/core/enumerable/shared/take.rb +5 -3
  973. data/spec/framework_spec/app/spec/core/enumerable/slice_before_spec.rb +77 -0
  974. data/spec/framework_spec/app/spec/core/enumerable/sort_by_spec.rb +10 -2
  975. data/spec/framework_spec/app/spec/core/enumerable/sort_spec.rb +22 -9
  976. data/spec/framework_spec/app/spec/core/enumerable/take_spec.rb +5 -5
  977. data/spec/framework_spec/app/spec/core/enumerable/take_while_spec.rb +3 -3
  978. data/spec/framework_spec/app/spec/core/enumerable/to_a_spec.rb +5 -5
  979. data/spec/framework_spec/app/spec/core/enumerable/zip_spec.rb +18 -7
  980. data/spec/framework_spec/app/spec/core/enumerator/each_spec.rb +7 -0
  981. data/spec/framework_spec/app/spec/core/enumerator/each_with_index_spec.rb +25 -0
  982. data/spec/framework_spec/app/spec/core/enumerator/each_with_object_spec.rb +8 -0
  983. data/spec/framework_spec/app/spec/core/enumerator/enum_for_spec.rb +9 -0
  984. data/spec/framework_spec/app/spec/core/enumerator/feed_spec.rb +7 -0
  985. data/spec/framework_spec/app/spec/core/enumerator/generator/each_spec.rb +7 -0
  986. data/spec/framework_spec/app/spec/core/enumerator/inspect_spec.rb +7 -0
  987. data/spec/framework_spec/app/spec/core/enumerator/new_spec.rb +28 -0
  988. data/spec/framework_spec/app/spec/core/enumerator/next_spec.rb +9 -0
  989. data/spec/framework_spec/app/spec/core/enumerator/next_values_spec.rb +7 -0
  990. data/spec/framework_spec/app/spec/core/enumerator/peek_spec.rb +38 -0
  991. data/spec/framework_spec/app/spec/core/enumerator/peek_values_spec.rb +7 -0
  992. data/spec/framework_spec/app/spec/core/enumerator/rewind_spec.rb +27 -0
  993. data/spec/framework_spec/app/spec/core/enumerator/to_enum_spec.rb +9 -0
  994. data/spec/framework_spec/app/spec/core/enumerator/with_index_spec.rb +68 -0
  995. data/spec/framework_spec/app/spec/core/enumerator/with_object_spec.rb +8 -0
  996. data/spec/framework_spec/app/spec/core/enumerator/yielder/append_spec.rb +19 -0
  997. data/spec/framework_spec/app/spec/core/enumerator/yielder/yield_spec.rb +18 -0
  998. data/spec/framework_spec/app/spec/core/env/clear_spec.rb +19 -13
  999. data/spec/framework_spec/app/spec/core/env/delete_if_spec.rb +26 -28
  1000. data/spec/framework_spec/app/spec/core/env/delete_spec.rb +1 -1
  1001. data/spec/framework_spec/app/spec/core/env/each_key_spec.rb +39 -33
  1002. data/spec/framework_spec/app/spec/core/env/each_pair_spec.rb +6 -7
  1003. data/spec/framework_spec/app/spec/core/env/each_spec.rb +6 -7
  1004. data/spec/framework_spec/app/spec/core/env/each_value_spec.rb +39 -33
  1005. data/spec/framework_spec/app/spec/core/env/element_reference_spec.rb +25 -2
  1006. data/spec/framework_spec/app/spec/core/env/element_set_spec.rb +2 -2
  1007. data/spec/framework_spec/app/spec/core/env/empty_spec.rb +23 -24
  1008. data/spec/framework_spec/app/spec/core/env/fetch_spec.rb +6 -1
  1009. data/spec/framework_spec/app/spec/core/env/has_key_spec.rb +2 -2
  1010. data/spec/framework_spec/app/spec/core/env/has_value_spec.rb +6 -7
  1011. data/spec/framework_spec/app/spec/core/env/include_spec.rb +2 -2
  1012. data/spec/framework_spec/app/spec/core/env/index_spec.rb +6 -1
  1013. data/spec/framework_spec/app/spec/core/env/indexes_spec.rb +1 -1
  1014. data/spec/framework_spec/app/spec/core/env/indices_spec.rb +1 -1
  1015. data/spec/framework_spec/app/spec/core/env/inspect_spec.rb +11 -12
  1016. data/spec/framework_spec/app/spec/core/env/invert_spec.rb +12 -13
  1017. data/spec/framework_spec/app/spec/core/env/key_spec.rb +9 -2
  1018. data/spec/framework_spec/app/spec/core/env/keys_spec.rb +16 -9
  1019. data/spec/framework_spec/app/spec/core/env/length_spec.rb +6 -7
  1020. data/spec/framework_spec/app/spec/core/env/member_spec.rb +2 -2
  1021. data/spec/framework_spec/app/spec/core/env/rehash_spec.rb +1 -1
  1022. data/spec/framework_spec/app/spec/core/env/reject_spec.rb +88 -89
  1023. data/spec/framework_spec/app/spec/core/env/replace_spec.rb +15 -16
  1024. data/spec/framework_spec/app/spec/core/env/select_spec.rb +32 -23
  1025. data/spec/framework_spec/app/spec/core/env/shared/each.rb +10 -1
  1026. data/spec/framework_spec/app/spec/core/env/shared/key.rb +15 -0
  1027. data/spec/framework_spec/app/spec/core/env/shared/store.rb +18 -12
  1028. data/spec/framework_spec/app/spec/core/env/shared/value.rb +7 -0
  1029. data/spec/framework_spec/app/spec/core/env/shift_spec.rb +27 -28
  1030. data/spec/framework_spec/app/spec/core/env/size_spec.rb +6 -7
  1031. data/spec/framework_spec/app/spec/core/env/store_spec.rb +2 -2
  1032. data/spec/framework_spec/app/spec/core/env/to_a_spec.rb +21 -13
  1033. data/spec/framework_spec/app/spec/core/env/to_hash_spec.rb +12 -13
  1034. data/spec/framework_spec/app/spec/core/env/to_s_spec.rb +1 -1
  1035. data/spec/framework_spec/app/spec/core/env/update_spec.rb +1 -2
  1036. data/spec/framework_spec/app/spec/core/env/value_spec.rb +6 -7
  1037. data/spec/framework_spec/app/spec/core/env/values_at_spec.rb +7 -1
  1038. data/spec/framework_spec/app/spec/core/env/values_spec.rb +23 -16
  1039. data/spec/framework_spec/app/spec/core/exception/args_spec.rb +5 -0
  1040. data/spec/framework_spec/app/spec/core/exception/arguments_spec.rb +1 -1
  1041. data/spec/framework_spec/app/spec/core/exception/backtrace_spec.rb +51 -1
  1042. data/spec/framework_spec/app/spec/core/exception/case_compare_spec.rb +5 -1
  1043. data/spec/framework_spec/app/spec/core/exception/destination_encoding_name_spec.rb +13 -0
  1044. data/spec/framework_spec/app/spec/core/exception/destination_encoding_spec.rb +13 -0
  1045. data/spec/framework_spec/app/spec/core/exception/equal_value_spec.rb +84 -0
  1046. data/spec/framework_spec/app/spec/core/exception/errno_spec.rb +16 -1
  1047. data/spec/framework_spec/app/spec/core/exception/error_bytes_spec.rb +7 -0
  1048. data/spec/framework_spec/app/spec/core/exception/error_char_spec.rb +7 -0
  1049. data/spec/framework_spec/app/spec/core/exception/exception_spec.rb +69 -5
  1050. data/spec/framework_spec/app/spec/core/exception/exit_value_spec.rb +5 -1
  1051. data/spec/framework_spec/app/spec/core/exception/fixtures/common.rb +33 -1
  1052. data/spec/framework_spec/app/spec/core/exception/incomplete_input_spec.rb +7 -0
  1053. data/spec/framework_spec/app/spec/core/exception/initialize_spec.rb +1 -1
  1054. data/spec/framework_spec/app/spec/core/exception/inspect_spec.rb +2 -2
  1055. data/spec/framework_spec/app/spec/core/exception/io_error_spec.rb +1 -1
  1056. data/spec/framework_spec/app/spec/core/exception/message_spec.rb +14 -4
  1057. data/spec/framework_spec/app/spec/core/exception/name_error_spec.rb +2 -2
  1058. data/spec/framework_spec/app/spec/core/exception/name_spec.rb +5 -1
  1059. data/spec/framework_spec/app/spec/core/exception/new_spec.rb +3 -2
  1060. data/spec/framework_spec/app/spec/core/exception/no_method_error_spec.rb +5 -5
  1061. data/spec/framework_spec/app/spec/core/exception/range_error_spec.rb +1 -1
  1062. data/spec/framework_spec/app/spec/core/exception/readagain_bytes_spec.rb +7 -0
  1063. data/spec/framework_spec/app/spec/core/exception/reason_spec.rb +5 -0
  1064. data/spec/framework_spec/app/spec/core/exception/result_spec.rb +7 -0
  1065. data/spec/framework_spec/app/spec/core/exception/script_error_spec.rb +1 -1
  1066. data/spec/framework_spec/app/spec/core/exception/set_backtrace_spec.rb +10 -1
  1067. data/spec/framework_spec/app/spec/core/exception/shared/new.rb +5 -0
  1068. data/spec/framework_spec/app/spec/core/exception/shared/to_s.rb +3 -3
  1069. data/spec/framework_spec/app/spec/core/exception/signm_spec.rb +5 -0
  1070. data/spec/framework_spec/app/spec/core/exception/signo_spec.rb +5 -0
  1071. data/spec/framework_spec/app/spec/core/exception/source_encoding_name_spec.rb +13 -0
  1072. data/spec/framework_spec/app/spec/core/exception/source_encoding_spec.rb +13 -0
  1073. data/spec/framework_spec/app/spec/core/exception/standard_error_spec.rb +56 -55
  1074. data/spec/framework_spec/app/spec/core/exception/status_spec.rb +5 -0
  1075. data/spec/framework_spec/app/spec/core/exception/success_spec.rb +5 -0
  1076. data/spec/framework_spec/app/spec/core/exception/system_call_error_spec.rb +14 -5
  1077. data/spec/framework_spec/app/spec/core/exception/to_s_spec.rb +7 -3
  1078. data/spec/framework_spec/app/spec/core/exception/to_str_spec.rb +5 -5
  1079. data/spec/framework_spec/app/spec/core/false/and_spec.rb +1 -1
  1080. data/spec/framework_spec/app/spec/core/false/inspect_spec.rb +1 -1
  1081. data/spec/framework_spec/app/spec/core/false/or_spec.rb +1 -1
  1082. data/spec/framework_spec/app/spec/core/false/to_s_spec.rb +1 -1
  1083. data/spec/framework_spec/app/spec/core/false/xor_spec.rb +1 -1
  1084. data/spec/framework_spec/app/spec/core/fiber/new_spec.rb +48 -49
  1085. data/spec/framework_spec/app/spec/core/fiber/resume_spec.rb +39 -23
  1086. data/spec/framework_spec/app/spec/core/fiber/yield_spec.rb +34 -36
  1087. data/spec/framework_spec/app/spec/core/file/absolute_path_spec.rb +31 -0
  1088. data/spec/framework_spec/app/spec/core/file/atime_spec.rb +12 -5
  1089. data/spec/framework_spec/app/spec/core/file/basename_spec.rb +25 -26
  1090. data/spec/framework_spec/app/spec/core/file/blockdev_spec.rb +2 -2
  1091. data/spec/framework_spec/app/spec/core/file/chardev_spec.rb +2 -2
  1092. data/spec/framework_spec/app/spec/core/file/chmod_spec.rb +14 -10
  1093. data/spec/framework_spec/app/spec/core/file/chown_spec.rb +22 -4
  1094. data/spec/framework_spec/app/spec/core/file/constants/constants_spec.rb +7 -7
  1095. data/spec/framework_spec/app/spec/core/file/constants_spec.rb +1 -1
  1096. data/spec/framework_spec/app/spec/core/file/ctime_spec.rb +13 -6
  1097. data/spec/framework_spec/app/spec/core/file/delete_spec.rb +2 -2
  1098. data/spec/framework_spec/app/spec/core/file/directory_spec.rb +6 -2
  1099. data/spec/framework_spec/app/spec/core/file/dirname_spec.rb +12 -2
  1100. data/spec/framework_spec/app/spec/core/file/executable_real_spec.rb +2 -2
  1101. data/spec/framework_spec/app/spec/core/file/executable_spec.rb +2 -2
  1102. data/spec/framework_spec/app/spec/core/file/exist_spec.rb +2 -2
  1103. data/spec/framework_spec/app/spec/core/file/exists_spec.rb +2 -2
  1104. data/spec/framework_spec/app/spec/core/file/expand_path_spec.rb +133 -31
  1105. data/spec/framework_spec/app/spec/core/file/extname_spec.rb +7 -1
  1106. data/spec/framework_spec/app/spec/core/file/file_spec.rb +2 -2
  1107. data/spec/framework_spec/app/spec/core/file/fixtures/common.rb +22 -0
  1108. data/spec/framework_spec/app/spec/core/file/fixtures/file_types.rb +3 -9
  1109. data/spec/framework_spec/app/spec/core/file/flock_spec.rb +56 -18
  1110. data/spec/framework_spec/app/spec/core/file/fnmatch_spec.rb +2 -2
  1111. data/spec/framework_spec/app/spec/core/file/ftype_spec.rb +43 -45
  1112. data/spec/framework_spec/app/spec/core/file/grpowned_spec.rb +2 -2
  1113. data/spec/framework_spec/app/spec/core/file/identical_spec.rb +2 -2
  1114. data/spec/framework_spec/app/spec/core/file/initialize_spec.rb +25 -1
  1115. data/spec/framework_spec/app/spec/core/file/inspect_spec.rb +14 -7
  1116. data/spec/framework_spec/app/spec/core/file/join_spec.rb +37 -10
  1117. data/spec/framework_spec/app/spec/core/file/lchmod_spec.rb +13 -13
  1118. data/spec/framework_spec/app/spec/core/file/lchown_spec.rb +12 -6
  1119. data/spec/framework_spec/app/spec/core/file/link_spec.rb +7 -9
  1120. data/spec/framework_spec/app/spec/core/file/lstat_spec.rb +16 -11
  1121. data/spec/framework_spec/app/spec/core/file/mtime_spec.rb +7 -6
  1122. data/spec/framework_spec/app/spec/core/file/new_spec.rb +60 -44
  1123. data/spec/framework_spec/app/spec/core/file/open_spec.rb +104 -120
  1124. data/spec/framework_spec/app/spec/core/file/owned_spec.rb +26 -3
  1125. data/spec/framework_spec/app/spec/core/file/path_spec.rb +11 -10
  1126. data/spec/framework_spec/app/spec/core/file/pipe_spec.rb +25 -3
  1127. data/spec/framework_spec/app/spec/core/file/read_spec.rb +6 -0
  1128. data/spec/framework_spec/app/spec/core/file/readable_real_spec.rb +2 -2
  1129. data/spec/framework_spec/app/spec/core/file/readable_spec.rb +2 -2
  1130. data/spec/framework_spec/app/spec/core/file/readlink_spec.rb +17 -13
  1131. data/spec/framework_spec/app/spec/core/file/realdirpath_spec.rb +7 -0
  1132. data/spec/framework_spec/app/spec/core/file/realpath_spec.rb +7 -0
  1133. data/spec/framework_spec/app/spec/core/file/rename_spec.rb +24 -27
  1134. data/spec/framework_spec/app/spec/core/file/reopen_spec.rb +27 -0
  1135. data/spec/framework_spec/app/spec/core/file/setgid_spec.rb +21 -21
  1136. data/spec/framework_spec/app/spec/core/file/setuid_spec.rb +21 -21
  1137. data/spec/framework_spec/app/spec/core/file/shared/fnmatch.rb +11 -5
  1138. data/spec/framework_spec/app/spec/core/file/shared/open.rb +9 -0
  1139. data/spec/framework_spec/app/spec/core/file/shared/read.rb +21 -0
  1140. data/spec/framework_spec/app/spec/core/file/shared/stat.rb +31 -17
  1141. data/spec/framework_spec/app/spec/core/file/shared/unlink.rb +8 -4
  1142. data/spec/framework_spec/app/spec/core/file/size_spec.rb +111 -22
  1143. data/spec/framework_spec/app/spec/core/file/socket_spec.rb +24 -3
  1144. data/spec/framework_spec/app/spec/core/file/split_spec.rb +12 -7
  1145. data/spec/framework_spec/app/spec/core/file/stat/atime_spec.rb +6 -6
  1146. data/spec/framework_spec/app/spec/core/file/stat/blksize_spec.rb +6 -5
  1147. data/spec/framework_spec/app/spec/core/file/stat/blockdev_spec.rb +3 -3
  1148. data/spec/framework_spec/app/spec/core/file/stat/blocks_spec.rb +6 -5
  1149. data/spec/framework_spec/app/spec/core/file/stat/chardev_spec.rb +4 -4
  1150. data/spec/framework_spec/app/spec/core/file/stat/comparison_spec.rb +14 -9
  1151. data/spec/framework_spec/app/spec/core/file/stat/ctime_spec.rb +6 -6
  1152. data/spec/framework_spec/app/spec/core/file/stat/dev_major_spec.rb +12 -3
  1153. data/spec/framework_spec/app/spec/core/file/stat/dev_minor_spec.rb +13 -3
  1154. data/spec/framework_spec/app/spec/core/file/stat/dev_spec.rb +10 -2
  1155. data/spec/framework_spec/app/spec/core/file/stat/directory_spec.rb +3 -3
  1156. data/spec/framework_spec/app/spec/core/file/stat/executable_real_spec.rb +3 -3
  1157. data/spec/framework_spec/app/spec/core/file/stat/executable_spec.rb +3 -3
  1158. data/spec/framework_spec/app/spec/core/file/stat/file_spec.rb +3 -3
  1159. data/spec/framework_spec/app/spec/core/file/stat/ftype_spec.rb +14 -17
  1160. data/spec/framework_spec/app/spec/core/file/stat/gid_spec.rb +5 -5
  1161. data/spec/framework_spec/app/spec/core/file/stat/grpowned_spec.rb +3 -3
  1162. data/spec/framework_spec/app/spec/core/file/stat/ino_spec.rb +6 -5
  1163. data/spec/framework_spec/app/spec/core/file/stat/inspect_spec.rb +8 -10
  1164. data/spec/framework_spec/app/spec/core/file/stat/mode_spec.rb +6 -5
  1165. data/spec/framework_spec/app/spec/core/file/stat/mtime_spec.rb +6 -6
  1166. data/spec/framework_spec/app/spec/core/file/stat/new_spec.rb +11 -4
  1167. data/spec/framework_spec/app/spec/core/file/stat/nlink_spec.rb +5 -6
  1168. data/spec/framework_spec/app/spec/core/file/stat/owned_spec.rb +24 -4
  1169. data/spec/framework_spec/app/spec/core/file/stat/pipe_spec.rb +25 -4
  1170. data/spec/framework_spec/app/spec/core/file/stat/rdev_major_spec.rb +11 -3
  1171. data/spec/framework_spec/app/spec/core/file/stat/rdev_minor_spec.rb +13 -3
  1172. data/spec/framework_spec/app/spec/core/file/stat/rdev_spec.rb +10 -2
  1173. data/spec/framework_spec/app/spec/core/file/stat/readable_real_spec.rb +3 -3
  1174. data/spec/framework_spec/app/spec/core/file/stat/readable_spec.rb +3 -3
  1175. data/spec/framework_spec/app/spec/core/file/stat/setgid_spec.rb +3 -3
  1176. data/spec/framework_spec/app/spec/core/file/stat/setuid_spec.rb +3 -3
  1177. data/spec/framework_spec/app/spec/core/file/stat/size_spec.rb +18 -4
  1178. data/spec/framework_spec/app/spec/core/file/stat/socket_spec.rb +3 -3
  1179. data/spec/framework_spec/app/spec/core/file/stat/sticky_spec.rb +3 -3
  1180. data/spec/framework_spec/app/spec/core/file/stat/symlink_spec.rb +3 -3
  1181. data/spec/framework_spec/app/spec/core/file/stat/uid_spec.rb +5 -5
  1182. data/spec/framework_spec/app/spec/core/file/stat/world_readable_spec.rb +15 -0
  1183. data/spec/framework_spec/app/spec/core/file/stat/world_writable_spec.rb +17 -0
  1184. data/spec/framework_spec/app/spec/core/file/stat/writable_real_spec.rb +3 -3
  1185. data/spec/framework_spec/app/spec/core/file/stat/writable_spec.rb +3 -3
  1186. data/spec/framework_spec/app/spec/core/file/stat/zero_spec.rb +3 -3
  1187. data/spec/framework_spec/app/spec/core/file/stat_spec.rb +23 -6
  1188. data/spec/framework_spec/app/spec/core/file/sticky_spec.rb +49 -3
  1189. data/spec/framework_spec/app/spec/core/file/symlink_spec.rb +18 -11
  1190. data/spec/framework_spec/app/spec/core/file/to_path_spec.rb +48 -0
  1191. data/spec/framework_spec/app/spec/core/file/truncate_spec.rb +34 -39
  1192. data/spec/framework_spec/app/spec/core/file/umask_spec.rb +20 -21
  1193. data/spec/framework_spec/app/spec/core/file/unlink_spec.rb +2 -2
  1194. data/spec/framework_spec/app/spec/core/file/utime_spec.rb +20 -5
  1195. data/spec/framework_spec/app/spec/core/file/world_readable_spec.rb +14 -0
  1196. data/spec/framework_spec/app/spec/core/file/world_writable_spec.rb +16 -0
  1197. data/spec/framework_spec/app/spec/core/file/writable_real_spec.rb +2 -2
  1198. data/spec/framework_spec/app/spec/core/file/writable_spec.rb +2 -2
  1199. data/spec/framework_spec/app/spec/core/file/zero_spec.rb +2 -2
  1200. data/spec/framework_spec/app/spec/core/filetest/blockdev_spec.rb +2 -2
  1201. data/spec/framework_spec/app/spec/core/filetest/chardev_spec.rb +3 -3
  1202. data/spec/framework_spec/app/spec/core/filetest/directory_spec.rb +6 -2
  1203. data/spec/framework_spec/app/spec/core/filetest/executable_real_spec.rb +2 -2
  1204. data/spec/framework_spec/app/spec/core/filetest/executable_spec.rb +2 -2
  1205. data/spec/framework_spec/app/spec/core/filetest/exist_spec.rb +2 -2
  1206. data/spec/framework_spec/app/spec/core/filetest/exists_spec.rb +2 -2
  1207. data/spec/framework_spec/app/spec/core/filetest/file_spec.rb +6 -2
  1208. data/spec/framework_spec/app/spec/core/filetest/grpowned_spec.rb +6 -2
  1209. data/spec/framework_spec/app/spec/core/filetest/identical_spec.rb +2 -2
  1210. data/spec/framework_spec/app/spec/core/filetest/owned_spec.rb +6 -2
  1211. data/spec/framework_spec/app/spec/core/filetest/pipe_spec.rb +6 -2
  1212. data/spec/framework_spec/app/spec/core/filetest/readable_real_spec.rb +2 -2
  1213. data/spec/framework_spec/app/spec/core/filetest/readable_spec.rb +2 -2
  1214. data/spec/framework_spec/app/spec/core/filetest/setgid_spec.rb +6 -2
  1215. data/spec/framework_spec/app/spec/core/filetest/setuid_spec.rb +6 -2
  1216. data/spec/framework_spec/app/spec/core/filetest/size_spec.rb +31 -4
  1217. data/spec/framework_spec/app/spec/core/filetest/socket_spec.rb +6 -2
  1218. data/spec/framework_spec/app/spec/core/filetest/sticky_spec.rb +3 -2
  1219. data/spec/framework_spec/app/spec/core/filetest/symlink_spec.rb +5 -2
  1220. data/spec/framework_spec/app/spec/core/filetest/world_readable_spec.rb +7 -0
  1221. data/spec/framework_spec/app/spec/core/filetest/world_writable_spec.rb +7 -0
  1222. data/spec/framework_spec/app/spec/core/filetest/writable_real_spec.rb +2 -2
  1223. data/spec/framework_spec/app/spec/core/filetest/writable_spec.rb +2 -2
  1224. data/spec/framework_spec/app/spec/core/filetest/zero_spec.rb +2 -2
  1225. data/spec/framework_spec/app/spec/core/fixnum/abs_spec.rb +4 -8
  1226. data/spec/framework_spec/app/spec/core/fixnum/bit_and_spec.rb +6 -6
  1227. data/spec/framework_spec/app/spec/core/fixnum/bit_or_spec.rb +6 -6
  1228. data/spec/framework_spec/app/spec/core/fixnum/bit_xor_spec.rb +9 -9
  1229. data/spec/framework_spec/app/spec/core/fixnum/case_compare_spec.rb +7 -0
  1230. data/spec/framework_spec/app/spec/core/fixnum/coerce_spec.rb +2 -2
  1231. data/spec/framework_spec/app/spec/core/fixnum/comparison_spec.rb +3 -3
  1232. data/spec/framework_spec/app/spec/core/fixnum/complement_spec.rb +1 -1
  1233. data/spec/framework_spec/app/spec/core/fixnum/div_spec.rb +17 -7
  1234. data/spec/framework_spec/app/spec/core/fixnum/divide_spec.rb +7 -3
  1235. data/spec/framework_spec/app/spec/core/fixnum/divmod_spec.rb +16 -6
  1236. data/spec/framework_spec/app/spec/core/fixnum/element_reference_spec.rb +45 -19
  1237. data/spec/framework_spec/app/spec/core/fixnum/equal_value_spec.rb +5 -5
  1238. data/spec/framework_spec/app/spec/core/fixnum/even_spec.rb +7 -0
  1239. data/spec/framework_spec/app/spec/core/fixnum/exponent_spec.rb +59 -7
  1240. data/spec/framework_spec/app/spec/core/fixnum/fdiv_spec.rb +7 -0
  1241. data/spec/framework_spec/app/spec/core/fixnum/gt_spec.rb +4 -4
  1242. data/spec/framework_spec/app/spec/core/fixnum/gte_spec.rb +3 -3
  1243. data/spec/framework_spec/app/spec/core/fixnum/hash_spec.rb +1 -1
  1244. data/spec/framework_spec/app/spec/core/fixnum/id2name_spec.rb +15 -13
  1245. data/spec/framework_spec/app/spec/core/fixnum/induced_from_spec.rb +36 -35
  1246. data/spec/framework_spec/app/spec/core/fixnum/left_shift_spec.rb +72 -42
  1247. data/spec/framework_spec/app/spec/core/fixnum/lt_spec.rb +4 -4
  1248. data/spec/framework_spec/app/spec/core/fixnum/lte_spec.rb +3 -3
  1249. data/spec/framework_spec/app/spec/core/fixnum/magnitude_spec.rb +8 -0
  1250. data/spec/framework_spec/app/spec/core/fixnum/minus_spec.rb +3 -3
  1251. data/spec/framework_spec/app/spec/core/fixnum/modulo_spec.rb +2 -2
  1252. data/spec/framework_spec/app/spec/core/fixnum/multiply_spec.rb +3 -3
  1253. data/spec/framework_spec/app/spec/core/fixnum/odd_spec.rb +7 -0
  1254. data/spec/framework_spec/app/spec/core/fixnum/plus_spec.rb +1 -1
  1255. data/spec/framework_spec/app/spec/core/fixnum/quo_spec.rb +16 -6
  1256. data/spec/framework_spec/app/spec/core/fixnum/right_shift_spec.rb +84 -40
  1257. data/spec/framework_spec/app/spec/core/fixnum/shared/abs.rb +9 -0
  1258. data/spec/framework_spec/app/spec/core/fixnum/shared/modulo.rb +17 -7
  1259. data/spec/framework_spec/app/spec/core/fixnum/size_spec.rb +1 -1
  1260. data/spec/framework_spec/app/spec/core/fixnum/succ_spec.rb +7 -0
  1261. data/spec/framework_spec/app/spec/core/fixnum/to_f_spec.rb +1 -1
  1262. data/spec/framework_spec/app/spec/core/fixnum/to_s_spec.rb +2 -2
  1263. data/spec/framework_spec/app/spec/core/fixnum/to_sym_spec.rb +16 -14
  1264. data/spec/framework_spec/app/spec/core/fixnum/uminus_spec.rb +1 -1
  1265. data/spec/framework_spec/app/spec/core/fixnum/zero_spec.rb +2 -2
  1266. data/spec/framework_spec/app/spec/core/float/abs_spec.rb +2 -6
  1267. data/spec/framework_spec/app/spec/core/float/angle_spec.rb +7 -0
  1268. data/spec/framework_spec/app/spec/core/float/arg_spec.rb +7 -0
  1269. data/spec/framework_spec/app/spec/core/float/case_compare_spec.rb +7 -0
  1270. data/spec/framework_spec/app/spec/core/float/ceil_spec.rb +1 -1
  1271. data/spec/framework_spec/app/spec/core/float/coerce_spec.rb +1 -1
  1272. data/spec/framework_spec/app/spec/core/float/comparison_spec.rb +52 -1
  1273. data/spec/framework_spec/app/spec/core/float/constants_spec.rb +25 -17
  1274. data/spec/framework_spec/app/spec/core/float/denominator_spec.rb +31 -0
  1275. data/spec/framework_spec/app/spec/core/float/divide_spec.rb +7 -3
  1276. data/spec/framework_spec/app/spec/core/float/divmod_spec.rb +26 -1
  1277. data/spec/framework_spec/app/spec/core/float/eql_spec.rb +1 -1
  1278. data/spec/framework_spec/app/spec/core/float/equal_value_spec.rb +1 -1
  1279. data/spec/framework_spec/app/spec/core/float/exponent_spec.rb +10 -2
  1280. data/spec/framework_spec/app/spec/core/float/fdiv_spec.rb +68 -0
  1281. data/spec/framework_spec/app/spec/core/float/finite_spec.rb +3 -1
  1282. data/spec/framework_spec/app/spec/core/float/fixtures/coerce.rb +15 -0
  1283. data/spec/framework_spec/app/spec/core/float/floor_spec.rb +1 -1
  1284. data/spec/framework_spec/app/spec/core/float/gt_spec.rb +1 -1
  1285. data/spec/framework_spec/app/spec/core/float/gte_spec.rb +1 -1
  1286. data/spec/framework_spec/app/spec/core/float/hash_spec.rb +1 -1
  1287. data/spec/framework_spec/app/spec/core/float/induced_from_spec.rb +38 -37
  1288. data/spec/framework_spec/app/spec/core/float/infinite_spec.rb +1 -1
  1289. data/spec/framework_spec/app/spec/core/float/lt_spec.rb +1 -1
  1290. data/spec/framework_spec/app/spec/core/float/lte_spec.rb +1 -1
  1291. data/spec/framework_spec/app/spec/core/float/magnitude_spec.rb +7 -0
  1292. data/spec/framework_spec/app/spec/core/float/minus_spec.rb +1 -1
  1293. data/spec/framework_spec/app/spec/core/float/modulo_spec.rb +2 -2
  1294. data/spec/framework_spec/app/spec/core/float/multiply_spec.rb +4 -4
  1295. data/spec/framework_spec/app/spec/core/float/nan_spec.rb +1 -1
  1296. data/spec/framework_spec/app/spec/core/float/numerator_spec.rb +47 -0
  1297. data/spec/framework_spec/app/spec/core/float/phase_spec.rb +7 -0
  1298. data/spec/framework_spec/app/spec/core/float/plus_spec.rb +1 -1
  1299. data/spec/framework_spec/app/spec/core/float/quo_spec.rb +7 -0
  1300. data/spec/framework_spec/app/spec/core/float/rationalize_spec.rb +40 -0
  1301. data/spec/framework_spec/app/spec/core/float/round_spec.rb +32 -6
  1302. data/spec/framework_spec/app/spec/core/float/shared/abs.rb +9 -0
  1303. data/spec/framework_spec/app/spec/core/float/shared/modulo.rb +14 -3
  1304. data/spec/framework_spec/app/spec/core/float/to_f_spec.rb +1 -1
  1305. data/spec/framework_spec/app/spec/core/float/to_i_spec.rb +2 -2
  1306. data/spec/framework_spec/app/spec/core/float/to_int_spec.rb +6 -2
  1307. data/spec/framework_spec/app/spec/core/float/to_r_spec.rb +7 -0
  1308. data/spec/framework_spec/app/spec/core/float/to_s_spec.rb +93 -18
  1309. data/spec/framework_spec/app/spec/core/float/truncate_spec.rb +2 -2
  1310. data/spec/framework_spec/app/spec/core/float/uminus_spec.rb +1 -1
  1311. data/spec/framework_spec/app/spec/core/float/uplus_spec.rb +4 -4
  1312. data/spec/framework_spec/app/spec/core/float/zero_spec.rb +1 -1
  1313. data/spec/framework_spec/app/spec/core/gc/count_spec.rb +7 -0
  1314. data/spec/framework_spec/app/spec/core/gc/disable_spec.rb +17 -1
  1315. data/spec/framework_spec/app/spec/core/gc/enable_spec.rb +12 -1
  1316. data/spec/framework_spec/app/spec/core/gc/garbage_collect_spec.rb +15 -1
  1317. data/spec/framework_spec/app/spec/core/gc/profiler/clear_spec.rb +7 -0
  1318. data/spec/framework_spec/app/spec/core/gc/profiler/disable_spec.rb +7 -0
  1319. data/spec/framework_spec/app/spec/core/gc/profiler/enable_spec.rb +7 -0
  1320. data/spec/framework_spec/app/spec/core/gc/profiler/enabled_spec.rb +7 -0
  1321. data/spec/framework_spec/app/spec/core/gc/profiler/report_spec.rb +7 -0
  1322. data/spec/framework_spec/app/spec/core/gc/profiler/result_spec.rb +7 -0
  1323. data/spec/framework_spec/app/spec/core/gc/profiler/total_time_spec.rb +7 -0
  1324. data/spec/framework_spec/app/spec/core/gc/start_spec.rb +8 -1
  1325. data/spec/framework_spec/app/spec/core/gc/stress_spec.rb +30 -0
  1326. data/spec/framework_spec/app/spec/core/hash/allocate_spec.rb +2 -2
  1327. data/spec/framework_spec/app/spec/core/hash/assoc_spec.rb +43 -0
  1328. data/spec/framework_spec/app/spec/core/hash/clear_spec.rb +2 -2
  1329. data/spec/framework_spec/app/spec/core/hash/clone_spec.rb +1 -1
  1330. data/spec/framework_spec/app/spec/core/hash/compare_by_identity_spec.rb +109 -0
  1331. data/spec/framework_spec/app/spec/core/hash/constructor_spec.rb +8 -4
  1332. data/spec/framework_spec/app/spec/core/hash/default_proc_spec.rb +24 -4
  1333. data/spec/framework_spec/app/spec/core/hash/default_spec.rb +4 -4
  1334. data/spec/framework_spec/app/spec/core/hash/delete_if_spec.rb +3 -3
  1335. data/spec/framework_spec/app/spec/core/hash/delete_spec.rb +2 -2
  1336. data/spec/framework_spec/app/spec/core/hash/each_key_spec.rb +3 -3
  1337. data/spec/framework_spec/app/spec/core/hash/each_pair_spec.rb +5 -5
  1338. data/spec/framework_spec/app/spec/core/hash/each_spec.rb +4 -4
  1339. data/spec/framework_spec/app/spec/core/hash/each_value_spec.rb +3 -3
  1340. data/spec/framework_spec/app/spec/core/hash/element_reference_spec.rb +111 -115
  1341. data/spec/framework_spec/app/spec/core/hash/element_set_spec.rb +7 -8
  1342. data/spec/framework_spec/app/spec/core/hash/empty_spec.rb +2 -2
  1343. data/spec/framework_spec/app/spec/core/hash/eql_spec.rb +18 -19
  1344. data/spec/framework_spec/app/spec/core/hash/equal_value_spec.rb +18 -14
  1345. data/spec/framework_spec/app/spec/core/hash/fetch_spec.rb +2 -2
  1346. data/spec/framework_spec/app/spec/core/hash/fixtures/classes.rb +1 -1
  1347. data/spec/framework_spec/app/spec/core/hash/flatten_spec.rb +64 -0
  1348. data/spec/framework_spec/app/spec/core/hash/has_key_spec.rb +8 -9
  1349. data/spec/framework_spec/app/spec/core/hash/has_value_spec.rb +3 -3
  1350. data/spec/framework_spec/app/spec/core/hash/hash_spec.rb +20 -1
  1351. data/spec/framework_spec/app/spec/core/hash/include_spec.rb +7 -8
  1352. data/spec/framework_spec/app/spec/core/hash/index_spec.rb +3 -3
  1353. data/spec/framework_spec/app/spec/core/hash/indexes_spec.rb +3 -3
  1354. data/spec/framework_spec/app/spec/core/hash/indices_spec.rb +3 -3
  1355. data/spec/framework_spec/app/spec/core/hash/initialize_copy_spec.rb +3 -3
  1356. data/spec/framework_spec/app/spec/core/hash/initialize_spec.rb +8 -3
  1357. data/spec/framework_spec/app/spec/core/hash/inspect_spec.rb +3 -41
  1358. data/spec/framework_spec/app/spec/core/hash/invert_spec.rb +2 -2
  1359. data/spec/framework_spec/app/spec/core/hash/keep_if_spec.rb +31 -0
  1360. data/spec/framework_spec/app/spec/core/hash/key_spec.rb +14 -15
  1361. data/spec/framework_spec/app/spec/core/hash/keys_spec.rb +4 -4
  1362. data/spec/framework_spec/app/spec/core/hash/length_spec.rb +3 -3
  1363. data/spec/framework_spec/app/spec/core/hash/member_spec.rb +7 -8
  1364. data/spec/framework_spec/app/spec/core/hash/merge_spec.rb +10 -17
  1365. data/spec/framework_spec/app/spec/core/hash/new_spec.rb +2 -2
  1366. data/spec/framework_spec/app/spec/core/hash/rassoc_spec.rb +39 -0
  1367. data/spec/framework_spec/app/spec/core/hash/rehash_spec.rb +51 -60
  1368. data/spec/framework_spec/app/spec/core/hash/reject_spec.rb +18 -12
  1369. data/spec/framework_spec/app/spec/core/hash/replace_spec.rb +3 -3
  1370. data/spec/framework_spec/app/spec/core/hash/select_spec.rb +38 -5
  1371. data/spec/framework_spec/app/spec/core/hash/shared/each.rb +46 -6
  1372. data/spec/framework_spec/app/spec/core/hash/shared/eql.rb +14 -1
  1373. data/spec/framework_spec/app/spec/core/hash/shared/index.rb +2 -2
  1374. data/spec/framework_spec/app/spec/core/hash/shared/iteration.rb +2 -2
  1375. data/spec/framework_spec/app/spec/core/hash/shared/key.rb +5 -3
  1376. data/spec/framework_spec/app/spec/core/hash/shared/replace.rb +22 -11
  1377. data/spec/framework_spec/app/spec/core/hash/shared/store.rb +14 -1
  1378. data/spec/framework_spec/app/spec/core/hash/shared/to_s.rb +22 -21
  1379. data/spec/framework_spec/app/spec/core/hash/shared/update.rb +27 -8
  1380. data/spec/framework_spec/app/spec/core/hash/shift_spec.rb +3 -3
  1381. data/spec/framework_spec/app/spec/core/hash/size_spec.rb +3 -3
  1382. data/spec/framework_spec/app/spec/core/hash/sort_spec.rb +2 -2
  1383. data/spec/framework_spec/app/spec/core/hash/store_spec.rb +7 -8
  1384. data/spec/framework_spec/app/spec/core/hash/to_a_spec.rb +16 -3
  1385. data/spec/framework_spec/app/spec/core/hash/to_hash_spec.rb +2 -2
  1386. data/spec/framework_spec/app/spec/core/hash/to_s_spec.rb +5 -5
  1387. data/spec/framework_spec/app/spec/core/hash/try_convert_spec.rb +32 -0
  1388. data/spec/framework_spec/app/spec/core/hash/update_spec.rb +3 -3
  1389. data/spec/framework_spec/app/spec/core/hash/value_spec.rb +3 -3
  1390. data/spec/framework_spec/app/spec/core/hash/values_at_spec.rb +4 -4
  1391. data/spec/framework_spec/app/spec/core/hash/values_spec.rb +3 -3
  1392. data/spec/framework_spec/app/spec/core/integer/ceil_spec.rb +2 -2
  1393. data/spec/framework_spec/app/spec/core/integer/chr_spec.rb +141 -18
  1394. data/spec/framework_spec/app/spec/core/integer/denominator_spec.rb +22 -0
  1395. data/spec/framework_spec/app/spec/core/integer/downto_spec.rb +5 -5
  1396. data/spec/framework_spec/app/spec/core/integer/even_spec.rb +2 -2
  1397. data/spec/framework_spec/app/spec/core/integer/floor_spec.rb +2 -2
  1398. data/spec/framework_spec/app/spec/core/integer/gcd_spec.rb +60 -0
  1399. data/spec/framework_spec/app/spec/core/integer/gcdlcm_spec.rb +55 -0
  1400. data/spec/framework_spec/app/spec/core/integer/induced_from_spec.rb +43 -42
  1401. data/spec/framework_spec/app/spec/core/integer/integer_spec.rb +2 -2
  1402. data/spec/framework_spec/app/spec/core/integer/lcm_spec.rb +60 -0
  1403. data/spec/framework_spec/app/spec/core/integer/next_spec.rb +2 -2
  1404. data/spec/framework_spec/app/spec/core/integer/numerator_spec.rb +20 -0
  1405. data/spec/framework_spec/app/spec/core/integer/odd_spec.rb +1 -1
  1406. data/spec/framework_spec/app/spec/core/integer/ord_spec.rb +4 -4
  1407. data/spec/framework_spec/app/spec/core/integer/pred_spec.rb +3 -3
  1408. data/spec/framework_spec/app/spec/core/integer/rationalize_spec.rb +7 -0
  1409. data/spec/framework_spec/app/spec/core/integer/round_spec.rb +35 -2
  1410. data/spec/framework_spec/app/spec/core/integer/shared/next.rb +1 -1
  1411. data/spec/framework_spec/app/spec/core/integer/succ_spec.rb +2 -2
  1412. data/spec/framework_spec/app/spec/core/integer/times_spec.rb +9 -9
  1413. data/spec/framework_spec/app/spec/core/integer/to_i_spec.rb +2 -2
  1414. data/spec/framework_spec/app/spec/core/integer/to_int_spec.rb +2 -2
  1415. data/spec/framework_spec/app/spec/core/integer/to_r_spec.rb +28 -0
  1416. data/spec/framework_spec/app/spec/core/integer/truncate_spec.rb +2 -2
  1417. data/spec/framework_spec/app/spec/core/integer/upto_spec.rb +8 -8
  1418. data/spec/framework_spec/app/spec/core/io/binmode_spec.rb +21 -5
  1419. data/spec/framework_spec/app/spec/core/io/binread_spec.rb +7 -0
  1420. data/spec/framework_spec/app/spec/core/io/bytes_spec.rb +27 -16
  1421. data/spec/framework_spec/app/spec/core/io/chars_spec.rb +35 -19
  1422. data/spec/framework_spec/app/spec/core/io/close_on_exec_spec.rb +13 -0
  1423. data/spec/framework_spec/app/spec/core/io/close_read_spec.rb +29 -29
  1424. data/spec/framework_spec/app/spec/core/io/close_spec.rb +15 -19
  1425. data/spec/framework_spec/app/spec/core/io/close_write_spec.rb +13 -14
  1426. data/spec/framework_spec/app/spec/core/io/closed_spec.rb +15 -7
  1427. data/spec/framework_spec/app/spec/core/io/codepoints_spec.rb +29 -0
  1428. data/spec/framework_spec/app/spec/core/io/constants_spec.rb +1 -1
  1429. data/spec/framework_spec/app/spec/core/io/copy_stream_spec.rb +50 -0
  1430. data/spec/framework_spec/app/spec/core/io/dup_spec.rb +5 -5
  1431. data/spec/framework_spec/app/spec/core/io/each_byte_spec.rb +32 -26
  1432. data/spec/framework_spec/app/spec/core/io/each_char_spec.rb +35 -22
  1433. data/spec/framework_spec/app/spec/core/io/each_codepoint_spec.rb +34 -0
  1434. data/spec/framework_spec/app/spec/core/io/each_line_spec.rb +7 -5
  1435. data/spec/framework_spec/app/spec/core/io/each_spec.rb +8 -6
  1436. data/spec/framework_spec/app/spec/core/io/eof_spec.rb +59 -45
  1437. data/spec/framework_spec/app/spec/core/io/external_encoding_spec.rb +7 -0
  1438. data/spec/framework_spec/app/spec/core/io/fcntl_spec.rb +5 -5
  1439. data/spec/framework_spec/app/spec/core/io/fdatasync_spec.rb +7 -0
  1440. data/spec/framework_spec/app/spec/core/io/fileno_spec.rb +5 -5
  1441. data/spec/framework_spec/app/spec/core/io/fixtures/classes.rb +57 -15
  1442. data/spec/framework_spec/app/spec/core/io/fixtures/empty.txt +0 -0
  1443. data/spec/framework_spec/app/spec/core/io/fixtures/{gets.txt → lines.txt} +0 -0
  1444. data/spec/framework_spec/app/spec/core/io/fixtures/reopen_stdout.rb +3 -0
  1445. data/spec/framework_spec/app/spec/core/io/flush_spec.rb +5 -5
  1446. data/spec/framework_spec/app/spec/core/io/for_fd_spec.rb +6 -2
  1447. data/spec/framework_spec/app/spec/core/io/foreach_spec.rb +132 -90
  1448. data/spec/framework_spec/app/spec/core/io/fsync_spec.rb +15 -15
  1449. data/spec/framework_spec/app/spec/core/io/getbyte_spec.rb +27 -21
  1450. data/spec/framework_spec/app/spec/core/io/getc_spec.rb +30 -24
  1451. data/spec/framework_spec/app/spec/core/io/gets_spec.rb +144 -127
  1452. data/spec/framework_spec/app/spec/core/io/initialize_copy_spec.rb +1 -1
  1453. data/spec/framework_spec/app/spec/core/io/initialize_spec.rb +33 -16
  1454. data/spec/framework_spec/app/spec/core/io/inspect_spec.rb +4 -15
  1455. data/spec/framework_spec/app/spec/core/io/internal_encoding_spec.rb +7 -0
  1456. data/spec/framework_spec/app/spec/core/io/io_spec.rb +1 -5
  1457. data/spec/framework_spec/app/spec/core/io/ioctl_spec.rb +42 -5
  1458. data/spec/framework_spec/app/spec/core/io/isatty_spec.rb +2 -2
  1459. data/spec/framework_spec/app/spec/core/io/lineno_spec.rb +65 -52
  1460. data/spec/framework_spec/app/spec/core/io/lines_spec.rb +28 -22
  1461. data/spec/framework_spec/app/spec/core/io/new_spec.rb +6 -2
  1462. data/spec/framework_spec/app/spec/core/io/open_spec.rb +52 -49
  1463. data/spec/framework_spec/app/spec/core/io/output_spec.rb +22 -14
  1464. data/spec/framework_spec/app/spec/core/io/pid_spec.rb +20 -11
  1465. data/spec/framework_spec/app/spec/core/io/pipe_spec.rb +10 -1
  1466. data/spec/framework_spec/app/spec/core/io/popen_spec.rb +107 -37
  1467. data/spec/framework_spec/app/spec/core/io/pos_spec.rb +5 -44
  1468. data/spec/framework_spec/app/spec/core/io/print_spec.rb +56 -59
  1469. data/spec/framework_spec/app/spec/core/io/printf_spec.rb +25 -19
  1470. data/spec/framework_spec/app/spec/core/io/putc_spec.rb +5 -43
  1471. data/spec/framework_spec/app/spec/core/io/puts_spec.rb +28 -16
  1472. data/spec/framework_spec/app/spec/core/io/read_nonblock_spec.rb +54 -3
  1473. data/spec/framework_spec/app/spec/core/io/read_spec.rb +127 -50
  1474. data/spec/framework_spec/app/spec/core/io/readbyte_spec.rb +29 -0
  1475. data/spec/framework_spec/app/spec/core/io/readchar_spec.rb +31 -31
  1476. data/spec/framework_spec/app/spec/core/io/readline_spec.rb +29 -25
  1477. data/spec/framework_spec/app/spec/core/io/readlines_spec.rb +174 -146
  1478. data/spec/framework_spec/app/spec/core/io/readpartial_spec.rb +16 -4
  1479. data/spec/framework_spec/app/spec/core/io/reopen_spec.rb +226 -82
  1480. data/spec/framework_spec/app/spec/core/io/rewind_spec.rb +8 -9
  1481. data/spec/framework_spec/app/spec/core/io/seek_spec.rb +21 -29
  1482. data/spec/framework_spec/app/spec/core/io/select_spec.rb +34 -7
  1483. data/spec/framework_spec/app/spec/core/io/set_encoding_spec.rb +7 -0
  1484. data/spec/framework_spec/app/spec/core/io/shared/codepoints.rb +46 -0
  1485. data/spec/framework_spec/app/spec/core/io/shared/each.rb +97 -112
  1486. data/spec/framework_spec/app/spec/core/io/shared/gets_ascii.rb +27 -0
  1487. data/spec/framework_spec/app/spec/core/io/shared/new.rb +74 -99
  1488. data/spec/framework_spec/app/spec/core/io/shared/pos.rb +43 -4
  1489. data/spec/framework_spec/app/spec/core/io/shared/tty.rb +10 -7
  1490. data/spec/framework_spec/app/spec/core/io/shared/write.rb +4 -4
  1491. data/spec/framework_spec/app/spec/core/io/stat_spec.rb +20 -7
  1492. data/spec/framework_spec/app/spec/core/io/sync_spec.rb +12 -10
  1493. data/spec/framework_spec/app/spec/core/io/sysopen_spec.rb +32 -14
  1494. data/spec/framework_spec/app/spec/core/io/sysread_spec.rb +12 -10
  1495. data/spec/framework_spec/app/spec/core/io/sysseek_spec.rb +17 -42
  1496. data/spec/framework_spec/app/spec/core/io/syswrite_spec.rb +10 -9
  1497. data/spec/framework_spec/app/spec/core/io/tell_spec.rb +3 -3
  1498. data/spec/framework_spec/app/spec/core/io/to_i_spec.rb +5 -5
  1499. data/spec/framework_spec/app/spec/core/io/to_io_spec.rb +15 -10
  1500. data/spec/framework_spec/app/spec/core/io/try_convert_spec.rb +47 -0
  1501. data/spec/framework_spec/app/spec/core/io/tty_spec.rb +2 -2
  1502. data/spec/framework_spec/app/spec/core/io/ungetbyte_spec.rb +7 -0
  1503. data/spec/framework_spec/app/spec/core/io/ungetc_spec.rb +55 -48
  1504. data/spec/framework_spec/app/spec/core/io/write_nonblock_spec.rb +6 -5
  1505. data/spec/framework_spec/app/spec/core/io/write_spec.rb +17 -12
  1506. data/spec/framework_spec/app/spec/core/kernel/Array_spec.rb +76 -31
  1507. data/spec/framework_spec/app/spec/core/kernel/Complex_spec.rb +7 -0
  1508. data/spec/framework_spec/app/spec/core/kernel/Float_spec.rb +18 -13
  1509. data/spec/framework_spec/app/spec/core/kernel/Integer_spec.rb +243 -7
  1510. data/spec/framework_spec/app/spec/core/kernel/Rational_spec.rb +7 -0
  1511. data/spec/framework_spec/app/spec/core/kernel/String_spec.rb +65 -33
  1512. data/spec/framework_spec/app/spec/core/kernel/__callee___spec.rb +9 -0
  1513. data/spec/framework_spec/app/spec/core/kernel/__id___spec.rb +4 -4
  1514. data/spec/framework_spec/app/spec/core/kernel/__method___spec.rb +41 -0
  1515. data/spec/framework_spec/app/spec/core/kernel/__send___spec.rb +2 -2
  1516. data/spec/framework_spec/app/spec/core/kernel/abort_spec.rb +6 -3
  1517. data/spec/framework_spec/app/spec/core/kernel/at_exit_spec.rb +16 -11
  1518. data/spec/framework_spec/app/spec/core/kernel/autoload_spec.rb +127 -114
  1519. data/spec/framework_spec/app/spec/core/kernel/backtick_spec.rb +24 -24
  1520. data/spec/framework_spec/app/spec/core/kernel/binding_spec.rb +45 -23
  1521. data/spec/framework_spec/app/spec/core/kernel/block_given_spec.rb +3 -3
  1522. data/spec/framework_spec/app/spec/core/kernel/callcc_spec.rb +9 -65
  1523. data/spec/framework_spec/app/spec/core/kernel/caller_spec.rb +162 -91
  1524. data/spec/framework_spec/app/spec/core/kernel/case_compare_spec.rb +2 -2
  1525. data/spec/framework_spec/app/spec/core/kernel/catch_spec.rb +70 -13
  1526. data/spec/framework_spec/app/spec/core/kernel/chomp_spec.rb +19 -15
  1527. data/spec/framework_spec/app/spec/core/kernel/chop_spec.rb +19 -15
  1528. data/spec/framework_spec/app/spec/core/kernel/class_spec.rb +2 -2
  1529. data/spec/framework_spec/app/spec/core/kernel/clone_spec.rb +8 -2
  1530. data/spec/framework_spec/app/spec/core/kernel/comparison_spec.rb +33 -0
  1531. data/spec/framework_spec/app/spec/core/kernel/const_lookup_spec.rb +7 -0
  1532. data/spec/framework_spec/app/spec/core/kernel/{define_singleton_method.rb → define_singleton_method_spec.rb} +31 -9
  1533. data/spec/framework_spec/app/spec/core/kernel/display_spec.rb +2 -2
  1534. data/spec/framework_spec/app/spec/core/kernel/dup_spec.rb +2 -2
  1535. data/spec/framework_spec/app/spec/core/kernel/enum_for_spec.rb +7 -0
  1536. data/spec/framework_spec/app/spec/core/kernel/eql_spec.rb +5 -5
  1537. data/spec/framework_spec/app/spec/core/kernel/equal_spec.rb +32 -3
  1538. data/spec/framework_spec/app/spec/core/kernel/equal_value_spec.rb +4 -4
  1539. data/spec/framework_spec/app/spec/core/kernel/eval_spec.rb +285 -182
  1540. data/spec/framework_spec/app/spec/core/kernel/exec_spec.rb +18 -5
  1541. data/spec/framework_spec/app/spec/core/kernel/exit_spec.rb +70 -4
  1542. data/spec/framework_spec/app/spec/core/kernel/extend_spec.rb +29 -7
  1543. data/spec/framework_spec/app/spec/core/kernel/fail_spec.rb +4 -4
  1544. data/spec/framework_spec/app/spec/core/kernel/fixtures/__method__.rb +25 -0
  1545. data/spec/framework_spec/app/spec/core/kernel/fixtures/autoload_d.rb +5 -0
  1546. data/spec/framework_spec/app/spec/core/kernel/fixtures/caller_fixture1.rb +1 -1
  1547. data/spec/framework_spec/app/spec/core/kernel/fixtures/classes.rb +173 -67
  1548. data/spec/framework_spec/app/spec/core/kernel/fixtures/eval_locals.rb +6 -0
  1549. data/spec/framework_spec/app/spec/core/kernel/fixtures/test.rb +80 -80
  1550. data/spec/framework_spec/app/spec/core/kernel/fork_spec.rb +10 -8
  1551. data/spec/framework_spec/app/spec/core/kernel/format_spec.rb +2 -2
  1552. data/spec/framework_spec/app/spec/core/kernel/freeze_spec.rb +75 -37
  1553. data/spec/framework_spec/app/spec/core/kernel/frozen_spec.rb +2 -2
  1554. data/spec/framework_spec/app/spec/core/kernel/getc_spec.rb +10 -8
  1555. data/spec/framework_spec/app/spec/core/kernel/gets_spec.rb +2 -2
  1556. data/spec/framework_spec/app/spec/core/kernel/global_variables_spec.rb +24 -12
  1557. data/spec/framework_spec/app/spec/core/kernel/gsub_spec.rb +76 -72
  1558. data/spec/framework_spec/app/spec/core/kernel/hash_spec.rb +2 -2
  1559. data/spec/framework_spec/app/spec/core/kernel/id_spec.rb +2 -2
  1560. data/spec/framework_spec/app/spec/core/kernel/initialize_clone_spec.rb +7 -0
  1561. data/spec/framework_spec/app/spec/core/kernel/initialize_copy_spec.rb +2 -2
  1562. data/spec/framework_spec/app/spec/core/kernel/initialize_dup_spec.rb +7 -0
  1563. data/spec/framework_spec/app/spec/core/kernel/inspect_spec.rb +2 -2
  1564. data/spec/framework_spec/app/spec/core/kernel/instance_eval_spec.rb +154 -113
  1565. data/spec/framework_spec/app/spec/core/kernel/instance_of_spec.rb +1 -1
  1566. data/spec/framework_spec/app/spec/core/kernel/instance_variable_defined_spec.rb +1 -1
  1567. data/spec/framework_spec/app/spec/core/kernel/instance_variable_get_spec.rb +16 -2
  1568. data/spec/framework_spec/app/spec/core/kernel/instance_variable_set_spec.rb +25 -12
  1569. data/spec/framework_spec/app/spec/core/kernel/instance_variables_spec.rb +48 -3
  1570. data/spec/framework_spec/app/spec/core/kernel/is_a_spec.rb +1 -1
  1571. data/spec/framework_spec/app/spec/core/kernel/iterator_spec.rb +2 -2
  1572. data/spec/framework_spec/app/spec/core/kernel/kind_of_spec.rb +1 -1
  1573. data/spec/framework_spec/app/spec/core/kernel/lambda_spec.rb +68 -7
  1574. data/spec/framework_spec/app/spec/core/kernel/load_spec.rb +22 -217
  1575. data/spec/framework_spec/app/spec/core/kernel/local_variables_spec.rb +38 -18
  1576. data/spec/framework_spec/app/spec/core/kernel/loop_spec.rb +3 -3
  1577. data/spec/framework_spec/app/spec/core/kernel/match_spec.rb +2 -2
  1578. data/spec/framework_spec/app/spec/core/kernel/method_missing_spec.rb +9 -54
  1579. data/spec/framework_spec/app/spec/core/kernel/method_spec.rb +29 -31
  1580. data/spec/framework_spec/app/spec/core/kernel/methods_spec.rb +93 -78
  1581. data/spec/framework_spec/app/spec/core/kernel/nil_spec.rb +2 -2
  1582. data/spec/framework_spec/app/spec/core/kernel/not_match_spec.rb +7 -0
  1583. data/spec/framework_spec/app/spec/core/kernel/object_id_spec.rb +4 -4
  1584. data/spec/framework_spec/app/spec/core/kernel/open_spec.rb +30 -32
  1585. data/spec/framework_spec/app/spec/core/kernel/p_spec.rb +29 -29
  1586. data/spec/framework_spec/app/spec/core/kernel/print_spec.rb +2 -2
  1587. data/spec/framework_spec/app/spec/core/kernel/printf_spec.rb +2 -2
  1588. data/spec/framework_spec/app/spec/core/kernel/private_methods_spec.rb +82 -14
  1589. data/spec/framework_spec/app/spec/core/kernel/proc_spec.rb +22 -4
  1590. data/spec/framework_spec/app/spec/core/kernel/protected_methods_spec.rb +44 -2
  1591. data/spec/framework_spec/app/spec/core/kernel/public_method_spec.rb +37 -0
  1592. data/spec/framework_spec/app/spec/core/kernel/public_methods_spec.rb +70 -12
  1593. data/spec/framework_spec/app/spec/core/kernel/public_send_spec.rb +76 -0
  1594. data/spec/framework_spec/app/spec/core/kernel/putc_spec.rb +31 -4
  1595. data/spec/framework_spec/app/spec/core/kernel/puts_spec.rb +100 -87
  1596. data/spec/framework_spec/app/spec/core/kernel/raise_spec.rb +3 -3
  1597. data/spec/framework_spec/app/spec/core/kernel/rand_spec.rb +39 -13
  1598. data/spec/framework_spec/app/spec/core/kernel/readline_spec.rb +2 -2
  1599. data/spec/framework_spec/app/spec/core/kernel/readlines_spec.rb +2 -2
  1600. data/spec/framework_spec/app/spec/core/kernel/remove_instance_variable_spec.rb +32 -2
  1601. data/spec/framework_spec/app/spec/core/kernel/require_relative_spec.rb +154 -0
  1602. data/spec/framework_spec/app/spec/core/kernel/require_spec.rb +20 -289
  1603. data/spec/framework_spec/app/spec/core/kernel/respond_to_missing_spec.rb +88 -0
  1604. data/spec/framework_spec/app/spec/core/kernel/respond_to_spec.rb +41 -33
  1605. data/spec/framework_spec/app/spec/core/kernel/scan_spec.rb +10 -8
  1606. data/spec/framework_spec/app/spec/core/kernel/select_spec.rb +2 -2
  1607. data/spec/framework_spec/app/spec/core/kernel/send_spec.rb +31 -65
  1608. data/spec/framework_spec/app/spec/core/kernel/set_trace_func_spec.rb +2 -2
  1609. data/spec/framework_spec/app/spec/core/kernel/shared/__method__.rb +6 -7
  1610. data/spec/framework_spec/app/spec/core/kernel/shared/abort.rb +26 -0
  1611. data/spec/framework_spec/app/spec/core/kernel/shared/lambda.rb +12 -25
  1612. data/spec/framework_spec/app/spec/core/kernel/shared/load.rb +93 -0
  1613. data/spec/framework_spec/app/spec/core/kernel/shared/method.rb +59 -0
  1614. data/spec/framework_spec/app/spec/core/kernel/shared/object_id.rb +22 -6
  1615. data/spec/framework_spec/app/spec/core/kernel/shared/require.rb +529 -0
  1616. data/spec/framework_spec/app/spec/core/kernel/shared/send.rb +110 -0
  1617. data/spec/framework_spec/app/spec/core/kernel/singleton_class_spec.rb +30 -0
  1618. data/spec/framework_spec/app/spec/core/kernel/singleton_method_added_spec.rb +6 -5
  1619. data/spec/framework_spec/app/spec/core/kernel/singleton_method_removed_spec.rb +5 -5
  1620. data/spec/framework_spec/app/spec/core/kernel/singleton_method_undefined_spec.rb +4 -5
  1621. data/spec/framework_spec/app/spec/core/kernel/singleton_methods_spec.rb +179 -58
  1622. data/spec/framework_spec/app/spec/core/kernel/sleep_spec.rb +18 -19
  1623. data/spec/framework_spec/app/spec/core/kernel/spawn_spec.rb +152 -0
  1624. data/spec/framework_spec/app/spec/core/kernel/split_spec.rb +10 -8
  1625. data/spec/framework_spec/app/spec/core/kernel/sprintf_spec.rb +351 -5
  1626. data/spec/framework_spec/app/spec/core/kernel/srand_spec.rb +33 -6
  1627. data/spec/framework_spec/app/spec/core/kernel/sub_spec.rb +19 -15
  1628. data/spec/framework_spec/app/spec/core/kernel/syscall_spec.rb +2 -2
  1629. data/spec/framework_spec/app/spec/core/kernel/system_spec.rb +90 -61
  1630. data/spec/framework_spec/app/spec/core/kernel/taint_spec.rb +9 -4
  1631. data/spec/framework_spec/app/spec/core/kernel/tainted_spec.rb +3 -3
  1632. data/spec/framework_spec/app/spec/core/kernel/tap_spec.rb +5 -5
  1633. data/spec/framework_spec/app/spec/core/kernel/test_spec.rb +36 -16
  1634. data/spec/framework_spec/app/spec/core/kernel/throw_spec.rb +29 -24
  1635. data/spec/framework_spec/app/spec/core/kernel/to_a_spec.rb +17 -15
  1636. data/spec/framework_spec/app/spec/core/kernel/to_enum_spec.rb +7 -0
  1637. data/spec/framework_spec/app/spec/core/kernel/to_s_spec.rb +2 -2
  1638. data/spec/framework_spec/app/spec/core/kernel/trace_var_spec.rb +2 -2
  1639. data/spec/framework_spec/app/spec/core/kernel/trap_spec.rb +2 -2
  1640. data/spec/framework_spec/app/spec/core/kernel/trust_spec.rb +2 -2
  1641. data/spec/framework_spec/app/spec/core/kernel/type_spec.rb +2 -2
  1642. data/spec/framework_spec/app/spec/core/kernel/untaint_spec.rb +2 -2
  1643. data/spec/framework_spec/app/spec/core/kernel/untrace_var_spec.rb +2 -2
  1644. data/spec/framework_spec/app/spec/core/kernel/untrust_spec.rb +2 -2
  1645. data/spec/framework_spec/app/spec/core/kernel/untrusted_spec.rb +2 -2
  1646. data/spec/framework_spec/app/spec/core/kernel/warn_spec.rb +59 -60
  1647. data/spec/framework_spec/app/spec/core/marshal/dump_spec.rb +314 -70
  1648. data/spec/framework_spec/app/spec/core/marshal/fixtures/marshal_data.rb +165 -0
  1649. data/spec/framework_spec/app/spec/core/marshal/fixtures/random.dump +0 -0
  1650. data/spec/framework_spec/app/spec/core/marshal/load_spec.rb +483 -170
  1651. data/spec/framework_spec/app/spec/core/marshal/restore_spec.rb +5 -1
  1652. data/spec/framework_spec/app/spec/core/matchdata/begin_spec.rb +1 -1
  1653. data/spec/framework_spec/app/spec/core/matchdata/captures_spec.rb +1 -1
  1654. data/spec/framework_spec/app/spec/core/matchdata/element_reference_spec.rb +3 -1
  1655. data/spec/framework_spec/app/spec/core/matchdata/end_spec.rb +2 -2
  1656. data/spec/framework_spec/app/spec/core/matchdata/eql_spec.rb +8 -0
  1657. data/spec/framework_spec/app/spec/core/matchdata/equal_value_spec.rb +8 -0
  1658. data/spec/framework_spec/app/spec/core/matchdata/hash_spec.rb +7 -0
  1659. data/spec/framework_spec/app/spec/core/matchdata/initialize_copy_spec.rb +1 -1
  1660. data/spec/framework_spec/app/spec/core/matchdata/inspect_spec.rb +19 -1
  1661. data/spec/framework_spec/app/spec/core/matchdata/length_spec.rb +2 -2
  1662. data/spec/framework_spec/app/spec/core/matchdata/names_spec.rb +3 -0
  1663. data/spec/framework_spec/app/spec/core/matchdata/offset_spec.rb +1 -1
  1664. data/spec/framework_spec/app/spec/core/matchdata/post_match_spec.rb +2 -2
  1665. data/spec/framework_spec/app/spec/core/matchdata/pre_match_spec.rb +1 -1
  1666. data/spec/framework_spec/app/spec/core/matchdata/regexp_spec.rb +15 -0
  1667. data/spec/framework_spec/app/spec/core/matchdata/select_spec.rb +1 -1
  1668. data/spec/framework_spec/app/spec/core/matchdata/shared/eql.rb +26 -0
  1669. data/spec/framework_spec/app/spec/core/matchdata/size_spec.rb +2 -2
  1670. data/spec/framework_spec/app/spec/core/matchdata/string_spec.rb +1 -1
  1671. data/spec/framework_spec/app/spec/core/matchdata/to_a_spec.rb +2 -2
  1672. data/spec/framework_spec/app/spec/core/matchdata/to_s_spec.rb +1 -1
  1673. data/spec/framework_spec/app/spec/core/matchdata/values_at_spec.rb +1 -1
  1674. data/spec/framework_spec/app/spec/core/matchdata/versions/element_reference_1.9.rb +35 -0
  1675. data/spec/framework_spec/app/spec/core/matchdata/versions/names_1.9.rb +33 -0
  1676. data/spec/framework_spec/app/spec/core/math/acos_spec.rb +31 -31
  1677. data/spec/framework_spec/app/spec/core/math/acosh_spec.rb +6 -6
  1678. data/spec/framework_spec/app/spec/core/math/asin_spec.rb +15 -15
  1679. data/spec/framework_spec/app/spec/core/math/asinh_spec.rb +7 -7
  1680. data/spec/framework_spec/app/spec/core/math/atan2_spec.rb +6 -6
  1681. data/spec/framework_spec/app/spec/core/math/atan_spec.rb +13 -13
  1682. data/spec/framework_spec/app/spec/core/math/atanh_spec.rb +8 -64
  1683. data/spec/framework_spec/app/spec/core/math/cbrt_spec.rb +7 -0
  1684. data/spec/framework_spec/app/spec/core/math/constants_spec.rb +3 -3
  1685. data/spec/framework_spec/app/spec/core/math/cos_spec.rb +13 -13
  1686. data/spec/framework_spec/app/spec/core/math/cosh_spec.rb +7 -7
  1687. data/spec/framework_spec/app/spec/core/math/erf_spec.rb +14 -14
  1688. data/spec/framework_spec/app/spec/core/math/erfc_spec.rb +12 -12
  1689. data/spec/framework_spec/app/spec/core/math/exp_spec.rb +7 -7
  1690. data/spec/framework_spec/app/spec/core/math/fixtures/classes.rb +2 -2
  1691. data/spec/framework_spec/app/spec/core/math/frexp_spec.rb +6 -6
  1692. data/spec/framework_spec/app/spec/core/math/gamma_spec.rb +71 -0
  1693. data/spec/framework_spec/app/spec/core/math/hypot_spec.rb +11 -11
  1694. data/spec/framework_spec/app/spec/core/math/ldexp_spec.rb +10 -10
  1695. data/spec/framework_spec/app/spec/core/math/lgamma_spec.rb +87 -0
  1696. data/spec/framework_spec/app/spec/core/math/log10_spec.rb +7 -7
  1697. data/spec/framework_spec/app/spec/core/math/log2_spec.rb +30 -3
  1698. data/spec/framework_spec/app/spec/core/math/log_spec.rb +30 -11
  1699. data/spec/framework_spec/app/spec/core/math/sin_spec.rb +15 -15
  1700. data/spec/framework_spec/app/spec/core/math/sinh_spec.rb +8 -8
  1701. data/spec/framework_spec/app/spec/core/math/sqrt_spec.rb +5 -5
  1702. data/spec/framework_spec/app/spec/core/math/tan_spec.rb +6 -6
  1703. data/spec/framework_spec/app/spec/core/math/tanh_spec.rb +6 -6
  1704. data/spec/framework_spec/app/spec/core/method/arity_spec.rb +9 -2
  1705. data/spec/framework_spec/app/spec/core/method/call_spec.rb +3 -3
  1706. data/spec/framework_spec/app/spec/core/method/clone_spec.rb +2 -2
  1707. data/spec/framework_spec/app/spec/core/method/element_reference_spec.rb +3 -3
  1708. data/spec/framework_spec/app/spec/core/method/eql_spec.rb +8 -0
  1709. data/spec/framework_spec/app/spec/core/method/equal_value_spec.rb +3 -40
  1710. data/spec/framework_spec/app/spec/core/method/fixtures/classes.rb +104 -13
  1711. data/spec/framework_spec/app/spec/core/method/fixtures/classes_1.9.rb +12 -0
  1712. data/spec/framework_spec/app/spec/core/method/hash_spec.rb +7 -0
  1713. data/spec/framework_spec/app/spec/core/method/inspect_spec.rb +2 -2
  1714. data/spec/framework_spec/app/spec/core/method/name_spec.rb +19 -5
  1715. data/spec/framework_spec/app/spec/core/method/owner_spec.rb +4 -4
  1716. data/spec/framework_spec/app/spec/core/method/parameters_spec.rb +3 -0
  1717. data/spec/framework_spec/app/spec/core/method/receiver_spec.rb +4 -4
  1718. data/spec/framework_spec/app/spec/core/method/shared/call.rb +2 -2
  1719. data/spec/framework_spec/app/spec/core/method/shared/eql.rb +102 -0
  1720. data/spec/framework_spec/app/spec/core/method/shared/to_s.rb +5 -5
  1721. data/spec/framework_spec/app/spec/core/method/source_location_spec.rb +50 -0
  1722. data/spec/framework_spec/app/spec/core/method/to_proc_spec.rb +20 -2
  1723. data/spec/framework_spec/app/spec/core/method/to_s_spec.rb +2 -2
  1724. data/spec/framework_spec/app/spec/core/method/unbind_spec.rb +3 -3
  1725. data/spec/framework_spec/app/spec/core/method/versions/parameters_1.9.rb +189 -0
  1726. data/spec/framework_spec/app/spec/core/module/alias_method_spec.rb +20 -8
  1727. data/spec/framework_spec/app/spec/core/module/allocate_spec.rb +2 -2
  1728. data/spec/framework_spec/app/spec/core/module/ancestors_spec.rb +3 -3
  1729. data/spec/framework_spec/app/spec/core/module/append_features_spec.rb +15 -4
  1730. data/spec/framework_spec/app/spec/core/module/attr_accessor_spec.rb +16 -7
  1731. data/spec/framework_spec/app/spec/core/module/attr_reader_spec.rb +14 -5
  1732. data/spec/framework_spec/app/spec/core/module/attr_spec.rb +61 -63
  1733. data/spec/framework_spec/app/spec/core/module/attr_writer_spec.rb +23 -12
  1734. data/spec/framework_spec/app/spec/core/module/autoload_spec.rb +177 -84
  1735. data/spec/framework_spec/app/spec/core/module/case_compare_spec.rb +4 -4
  1736. data/spec/framework_spec/app/spec/core/module/class_eval_spec.rb +7 -8
  1737. data/spec/framework_spec/app/spec/core/module/class_exec_spec.rb +7 -0
  1738. data/spec/framework_spec/app/spec/core/module/class_variable_defined_spec.rb +22 -7
  1739. data/spec/framework_spec/app/spec/core/module/class_variable_get_spec.rb +27 -12
  1740. data/spec/framework_spec/app/spec/core/module/class_variable_set_spec.rb +37 -15
  1741. data/spec/framework_spec/app/spec/core/module/class_variables_spec.rb +50 -17
  1742. data/spec/framework_spec/app/spec/core/module/comparison_spec.rb +6 -6
  1743. data/spec/framework_spec/app/spec/core/module/const_defined_spec.rb +41 -5
  1744. data/spec/framework_spec/app/spec/core/module/const_get_spec.rb +14 -2
  1745. data/spec/framework_spec/app/spec/core/module/const_missing_spec.rb +8 -2
  1746. data/spec/framework_spec/app/spec/core/module/const_set_spec.rb +2 -2
  1747. data/spec/framework_spec/app/spec/core/module/constants_spec.rb +26 -2
  1748. data/spec/framework_spec/app/spec/core/module/define_method_spec.rb +283 -15
  1749. data/spec/framework_spec/app/spec/core/module/eql_spec.rb +3 -3
  1750. data/spec/framework_spec/app/spec/core/module/equal_spec.rb +3 -3
  1751. data/spec/framework_spec/app/spec/core/module/equal_value_spec.rb +3 -3
  1752. data/spec/framework_spec/app/spec/core/module/extend_object_spec.rb +23 -28
  1753. data/spec/framework_spec/app/spec/core/module/extended_spec.rb +18 -10
  1754. data/spec/framework_spec/app/spec/core/module/fixtures/autoload.rb +1 -1
  1755. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_ex1.rb +16 -0
  1756. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_k.rb +3 -1
  1757. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_s.rb +5 -0
  1758. data/spec/framework_spec/app/spec/core/module/fixtures/autoload_w2.rb +1 -0
  1759. data/spec/framework_spec/app/spec/core/module/fixtures/classes.rb +97 -0
  1760. data/spec/framework_spec/app/spec/core/module/fixtures/name.rb +10 -0
  1761. data/spec/framework_spec/app/spec/core/module/freeze_spec.rb +33 -13
  1762. data/spec/framework_spec/app/spec/core/module/gt_spec.rb +5 -5
  1763. data/spec/framework_spec/app/spec/core/module/gte_spec.rb +4 -4
  1764. data/spec/framework_spec/app/spec/core/module/include_spec.rb +159 -33
  1765. data/spec/framework_spec/app/spec/core/module/included_modules_spec.rb +2 -2
  1766. data/spec/framework_spec/app/spec/core/module/included_spec.rb +12 -4
  1767. data/spec/framework_spec/app/spec/core/module/initialize_copy_spec.rb +2 -2
  1768. data/spec/framework_spec/app/spec/core/module/initialize_spec.rb +3 -3
  1769. data/spec/framework_spec/app/spec/core/module/instance_method_spec.rb +16 -7
  1770. data/spec/framework_spec/app/spec/core/module/instance_methods_spec.rb +51 -17
  1771. data/spec/framework_spec/app/spec/core/module/lt_spec.rb +5 -5
  1772. data/spec/framework_spec/app/spec/core/module/lte_spec.rb +4 -4
  1773. data/spec/framework_spec/app/spec/core/module/method_added_spec.rb +8 -8
  1774. data/spec/framework_spec/app/spec/core/module/method_defined_spec.rb +13 -6
  1775. data/spec/framework_spec/app/spec/core/module/method_removed_spec.rb +4 -4
  1776. data/spec/framework_spec/app/spec/core/module/method_undefined_spec.rb +4 -4
  1777. data/spec/framework_spec/app/spec/core/module/module_eval_spec.rb +7 -8
  1778. data/spec/framework_spec/app/spec/core/module/module_exec_spec.rb +7 -0
  1779. data/spec/framework_spec/app/spec/core/module/module_function_spec.rb +82 -76
  1780. data/spec/framework_spec/app/spec/core/module/name_spec.rb +24 -6
  1781. data/spec/framework_spec/app/spec/core/module/nesting_spec.rb +13 -9
  1782. data/spec/framework_spec/app/spec/core/module/new_spec.rb +3 -3
  1783. data/spec/framework_spec/app/spec/core/module/private_class_method_spec.rb +4 -4
  1784. data/spec/framework_spec/app/spec/core/module/private_instance_methods_spec.rb +26 -2
  1785. data/spec/framework_spec/app/spec/core/module/private_method_defined_spec.rb +16 -6
  1786. data/spec/framework_spec/app/spec/core/module/private_spec.rb +21 -3
  1787. data/spec/framework_spec/app/spec/core/module/protected_instance_methods_spec.rb +66 -18
  1788. data/spec/framework_spec/app/spec/core/module/protected_method_defined_spec.rb +40 -18
  1789. data/spec/framework_spec/app/spec/core/module/protected_spec.rb +24 -7
  1790. data/spec/framework_spec/app/spec/core/module/public_class_method_spec.rb +3 -3
  1791. data/spec/framework_spec/app/spec/core/module/public_instance_method_spec.rb +7 -0
  1792. data/spec/framework_spec/app/spec/core/module/public_instance_methods_spec.rb +38 -14
  1793. data/spec/framework_spec/app/spec/core/module/public_method_defined_spec.rb +28 -6
  1794. data/spec/framework_spec/app/spec/core/module/public_spec.rb +26 -2
  1795. data/spec/framework_spec/app/spec/core/module/remove_class_variable_spec.rb +46 -2
  1796. data/spec/framework_spec/app/spec/core/module/remove_const_spec.rb +10 -3
  1797. data/spec/framework_spec/app/spec/core/module/remove_method_spec.rb +10 -10
  1798. data/spec/framework_spec/app/spec/core/module/shared/class_eval.rb +36 -14
  1799. data/spec/framework_spec/app/spec/core/module/shared/class_exec.rb +24 -0
  1800. data/spec/framework_spec/app/spec/core/module/shared/equal_value.rb +1 -1
  1801. data/spec/framework_spec/app/spec/core/module/to_s_spec.rb +6 -2
  1802. data/spec/framework_spec/app/spec/core/module/undef_method_spec.rb +2 -2
  1803. data/spec/framework_spec/app/spec/core/mutex/lock_spec.rb +7 -0
  1804. data/spec/framework_spec/app/spec/core/mutex/locked_spec.rb +7 -0
  1805. data/spec/framework_spec/app/spec/core/mutex/sleep_spec.rb +7 -0
  1806. data/spec/framework_spec/app/spec/core/mutex/synchronize_spec.rb +7 -0
  1807. data/spec/framework_spec/app/spec/core/mutex/try_lock_spec.rb +7 -0
  1808. data/spec/framework_spec/app/spec/core/mutex/unlock_spec.rb +7 -0
  1809. data/spec/framework_spec/app/spec/core/nil/and_spec.rb +1 -1
  1810. data/spec/framework_spec/app/spec/core/nil/inspect_spec.rb +1 -1
  1811. data/spec/framework_spec/app/spec/core/nil/nil_spec.rb +1 -1
  1812. data/spec/framework_spec/app/spec/core/nil/or_spec.rb +1 -1
  1813. data/spec/framework_spec/app/spec/core/nil/rationalize_spec.rb +13 -0
  1814. data/spec/framework_spec/app/spec/core/nil/to_a_spec.rb +1 -1
  1815. data/spec/framework_spec/app/spec/core/nil/to_c_spec.rb +7 -0
  1816. data/spec/framework_spec/app/spec/core/nil/to_f_spec.rb +2 -2
  1817. data/spec/framework_spec/app/spec/core/nil/to_i_spec.rb +2 -2
  1818. data/spec/framework_spec/app/spec/core/nil/to_r_spec.rb +9 -0
  1819. data/spec/framework_spec/app/spec/core/nil/to_s_spec.rb +1 -1
  1820. data/spec/framework_spec/app/spec/core/nil/xor_spec.rb +1 -1
  1821. data/spec/framework_spec/app/spec/core/numeric/abs2_spec.rb +36 -0
  1822. data/spec/framework_spec/app/spec/core/numeric/abs_spec.rb +3 -17
  1823. data/spec/framework_spec/app/spec/core/numeric/angle_spec.rb +8 -0
  1824. data/spec/framework_spec/app/spec/core/numeric/arg_spec.rb +8 -0
  1825. data/spec/framework_spec/app/spec/core/numeric/ceil_spec.rb +10 -9
  1826. data/spec/framework_spec/app/spec/core/numeric/coerce_spec.rb +23 -6
  1827. data/spec/framework_spec/app/spec/core/numeric/comparison_spec.rb +35 -6
  1828. data/spec/framework_spec/app/spec/core/numeric/conj_spec.rb +8 -0
  1829. data/spec/framework_spec/app/spec/core/numeric/conjugate_spec.rb +8 -0
  1830. data/spec/framework_spec/app/spec/core/numeric/denominator_spec.rb +26 -0
  1831. data/spec/framework_spec/app/spec/core/numeric/div_spec.rb +22 -10
  1832. data/spec/framework_spec/app/spec/core/numeric/divmod_spec.rb +19 -8
  1833. data/spec/framework_spec/app/spec/core/numeric/eql_spec.rb +5 -5
  1834. data/spec/framework_spec/app/spec/core/numeric/fdiv_spec.rb +37 -0
  1835. data/spec/framework_spec/app/spec/core/numeric/fixtures/classes.rb +16 -4
  1836. data/spec/framework_spec/app/spec/core/numeric/floor_spec.rb +5 -5
  1837. data/spec/framework_spec/app/spec/core/numeric/i_spec.rb +17 -0
  1838. data/spec/framework_spec/app/spec/core/numeric/imag_spec.rb +8 -0
  1839. data/spec/framework_spec/app/spec/core/numeric/imaginary_spec.rb +8 -0
  1840. data/spec/framework_spec/app/spec/core/numeric/initialize_copy_spec.rb +5 -5
  1841. data/spec/framework_spec/app/spec/core/numeric/integer_spec.rb +5 -5
  1842. data/spec/framework_spec/app/spec/core/numeric/magnitude_spec.rb +7 -0
  1843. data/spec/framework_spec/app/spec/core/numeric/modulo_spec.rb +33 -9
  1844. data/spec/framework_spec/app/spec/core/numeric/nonzero_spec.rb +6 -6
  1845. data/spec/framework_spec/app/spec/core/numeric/numerator_spec.rb +35 -0
  1846. data/spec/framework_spec/app/spec/core/numeric/phase_spec.rb +8 -0
  1847. data/spec/framework_spec/app/spec/core/numeric/polar_spec.rb +8 -0
  1848. data/spec/framework_spec/app/spec/core/numeric/quo_spec.rb +5 -5
  1849. data/spec/framework_spec/app/spec/core/numeric/rationalize_spec.rb +32 -0
  1850. data/spec/framework_spec/app/spec/core/numeric/real_spec.rb +14 -0
  1851. data/spec/framework_spec/app/spec/core/numeric/rect_spec.rb +8 -0
  1852. data/spec/framework_spec/app/spec/core/numeric/rectangular_spec.rb +8 -0
  1853. data/spec/framework_spec/app/spec/core/numeric/remainder_spec.rb +11 -11
  1854. data/spec/framework_spec/app/spec/core/numeric/round_spec.rb +5 -5
  1855. data/spec/framework_spec/app/spec/core/numeric/shared/abs.rb +19 -0
  1856. data/spec/framework_spec/app/spec/core/numeric/shared/rect.rb +48 -0
  1857. data/spec/framework_spec/app/spec/core/numeric/singleton_method_added_spec.rb +9 -9
  1858. data/spec/framework_spec/app/spec/core/numeric/step_spec.rb +215 -162
  1859. data/spec/framework_spec/app/spec/core/numeric/to_c_spec.rb +47 -0
  1860. data/spec/framework_spec/app/spec/core/numeric/to_int_spec.rb +5 -5
  1861. data/spec/framework_spec/app/spec/core/numeric/truncate_spec.rb +4 -4
  1862. data/spec/framework_spec/app/spec/core/numeric/uminus_spec.rb +9 -9
  1863. data/spec/framework_spec/app/spec/core/numeric/uplus_spec.rb +4 -4
  1864. data/spec/framework_spec/app/spec/core/numeric/zero_spec.rb +5 -5
  1865. data/spec/framework_spec/app/spec/core/object/clone_spec.rb +2 -2
  1866. data/spec/framework_spec/app/spec/core/object/dup_spec.rb +2 -2
  1867. data/spec/framework_spec/app/spec/core/object/fixtures/classes.rb +17 -0
  1868. data/spec/framework_spec/app/spec/core/object/initialize_spec.rb +1 -1
  1869. data/spec/framework_spec/app/spec/core/object/instance_exec_spec.rb +101 -0
  1870. data/spec/framework_spec/app/spec/core/object/instance_of_spec.rb +6 -6
  1871. data/spec/framework_spec/app/spec/core/object/is_a_spec.rb +2 -2
  1872. data/spec/framework_spec/app/spec/core/object/kind_of_spec.rb +2 -2
  1873. data/spec/framework_spec/app/spec/core/object/match_spec.rb +25 -10
  1874. data/spec/framework_spec/app/spec/core/object/metaclass_spec.rb +9 -9
  1875. data/spec/framework_spec/app/spec/core/object/new_spec.rb +18 -2
  1876. data/spec/framework_spec/app/spec/core/object/shared/kind_of.rb +3 -3
  1877. data/spec/framework_spec/app/spec/core/objectspace/_id2ref_spec.rb +1 -1
  1878. data/spec/framework_spec/app/spec/core/objectspace/add_finalizer_spec.rb +5 -1
  1879. data/spec/framework_spec/app/spec/core/objectspace/call_finalizer_spec.rb +5 -1
  1880. data/spec/framework_spec/app/spec/core/objectspace/count_objects_spec.rb +7 -0
  1881. data/spec/framework_spec/app/spec/core/objectspace/define_finalizer_spec.rb +44 -3
  1882. data/spec/framework_spec/app/spec/core/objectspace/each_object_spec.rb +27 -5
  1883. data/spec/framework_spec/app/spec/core/objectspace/finalizers_spec.rb +5 -1
  1884. data/spec/framework_spec/app/spec/core/objectspace/fixtures.rb +5 -0
  1885. data/spec/framework_spec/app/spec/core/objectspace/garbage_collect_spec.rb +22 -1
  1886. data/spec/framework_spec/app/spec/core/objectspace/remove_finalizer_spec.rb +5 -1
  1887. data/spec/framework_spec/app/spec/core/objectspace/undefine_finalizer_spec.rb +5 -1
  1888. data/spec/framework_spec/app/spec/core/precision/included_spec.rb +14 -12
  1889. data/spec/framework_spec/app/spec/core/precision/prec_f_spec.rb +9 -8
  1890. data/spec/framework_spec/app/spec/core/precision/prec_i_spec.rb +10 -8
  1891. data/spec/framework_spec/app/spec/core/precision/prec_spec.rb +19 -14
  1892. data/spec/framework_spec/app/spec/core/proc/arity_spec.rb +104 -53
  1893. data/spec/framework_spec/app/spec/core/proc/binding_spec.rb +14 -14
  1894. data/spec/framework_spec/app/spec/core/proc/block_pass_spec.rb +21 -1
  1895. data/spec/framework_spec/app/spec/core/proc/call_spec.rb +9 -2
  1896. data/spec/framework_spec/app/spec/core/proc/case_compare_spec.rb +19 -0
  1897. data/spec/framework_spec/app/spec/core/proc/clone_spec.rb +3 -3
  1898. data/spec/framework_spec/app/spec/core/proc/curry_spec.rb +142 -0
  1899. data/spec/framework_spec/app/spec/core/proc/dup_spec.rb +3 -3
  1900. data/spec/framework_spec/app/spec/core/proc/element_reference_spec.rb +8 -2
  1901. data/spec/framework_spec/app/spec/core/proc/eql_spec.rb +8 -0
  1902. data/spec/framework_spec/app/spec/core/proc/equal_value_spec.rb +4 -12
  1903. data/spec/framework_spec/app/spec/core/proc/fixtures/common.rb +42 -0
  1904. data/spec/framework_spec/app/spec/core/proc/fixtures/source_location.rb +51 -0
  1905. data/spec/framework_spec/app/spec/core/proc/hash_spec.rb +24 -0
  1906. data/spec/framework_spec/app/spec/core/proc/lambda_spec.rb +62 -0
  1907. data/spec/framework_spec/app/spec/core/proc/new_spec.rb +135 -46
  1908. data/spec/framework_spec/app/spec/core/proc/parameters_spec.rb +2 -0
  1909. data/spec/framework_spec/app/spec/core/proc/shared/call.rb +86 -34
  1910. data/spec/framework_spec/app/spec/core/proc/shared/call_arguments.rb +7 -0
  1911. data/spec/framework_spec/app/spec/core/proc/shared/equal.rb +93 -0
  1912. data/spec/framework_spec/app/spec/core/proc/source_location_spec.rb +64 -0
  1913. data/spec/framework_spec/app/spec/core/proc/to_proc_spec.rb +1 -1
  1914. data/spec/framework_spec/app/spec/core/proc/to_s_spec.rb +16 -5
  1915. data/spec/framework_spec/app/spec/core/proc/versions/call_1.8.7.rb +1 -0
  1916. data/spec/framework_spec/app/spec/core/proc/versions/call_1.9.rb +1 -0
  1917. data/spec/framework_spec/app/spec/core/proc/versions/parameters_1.9.rb +73 -0
  1918. data/spec/framework_spec/app/spec/core/proc/yield_spec.rb +19 -0
  1919. data/spec/framework_spec/app/spec/core/process/abort_spec.rb +16 -9
  1920. data/spec/framework_spec/app/spec/core/process/constants_spec.rb +6 -6
  1921. data/spec/framework_spec/app/spec/core/process/daemon_spec.rb +7 -0
  1922. data/spec/framework_spec/app/spec/core/process/detach_spec.rb +5 -9
  1923. data/spec/framework_spec/app/spec/core/process/egid_spec.rb +5 -1
  1924. data/spec/framework_spec/app/spec/core/process/euid_spec.rb +6 -2
  1925. data/spec/framework_spec/app/spec/core/process/exec_spec.rb +7 -0
  1926. data/spec/framework_spec/app/spec/core/process/exit_spec.rb +9 -1
  1927. data/spec/framework_spec/app/spec/core/process/fork_spec.rb +38 -26
  1928. data/spec/framework_spec/app/spec/core/process/getpgid_spec.rb +5 -5
  1929. data/spec/framework_spec/app/spec/core/process/getpgrp_spec.rb +5 -1
  1930. data/spec/framework_spec/app/spec/core/process/getpriority_spec.rb +8 -9
  1931. data/spec/framework_spec/app/spec/core/process/getrlimit_spec.rb +5 -1
  1932. data/spec/framework_spec/app/spec/core/process/gid/change_privilege_spec.rb +5 -0
  1933. data/spec/framework_spec/app/spec/core/process/gid/eid_spec.rb +9 -0
  1934. data/spec/framework_spec/app/spec/core/process/gid/grant_privilege_spec.rb +5 -0
  1935. data/spec/framework_spec/app/spec/core/process/gid/re_exchange_spec.rb +5 -0
  1936. data/spec/framework_spec/app/spec/core/process/gid/re_exchangeable_spec.rb +5 -0
  1937. data/spec/framework_spec/app/spec/core/process/gid/rid_spec.rb +5 -0
  1938. data/spec/framework_spec/app/spec/core/process/gid/sid_available_spec.rb +5 -0
  1939. data/spec/framework_spec/app/spec/core/process/gid/switch_spec.rb +5 -0
  1940. data/spec/framework_spec/app/spec/core/process/gid_spec.rb +11 -7
  1941. data/spec/framework_spec/app/spec/core/process/groups_spec.rb +15 -17
  1942. data/spec/framework_spec/app/spec/core/process/initgroups_spec.rb +3 -6
  1943. data/spec/framework_spec/app/spec/core/process/kill_spec.rb +21 -17
  1944. data/spec/framework_spec/app/spec/core/process/maxgroups_spec.rb +12 -5
  1945. data/spec/framework_spec/app/spec/core/process/pid_spec.rb +3 -3
  1946. data/spec/framework_spec/app/spec/core/process/ppid_spec.rb +16 -15
  1947. data/spec/framework_spec/app/spec/core/process/setpgid_spec.rb +16 -21
  1948. data/spec/framework_spec/app/spec/core/process/setpgrp_spec.rb +3 -8
  1949. data/spec/framework_spec/app/spec/core/process/setpriority_spec.rb +42 -60
  1950. data/spec/framework_spec/app/spec/core/process/setrlimit_spec.rb +38 -46
  1951. data/spec/framework_spec/app/spec/core/process/setsid_spec.rb +20 -22
  1952. data/spec/framework_spec/app/spec/core/process/spawn_spec.rb +32 -0
  1953. data/spec/framework_spec/app/spec/core/process/status/_spec.rb +5 -0
  1954. data/spec/framework_spec/app/spec/core/process/status/coredump_spec.rb +5 -0
  1955. data/spec/framework_spec/app/spec/core/process/status/equal_value_spec.rb +5 -0
  1956. data/spec/framework_spec/app/spec/core/process/status/exited_spec.rb +38 -0
  1957. data/spec/framework_spec/app/spec/core/process/status/exitstatus_spec.rb +13 -0
  1958. data/spec/framework_spec/app/spec/core/process/status/inspect_spec.rb +5 -0
  1959. data/spec/framework_spec/app/spec/core/process/status/pid_spec.rb +13 -0
  1960. data/spec/framework_spec/app/spec/core/process/status/right_shift_spec.rb +5 -0
  1961. data/spec/framework_spec/app/spec/core/process/status/signaled_spec.rb +36 -0
  1962. data/spec/framework_spec/app/spec/core/process/status/stopped_spec.rb +5 -0
  1963. data/spec/framework_spec/app/spec/core/process/status/stopsig_spec.rb +5 -0
  1964. data/spec/framework_spec/app/spec/core/process/status/success_spec.rb +53 -0
  1965. data/spec/framework_spec/app/spec/core/process/status/termsig_spec.rb +41 -0
  1966. data/spec/framework_spec/app/spec/core/process/status/to_i_spec.rb +5 -0
  1967. data/spec/framework_spec/app/spec/core/process/status/to_int_spec.rb +5 -0
  1968. data/spec/framework_spec/app/spec/core/process/status/to_s_spec.rb +5 -0
  1969. data/spec/framework_spec/app/spec/core/process/sys/getegid_spec.rb +5 -0
  1970. data/spec/framework_spec/app/spec/core/process/sys/geteuid_spec.rb +5 -0
  1971. data/spec/framework_spec/app/spec/core/process/sys/getgid_spec.rb +5 -0
  1972. data/spec/framework_spec/app/spec/core/process/sys/getuid_spec.rb +5 -0
  1973. data/spec/framework_spec/app/spec/core/process/sys/issetugid_spec.rb +5 -0
  1974. data/spec/framework_spec/app/spec/core/process/sys/setegid_spec.rb +5 -0
  1975. data/spec/framework_spec/app/spec/core/process/sys/seteuid_spec.rb +5 -0
  1976. data/spec/framework_spec/app/spec/core/process/sys/setgid_spec.rb +5 -0
  1977. data/spec/framework_spec/app/spec/core/process/sys/setregid_spec.rb +5 -0
  1978. data/spec/framework_spec/app/spec/core/process/sys/setresgid_spec.rb +5 -0
  1979. data/spec/framework_spec/app/spec/core/process/sys/setresuid_spec.rb +5 -0
  1980. data/spec/framework_spec/app/spec/core/process/sys/setreuid_spec.rb +5 -0
  1981. data/spec/framework_spec/app/spec/core/process/sys/setrgid_spec.rb +5 -0
  1982. data/spec/framework_spec/app/spec/core/process/sys/setruid_spec.rb +5 -0
  1983. data/spec/framework_spec/app/spec/core/process/sys/setuid_spec.rb +5 -0
  1984. data/spec/framework_spec/app/spec/core/process/times_spec.rb +2 -2
  1985. data/spec/framework_spec/app/spec/core/process/uid/change_privilege_spec.rb +5 -0
  1986. data/spec/framework_spec/app/spec/core/process/uid/eid_spec.rb +9 -0
  1987. data/spec/framework_spec/app/spec/core/process/uid/grant_privilege_spec.rb +5 -0
  1988. data/spec/framework_spec/app/spec/core/process/uid/re_exchange_spec.rb +5 -0
  1989. data/spec/framework_spec/app/spec/core/process/uid/re_exchangeable_spec.rb +5 -0
  1990. data/spec/framework_spec/app/spec/core/process/uid/rid_spec.rb +5 -0
  1991. data/spec/framework_spec/app/spec/core/process/uid/sid_available_spec.rb +5 -0
  1992. data/spec/framework_spec/app/spec/core/process/uid/switch_spec.rb +5 -0
  1993. data/spec/framework_spec/app/spec/core/process/uid_spec.rb +11 -7
  1994. data/spec/framework_spec/app/spec/core/process/wait2_spec.rb +7 -6
  1995. data/spec/framework_spec/app/spec/core/process/wait_spec.rb +25 -7
  1996. data/spec/framework_spec/app/spec/core/process/waitall_spec.rb +10 -8
  1997. data/spec/framework_spec/app/spec/core/process/waitpid2_spec.rb +5 -1
  1998. data/spec/framework_spec/app/spec/core/process/waitpid_spec.rb +5 -1
  1999. data/spec/framework_spec/app/spec/core/random/bytes_spec.rb +40 -0
  2000. data/spec/framework_spec/app/spec/core/random/equal_value_spec.rb +39 -0
  2001. data/spec/framework_spec/app/spec/core/random/new_seed_spec.rb +27 -0
  2002. data/spec/framework_spec/app/spec/core/random/new_spec.rb +33 -0
  2003. data/spec/framework_spec/app/spec/core/random/rand_spec.rb +218 -0
  2004. data/spec/framework_spec/app/spec/core/random/seed_spec.rb +32 -0
  2005. data/spec/framework_spec/app/spec/core/random/srand_spec.rb +43 -0
  2006. data/spec/framework_spec/app/spec/core/range/begin_spec.rb +2 -2
  2007. data/spec/framework_spec/app/spec/core/range/case_compare_spec.rb +2 -2
  2008. data/spec/framework_spec/app/spec/core/range/cover_spec.rb +57 -0
  2009. data/spec/framework_spec/app/spec/core/range/each_spec.rb +5 -4
  2010. data/spec/framework_spec/app/spec/core/range/end_spec.rb +2 -2
  2011. data/spec/framework_spec/app/spec/core/range/eql_spec.rb +2 -2
  2012. data/spec/framework_spec/app/spec/core/range/equal_value_spec.rb +2 -2
  2013. data/spec/framework_spec/app/spec/core/range/exclude_end_spec.rb +1 -1
  2014. data/spec/framework_spec/app/spec/core/range/first_spec.rb +2 -2
  2015. data/spec/framework_spec/app/spec/core/range/hash_spec.rb +2 -2
  2016. data/spec/framework_spec/app/spec/core/range/include_spec.rb +2 -2
  2017. data/spec/framework_spec/app/spec/core/range/initialize_spec.rb +1 -1
  2018. data/spec/framework_spec/app/spec/core/range/inspect_spec.rb +2 -2
  2019. data/spec/framework_spec/app/spec/core/range/last_spec.rb +2 -2
  2020. data/spec/framework_spec/app/spec/core/range/max_spec.rb +55 -0
  2021. data/spec/framework_spec/app/spec/core/range/member_spec.rb +2 -2
  2022. data/spec/framework_spec/app/spec/core/range/min_spec.rb +55 -0
  2023. data/spec/framework_spec/app/spec/core/range/new_spec.rb +9 -9
  2024. data/spec/framework_spec/app/spec/core/range/shared/equal_value.rb +2 -2
  2025. data/spec/framework_spec/app/spec/core/range/shared/include.rb +9 -0
  2026. data/spec/framework_spec/app/spec/core/range/step_spec.rb +4 -3
  2027. data/spec/framework_spec/app/spec/core/range/to_a_spec.rb +10 -3
  2028. data/spec/framework_spec/app/spec/core/range/to_s_spec.rb +1 -1
  2029. data/spec/framework_spec/app/spec/core/rational/Rational_spec.rb +35 -0
  2030. data/spec/framework_spec/app/spec/core/rational/abs_spec.rb +7 -0
  2031. data/spec/framework_spec/app/spec/core/rational/ceil_spec.rb +7 -0
  2032. data/spec/framework_spec/app/spec/core/rational/coerce_spec.rb +7 -0
  2033. data/spec/framework_spec/app/spec/core/rational/comparison_spec.rb +23 -0
  2034. data/spec/framework_spec/app/spec/core/rational/denominator_spec.rb +7 -0
  2035. data/spec/framework_spec/app/spec/core/rational/div_spec.rb +19 -0
  2036. data/spec/framework_spec/app/spec/core/rational/divide_spec.rb +19 -0
  2037. data/spec/framework_spec/app/spec/core/rational/divmod_spec.rb +15 -0
  2038. data/spec/framework_spec/app/spec/core/rational/equal_value_spec.rb +19 -0
  2039. data/spec/framework_spec/app/spec/core/rational/exponent_spec.rb +19 -0
  2040. data/spec/framework_spec/app/spec/core/rational/fdiv_spec.rb +7 -0
  2041. data/spec/framework_spec/app/spec/core/rational/floor_spec.rb +7 -0
  2042. data/spec/framework_spec/app/spec/core/rational/hash_spec.rb +7 -0
  2043. data/spec/framework_spec/app/spec/core/rational/initialize_spec.rb +7 -0
  2044. data/spec/framework_spec/app/spec/core/rational/inspect_spec.rb +7 -0
  2045. data/spec/framework_spec/app/spec/core/rational/integer_spec.rb +13 -0
  2046. data/spec/framework_spec/app/spec/core/rational/magnitude_spec.rb +7 -0
  2047. data/spec/framework_spec/app/spec/core/rational/marshal_dump_spec.rb +7 -0
  2048. data/spec/framework_spec/app/spec/core/rational/marshal_load_spec.rb +7 -0
  2049. data/spec/framework_spec/app/spec/core/rational/minus_spec.rb +7 -0
  2050. data/spec/framework_spec/app/spec/core/rational/modulo_spec.rb +7 -0
  2051. data/spec/framework_spec/app/spec/core/rational/multiply_spec.rb +19 -0
  2052. data/spec/framework_spec/app/spec/core/rational/numerator_spec.rb +7 -0
  2053. data/spec/framework_spec/app/spec/core/rational/plus_spec.rb +18 -0
  2054. data/spec/framework_spec/app/spec/core/rational/quo_spec.rb +7 -0
  2055. data/spec/framework_spec/app/spec/core/rational/rationalize_spec.rb +33 -0
  2056. data/spec/framework_spec/app/spec/core/rational/remainder_spec.rb +7 -0
  2057. data/spec/framework_spec/app/spec/core/rational/round_spec.rb +7 -0
  2058. data/spec/framework_spec/app/spec/core/rational/to_f_spec.rb +7 -0
  2059. data/spec/framework_spec/app/spec/core/rational/to_i_spec.rb +7 -0
  2060. data/spec/framework_spec/app/spec/core/rational/to_r_spec.rb +7 -0
  2061. data/spec/framework_spec/app/spec/core/rational/to_s_spec.rb +7 -0
  2062. data/spec/framework_spec/app/spec/core/rational/truncate_spec.rb +7 -0
  2063. data/spec/framework_spec/app/spec/core/rational/zero_spec.rb +15 -0
  2064. data/spec/framework_spec/app/spec/core/regexp/case_compare_spec.rb +2 -2
  2065. data/spec/framework_spec/app/spec/core/regexp/casefold_spec.rb +1 -1
  2066. data/spec/framework_spec/app/spec/core/regexp/compile_spec.rb +2 -2
  2067. data/spec/framework_spec/app/spec/core/regexp/encoding_spec.rb +56 -0
  2068. data/spec/framework_spec/app/spec/core/regexp/eql_spec.rb +2 -2
  2069. data/spec/framework_spec/app/spec/core/regexp/equal_value_spec.rb +2 -2
  2070. data/spec/framework_spec/app/spec/core/regexp/escape_spec.rb +6 -2
  2071. data/spec/framework_spec/app/spec/core/regexp/fixed_encoding_spec.rb +36 -0
  2072. data/spec/framework_spec/app/spec/core/regexp/hash_spec.rb +1 -1
  2073. data/spec/framework_spec/app/spec/core/regexp/initialize_copy_spec.rb +1 -1
  2074. data/spec/framework_spec/app/spec/core/regexp/initialize_spec.rb +1 -1
  2075. data/spec/framework_spec/app/spec/core/regexp/inspect_spec.rb +9 -1
  2076. data/spec/framework_spec/app/spec/core/regexp/kcode_spec.rb +17 -16
  2077. data/spec/framework_spec/app/spec/core/regexp/last_match_spec.rb +4 -4
  2078. data/spec/framework_spec/app/spec/core/regexp/match_spec.rb +31 -3
  2079. data/spec/framework_spec/app/spec/core/regexp/named_captures_spec.rb +1 -0
  2080. data/spec/framework_spec/app/spec/core/regexp/names_spec.rb +1 -0
  2081. data/spec/framework_spec/app/spec/core/regexp/new_spec.rb +2 -2
  2082. data/spec/framework_spec/app/spec/core/regexp/options_spec.rb +3 -3
  2083. data/spec/framework_spec/app/spec/core/regexp/quote_spec.rb +3 -3
  2084. data/spec/framework_spec/app/spec/core/regexp/shared/match.rb +2 -2
  2085. data/spec/framework_spec/app/spec/core/regexp/shared/new.rb +65 -53
  2086. data/spec/framework_spec/app/spec/core/regexp/source_spec.rb +1 -1
  2087. data/spec/framework_spec/app/spec/core/regexp/to_s_spec.rb +1 -1
  2088. data/spec/framework_spec/app/spec/core/regexp/try_convert_spec.rb +21 -0
  2089. data/spec/framework_spec/app/spec/core/regexp/union_spec.rb +18 -2
  2090. data/spec/framework_spec/app/spec/core/regexp/versions/named_captures_1.9.rb +35 -0
  2091. data/spec/framework_spec/app/spec/core/regexp/versions/names_1.9.rb +29 -0
  2092. data/spec/framework_spec/app/spec/core/signal/list_spec.rb +1 -1
  2093. data/spec/framework_spec/app/spec/core/signal/trap_spec.rb +106 -1
  2094. data/spec/framework_spec/app/spec/core/string/allocate_spec.rb +2 -2
  2095. data/spec/framework_spec/app/spec/core/string/append_spec.rb +3 -3
  2096. data/spec/framework_spec/app/spec/core/string/ascii_only_spec.rb +44 -29
  2097. data/spec/framework_spec/app/spec/core/string/bytes_spec.rb +25 -18
  2098. data/spec/framework_spec/app/spec/core/string/bytesize_spec.rb +12 -12
  2099. data/spec/framework_spec/app/spec/core/string/capitalize_spec.rb +6 -6
  2100. data/spec/framework_spec/app/spec/core/string/case_compare_spec.rb +7 -0
  2101. data/spec/framework_spec/app/spec/core/string/casecmp_spec.rb +117 -64
  2102. data/spec/framework_spec/app/spec/core/string/center_spec.rb +24 -18
  2103. data/spec/framework_spec/app/spec/core/string/chars_spec.rb +7 -0
  2104. data/spec/framework_spec/app/spec/core/string/chomp_spec.rb +68 -39
  2105. data/spec/framework_spec/app/spec/core/string/chop_spec.rb +34 -56
  2106. data/spec/framework_spec/app/spec/core/string/chr_spec.rb +44 -0
  2107. data/spec/framework_spec/app/spec/core/string/clear_spec.rb +39 -0
  2108. data/spec/framework_spec/app/spec/core/string/codepoints_spec.rb +8 -0
  2109. data/spec/framework_spec/app/spec/core/string/comparison_spec.rb +6 -6
  2110. data/spec/framework_spec/app/spec/core/string/concat_spec.rb +3 -3
  2111. data/spec/framework_spec/app/spec/core/string/count_spec.rb +26 -11
  2112. data/spec/framework_spec/app/spec/core/string/crypt_spec.rb +35 -35
  2113. data/spec/framework_spec/app/spec/core/string/delete_spec.rb +25 -8
  2114. data/spec/framework_spec/app/spec/core/string/downcase_spec.rb +6 -6
  2115. data/spec/framework_spec/app/spec/core/string/dump_spec.rb +13 -4
  2116. data/spec/framework_spec/app/spec/core/string/each_byte_spec.rb +3 -3
  2117. data/spec/framework_spec/app/spec/core/string/each_char_spec.rb +3 -29
  2118. data/spec/framework_spec/app/spec/core/string/each_codepoint_spec.rb +8 -0
  2119. data/spec/framework_spec/app/spec/core/string/each_line_spec.rb +3 -3
  2120. data/spec/framework_spec/app/spec/core/string/each_spec.rb +3 -3
  2121. data/spec/framework_spec/app/spec/core/string/element_reference_spec.rb +9 -3
  2122. data/spec/framework_spec/app/spec/core/string/element_set_spec.rb +54 -10
  2123. data/spec/framework_spec/app/spec/core/string/empty_spec.rb +2 -2
  2124. data/spec/framework_spec/app/spec/core/string/encode_spec.rb +114 -0
  2125. data/spec/framework_spec/app/spec/core/string/encoding_spec.rb +181 -0
  2126. data/spec/framework_spec/app/spec/core/string/end_with_spec.rb +3 -3
  2127. data/spec/framework_spec/app/spec/core/string/entries_spec.rb +2 -2
  2128. data/spec/framework_spec/app/spec/core/string/eql_spec.rb +5 -5
  2129. data/spec/framework_spec/app/spec/core/string/equal_value_spec.rb +7 -3
  2130. data/spec/framework_spec/app/spec/core/string/fixtures/classes.rb +12 -9
  2131. data/spec/framework_spec/app/spec/core/string/fixtures/iso-8859-9-encoding.rb +9 -0
  2132. data/spec/framework_spec/app/spec/core/string/fixtures/utf-8-encoding.rb +7 -0
  2133. data/spec/framework_spec/app/spec/core/string/force_encoding_spec.rb +61 -0
  2134. data/spec/framework_spec/app/spec/core/string/getbyte_spec.rb +63 -0
  2135. data/spec/framework_spec/app/spec/core/string/gsub_spec.rb +228 -75
  2136. data/spec/framework_spec/app/spec/core/string/hash_spec.rb +2 -2
  2137. data/spec/framework_spec/app/spec/core/string/hex_spec.rb +23 -9
  2138. data/spec/framework_spec/app/spec/core/string/include_spec.rb +7 -7
  2139. data/spec/framework_spec/app/spec/core/string/index_spec.rb +46 -52
  2140. data/spec/framework_spec/app/spec/core/string/initialize_spec.rb +19 -21
  2141. data/spec/framework_spec/app/spec/core/string/insert_spec.rb +4 -4
  2142. data/spec/framework_spec/app/spec/core/string/inspect_spec.rb +661 -41
  2143. data/spec/framework_spec/app/spec/core/string/intern_spec.rb +4 -4
  2144. data/spec/framework_spec/app/spec/core/string/length_spec.rb +4 -4
  2145. data/spec/framework_spec/app/spec/core/string/lines_spec.rb +9 -0
  2146. data/spec/framework_spec/app/spec/core/string/ljust_spec.rb +18 -12
  2147. data/spec/framework_spec/app/spec/core/string/lstrip_spec.rb +23 -14
  2148. data/spec/framework_spec/app/spec/core/string/match_spec.rb +11 -11
  2149. data/spec/framework_spec/app/spec/core/string/modulo_spec.rb +103 -45
  2150. data/spec/framework_spec/app/spec/core/string/multiply_spec.rb +10 -10
  2151. data/spec/framework_spec/app/spec/core/string/new_spec.rb +3 -3
  2152. data/spec/framework_spec/app/spec/core/string/next_spec.rb +4 -4
  2153. data/spec/framework_spec/app/spec/core/string/oct_spec.rb +59 -16
  2154. data/spec/framework_spec/app/spec/core/string/ord_spec.rb +32 -0
  2155. data/spec/framework_spec/app/spec/core/string/partition_spec.rb +7 -3
  2156. data/spec/framework_spec/app/spec/core/string/plus_spec.rb +9 -9
  2157. data/spec/framework_spec/app/spec/core/string/replace_spec.rb +18 -13
  2158. data/spec/framework_spec/app/spec/core/string/reverse_spec.rb +16 -11
  2159. data/spec/framework_spec/app/spec/core/string/rindex_spec.rb +75 -69
  2160. data/spec/framework_spec/app/spec/core/string/rjust_spec.rb +18 -12
  2161. data/spec/framework_spec/app/spec/core/string/rpartition_spec.rb +8 -3
  2162. data/spec/framework_spec/app/spec/core/string/rstrip_spec.rb +52 -20
  2163. data/spec/framework_spec/app/spec/core/string/scan_spec.rb +48 -23
  2164. data/spec/framework_spec/app/spec/core/string/setbyte_spec.rb +55 -0
  2165. data/spec/framework_spec/app/spec/core/string/shared/chars.rb +70 -0
  2166. data/spec/framework_spec/app/spec/core/string/shared/codepoints.rb +66 -0
  2167. data/spec/framework_spec/app/spec/core/string/shared/concat.rb +9 -6
  2168. data/spec/framework_spec/app/spec/core/string/shared/each_line.rb +27 -6
  2169. data/spec/framework_spec/app/spec/core/string/shared/encode.rb +112 -0
  2170. data/spec/framework_spec/app/spec/core/string/shared/slice.rb +13 -11
  2171. data/spec/framework_spec/app/spec/core/string/shared/succ.rb +3 -3
  2172. data/spec/framework_spec/app/spec/core/string/shared/to_s.rb +1 -1
  2173. data/spec/framework_spec/app/spec/core/string/shared/to_sym.rb +32 -0
  2174. data/spec/framework_spec/app/spec/core/string/shared/versions/slice_1.9.rb +78 -0
  2175. data/spec/framework_spec/app/spec/core/string/size_spec.rb +4 -4
  2176. data/spec/framework_spec/app/spec/core/string/slice_spec.rb +54 -42
  2177. data/spec/framework_spec/app/spec/core/string/split_spec.rb +109 -60
  2178. data/spec/framework_spec/app/spec/core/string/squeeze_spec.rb +21 -7
  2179. data/spec/framework_spec/app/spec/core/string/start_with_spec.rb +4 -4
  2180. data/spec/framework_spec/app/spec/core/string/strip_spec.rb +49 -12
  2181. data/spec/framework_spec/app/spec/core/string/sub_spec.rb +91 -43
  2182. data/spec/framework_spec/app/spec/core/string/succ_spec.rb +4 -4
  2183. data/spec/framework_spec/app/spec/core/string/sum_spec.rb +7 -2
  2184. data/spec/framework_spec/app/spec/core/string/swapcase_spec.rb +5 -5
  2185. data/spec/framework_spec/app/spec/core/string/to_a_spec.rb +2 -2
  2186. data/spec/framework_spec/app/spec/core/string/to_c_spec.rb +101 -0
  2187. data/spec/framework_spec/app/spec/core/string/to_f_spec.rb +8 -16
  2188. data/spec/framework_spec/app/spec/core/string/to_i_spec.rb +38 -16
  2189. data/spec/framework_spec/app/spec/core/string/to_r_spec.rb +60 -0
  2190. data/spec/framework_spec/app/spec/core/string/to_s_spec.rb +4 -4
  2191. data/spec/framework_spec/app/spec/core/string/to_str_spec.rb +4 -4
  2192. data/spec/framework_spec/app/spec/core/string/to_sym_spec.rb +4 -4
  2193. data/spec/framework_spec/app/spec/core/string/tr_s_spec.rb +8 -8
  2194. data/spec/framework_spec/app/spec/core/string/tr_spec.rb +37 -5
  2195. data/spec/framework_spec/app/spec/core/string/try_convert_spec.rb +15 -17
  2196. data/spec/framework_spec/app/spec/core/string/unpack/a_spec.rb +51 -0
  2197. data/spec/framework_spec/app/spec/core/string/unpack/at_spec.rb +29 -0
  2198. data/spec/framework_spec/app/spec/core/string/unpack/b_spec.rb +184 -0
  2199. data/spec/framework_spec/app/spec/core/string/unpack/c_spec.rb +63 -0
  2200. data/spec/framework_spec/app/spec/core/string/unpack/comment_spec.rb +25 -0
  2201. data/spec/framework_spec/app/spec/core/string/unpack/d_spec.rb +28 -0
  2202. data/spec/framework_spec/app/spec/core/string/unpack/e_spec.rb +14 -0
  2203. data/spec/framework_spec/app/spec/core/string/unpack/f_spec.rb +28 -0
  2204. data/spec/framework_spec/app/spec/core/string/unpack/g_spec.rb +14 -0
  2205. data/spec/framework_spec/app/spec/core/string/unpack/h_spec.rb +124 -0
  2206. data/spec/framework_spec/app/spec/core/string/unpack/i_spec.rb +72 -0
  2207. data/spec/framework_spec/app/spec/core/string/unpack/l_spec.rb +216 -0
  2208. data/spec/framework_spec/app/spec/core/string/unpack/m_spec.rb +165 -0
  2209. data/spec/framework_spec/app/spec/core/string/unpack/n_spec.rb +18 -0
  2210. data/spec/framework_spec/app/spec/core/string/unpack/percent_spec.rb +7 -0
  2211. data/spec/framework_spec/app/spec/core/string/unpack/q_spec.rb +42 -0
  2212. data/spec/framework_spec/app/spec/core/string/unpack/s_spec.rb +72 -0
  2213. data/spec/framework_spec/app/spec/core/string/unpack/shared/basic.rb +25 -0
  2214. data/spec/framework_spec/app/spec/core/string/unpack/shared/float.rb +267 -0
  2215. data/spec/framework_spec/app/spec/core/string/unpack/shared/integer.rb +343 -0
  2216. data/spec/framework_spec/app/spec/core/string/unpack/shared/string.rb +51 -0
  2217. data/spec/framework_spec/app/spec/core/string/unpack/shared/unicode.rb +60 -0
  2218. data/spec/framework_spec/app/spec/core/string/unpack/u_spec.rb +78 -0
  2219. data/spec/framework_spec/app/spec/core/string/unpack/v_spec.rb +18 -0
  2220. data/spec/framework_spec/app/spec/core/string/unpack/w_spec.rb +25 -0
  2221. data/spec/framework_spec/app/spec/core/string/unpack/x_spec.rb +62 -0
  2222. data/spec/framework_spec/app/spec/core/string/unpack/z_spec.rb +21 -0
  2223. data/spec/framework_spec/app/spec/core/string/unpack_spec.rb +121 -32
  2224. data/spec/framework_spec/app/spec/core/string/upcase_spec.rb +5 -5
  2225. data/spec/framework_spec/app/spec/core/string/upto_spec.rb +21 -11
  2226. data/spec/framework_spec/app/spec/core/string/valid_encoding_spec.rb +122 -0
  2227. data/spec/framework_spec/app/spec/core/struct/each_pair_spec.rb +6 -6
  2228. data/spec/framework_spec/app/spec/core/struct/each_spec.rb +6 -6
  2229. data/spec/framework_spec/app/spec/core/struct/element_reference_spec.rb +7 -7
  2230. data/spec/framework_spec/app/spec/core/struct/element_set_spec.rb +4 -4
  2231. data/spec/framework_spec/app/spec/core/struct/eql_spec.rb +10 -4
  2232. data/spec/framework_spec/app/spec/core/struct/equal_value_spec.rb +3 -3
  2233. data/spec/framework_spec/app/spec/core/struct/fixtures/classes.rb +24 -8
  2234. data/spec/framework_spec/app/spec/core/struct/hash_spec.rb +24 -10
  2235. data/spec/framework_spec/app/spec/core/struct/initialize_copy_spec.rb +2 -2
  2236. data/spec/framework_spec/app/spec/core/struct/initialize_spec.rb +9 -5
  2237. data/spec/framework_spec/app/spec/core/struct/inspect_spec.rb +13 -6
  2238. data/spec/framework_spec/app/spec/core/struct/length_spec.rb +4 -4
  2239. data/spec/framework_spec/app/spec/core/struct/members_spec.rb +17 -7
  2240. data/spec/framework_spec/app/spec/core/struct/new_spec.rb +61 -32
  2241. data/spec/framework_spec/app/spec/core/struct/select_spec.rb +9 -9
  2242. data/spec/framework_spec/app/spec/core/struct/shared/equal_value.rb +20 -5
  2243. data/spec/framework_spec/app/spec/core/struct/shared/inspect.rb +13 -0
  2244. data/spec/framework_spec/app/spec/core/struct/size_spec.rb +3 -3
  2245. data/spec/framework_spec/app/spec/core/struct/struct_spec.rb +6 -6
  2246. data/spec/framework_spec/app/spec/core/struct/tms/cstime_spec.rb +9 -0
  2247. data/spec/framework_spec/app/spec/core/struct/tms/cutime_spec.rb +9 -0
  2248. data/spec/framework_spec/app/spec/core/struct/tms/element_reference_spec.rb +5 -0
  2249. data/spec/framework_spec/app/spec/core/struct/tms/members_spec.rb +5 -0
  2250. data/spec/framework_spec/app/spec/core/struct/tms/new_spec.rb +5 -0
  2251. data/spec/framework_spec/app/spec/core/struct/tms/stime_spec.rb +9 -0
  2252. data/spec/framework_spec/app/spec/core/struct/tms/utime_spec.rb +9 -0
  2253. data/spec/framework_spec/app/spec/core/struct/to_a_spec.rb +4 -4
  2254. data/spec/framework_spec/app/spec/core/struct/to_s_spec.rb +6 -3
  2255. data/spec/framework_spec/app/spec/core/struct/values_at_spec.rb +3 -3
  2256. data/spec/framework_spec/app/spec/core/struct/values_spec.rb +4 -4
  2257. data/spec/framework_spec/app/spec/core/symbol/all_symbols_spec.rb +7 -7
  2258. data/spec/framework_spec/app/spec/core/symbol/capitalize_spec.rb +44 -0
  2259. data/spec/framework_spec/app/spec/core/symbol/case_compare_spec.rb +2 -2
  2260. data/spec/framework_spec/app/spec/core/symbol/casecmp_spec.rb +65 -0
  2261. data/spec/framework_spec/app/spec/core/symbol/comparison_spec.rb +52 -0
  2262. data/spec/framework_spec/app/spec/core/symbol/downcase_spec.rb +26 -0
  2263. data/spec/framework_spec/app/spec/core/symbol/element_reference_spec.rb +7 -0
  2264. data/spec/framework_spec/app/spec/core/symbol/empty_spec.rb +14 -0
  2265. data/spec/framework_spec/app/spec/core/symbol/encoding_spec.rb +7 -0
  2266. data/spec/framework_spec/app/spec/core/symbol/equal_value_spec.rb +2 -2
  2267. data/spec/framework_spec/app/spec/core/symbol/id2name_spec.rb +2 -2
  2268. data/spec/framework_spec/app/spec/core/symbol/inspect_spec.rb +19 -7
  2269. data/spec/framework_spec/app/spec/core/symbol/intern_spec.rb +11 -0
  2270. data/spec/framework_spec/app/spec/core/symbol/length_spec.rb +7 -0
  2271. data/spec/framework_spec/app/spec/core/symbol/match_spec.rb +13 -0
  2272. data/spec/framework_spec/app/spec/core/symbol/next_spec.rb +7 -0
  2273. data/spec/framework_spec/app/spec/core/symbol/size_spec.rb +7 -0
  2274. data/spec/framework_spec/app/spec/core/symbol/slice_spec.rb +7 -0
  2275. data/spec/framework_spec/app/spec/core/symbol/succ_spec.rb +7 -0
  2276. data/spec/framework_spec/app/spec/core/symbol/swapcase_spec.rb +34 -0
  2277. data/spec/framework_spec/app/spec/core/symbol/to_i_spec.rb +2 -2
  2278. data/spec/framework_spec/app/spec/core/symbol/to_int_spec.rb +2 -2
  2279. data/spec/framework_spec/app/spec/core/symbol/to_proc_spec.rb +3 -3
  2280. data/spec/framework_spec/app/spec/core/symbol/to_s_spec.rb +2 -2
  2281. data/spec/framework_spec/app/spec/core/symbol/to_sym_spec.rb +1 -1
  2282. data/spec/framework_spec/app/spec/core/symbol/upcase_spec.rb +22 -0
  2283. data/spec/framework_spec/app/spec/core/systemexit/initialize_spec.rb +1 -1
  2284. data/spec/framework_spec/app/spec/core/thread/abort_on_exception_spec.rb +14 -2
  2285. data/spec/framework_spec/app/spec/core/thread/add_trace_func_spec.rb +7 -0
  2286. data/spec/framework_spec/app/spec/core/thread/alive_spec.rb +18 -4
  2287. data/spec/framework_spec/app/spec/core/thread/allocate_spec.rb +9 -0
  2288. data/spec/framework_spec/app/spec/core/thread/backtrace_spec.rb +7 -0
  2289. data/spec/framework_spec/app/spec/core/thread/critical_spec.rb +77 -75
  2290. data/spec/framework_spec/app/spec/core/thread/current_spec.rb +3 -3
  2291. data/spec/framework_spec/app/spec/core/thread/element_reference_spec.rb +14 -5
  2292. data/spec/framework_spec/app/spec/core/thread/element_set_spec.rb +14 -5
  2293. data/spec/framework_spec/app/spec/core/thread/exclusive_spec.rb +7 -0
  2294. data/spec/framework_spec/app/spec/core/thread/exit_spec.rb +15 -5
  2295. data/spec/framework_spec/app/spec/core/thread/fixtures/classes.rb +53 -40
  2296. data/spec/framework_spec/app/spec/core/thread/fork_spec.rb +9 -2
  2297. data/spec/framework_spec/app/spec/core/thread/group_spec.rb +5 -2
  2298. data/spec/framework_spec/app/spec/core/thread/initialize_spec.rb +2 -2
  2299. data/spec/framework_spec/app/spec/core/thread/inspect_spec.rb +8 -4
  2300. data/spec/framework_spec/app/spec/core/thread/join_spec.rb +17 -6
  2301. data/spec/framework_spec/app/spec/core/thread/key_spec.rb +16 -5
  2302. data/spec/framework_spec/app/spec/core/thread/keys_spec.rb +2 -2
  2303. data/spec/framework_spec/app/spec/core/thread/kill_spec.rb +11 -3
  2304. data/spec/framework_spec/app/spec/core/thread/list_spec.rb +7 -2
  2305. data/spec/framework_spec/app/spec/core/thread/main_spec.rb +2 -2
  2306. data/spec/framework_spec/app/spec/core/thread/new_spec.rb +40 -3
  2307. data/spec/framework_spec/app/spec/core/thread/pass_spec.rb +2 -2
  2308. data/spec/framework_spec/app/spec/core/thread/priority_spec.rb +9 -2
  2309. data/spec/framework_spec/app/spec/core/thread/raise_spec.rb +41 -27
  2310. data/spec/framework_spec/app/spec/core/thread/run_spec.rb +3 -3
  2311. data/spec/framework_spec/app/spec/core/thread/safe_level_spec.rb +6 -2
  2312. data/spec/framework_spec/app/spec/core/thread/set_trace_func_spec.rb +7 -0
  2313. data/spec/framework_spec/app/spec/core/thread/shared/exit.rb +38 -30
  2314. data/spec/framework_spec/app/spec/core/thread/shared/start.rb +51 -0
  2315. data/spec/framework_spec/app/spec/core/thread/shared/wakeup.rb +25 -13
  2316. data/spec/framework_spec/app/spec/core/thread/start_spec.rb +9 -2
  2317. data/spec/framework_spec/app/spec/core/thread/status_spec.rb +8 -4
  2318. data/spec/framework_spec/app/spec/core/thread/stop_spec.rb +12 -8
  2319. data/spec/framework_spec/app/spec/core/thread/terminate_spec.rb +7 -3
  2320. data/spec/framework_spec/app/spec/core/thread/value_spec.rb +21 -8
  2321. data/spec/framework_spec/app/spec/core/thread/wakeup_spec.rb +3 -3
  2322. data/spec/framework_spec/app/spec/core/threadgroup/add_spec.rb +36 -37
  2323. data/spec/framework_spec/app/spec/core/threadgroup/enclose_spec.rb +5 -1
  2324. data/spec/framework_spec/app/spec/core/threadgroup/enclosed_spec.rb +5 -1
  2325. data/spec/framework_spec/app/spec/core/threadgroup/list_spec.rb +24 -25
  2326. data/spec/framework_spec/app/spec/core/time/_dump_spec.rb +13 -2
  2327. data/spec/framework_spec/app/spec/core/time/_load_spec.rb +24 -2
  2328. data/spec/framework_spec/app/spec/core/time/asctime_spec.rb +3 -3
  2329. data/spec/framework_spec/app/spec/core/time/at_spec.rb +34 -14
  2330. data/spec/framework_spec/app/spec/core/time/comparison_spec.rb +4 -4
  2331. data/spec/framework_spec/app/spec/core/time/ctime_spec.rb +3 -3
  2332. data/spec/framework_spec/app/spec/core/time/day_spec.rb +3 -3
  2333. data/spec/framework_spec/app/spec/core/time/dst_spec.rb +3 -3
  2334. data/spec/framework_spec/app/spec/core/time/dup_spec.rb +10 -2
  2335. data/spec/framework_spec/app/spec/core/time/eql_spec.rb +9 -3
  2336. data/spec/framework_spec/app/spec/core/time/fixtures/classes.rb +5 -0
  2337. data/spec/framework_spec/app/spec/core/time/fixtures/methods.rb +1 -29
  2338. data/spec/framework_spec/app/spec/core/time/friday_spec.rb +7 -0
  2339. data/spec/framework_spec/app/spec/core/time/getgm_spec.rb +3 -3
  2340. data/spec/framework_spec/app/spec/core/time/getlocal_spec.rb +2 -2
  2341. data/spec/framework_spec/app/spec/core/time/getutc_spec.rb +3 -3
  2342. data/spec/framework_spec/app/spec/core/time/gm_spec.rb +4 -4
  2343. data/spec/framework_spec/app/spec/core/time/gmt_offset_spec.rb +3 -3
  2344. data/spec/framework_spec/app/spec/core/time/gmt_spec.rb +2 -2
  2345. data/spec/framework_spec/app/spec/core/time/gmtime_spec.rb +3 -3
  2346. data/spec/framework_spec/app/spec/core/time/gmtoff_spec.rb +3 -3
  2347. data/spec/framework_spec/app/spec/core/time/hash_spec.rb +5 -5
  2348. data/spec/framework_spec/app/spec/core/time/hour_spec.rb +2 -2
  2349. data/spec/framework_spec/app/spec/core/time/initialize_copy_spec.rb +2 -2
  2350. data/spec/framework_spec/app/spec/core/time/initialize_spec.rb +3 -3
  2351. data/spec/framework_spec/app/spec/core/time/inspect_spec.rb +11 -2
  2352. data/spec/framework_spec/app/spec/core/time/isdst_spec.rb +4 -4
  2353. data/spec/framework_spec/app/spec/core/time/local_spec.rb +4 -4
  2354. data/spec/framework_spec/app/spec/core/time/localtime_spec.rb +2 -2
  2355. data/spec/framework_spec/app/spec/core/time/mday_spec.rb +3 -3
  2356. data/spec/framework_spec/app/spec/core/time/min_spec.rb +2 -2
  2357. data/spec/framework_spec/app/spec/core/time/minus_spec.rb +53 -33
  2358. data/spec/framework_spec/app/spec/core/time/mktime_spec.rb +4 -4
  2359. data/spec/framework_spec/app/spec/core/time/mon_spec.rb +3 -3
  2360. data/spec/framework_spec/app/spec/core/time/monday_spec.rb +7 -0
  2361. data/spec/framework_spec/app/spec/core/time/month_spec.rb +3 -3
  2362. data/spec/framework_spec/app/spec/core/time/now_spec.rb +3 -3
  2363. data/spec/framework_spec/app/spec/core/time/nsec_spec.rb +7 -0
  2364. data/spec/framework_spec/app/spec/core/time/plus_spec.rb +64 -19
  2365. data/spec/framework_spec/app/spec/core/time/round_spec.rb +7 -0
  2366. data/spec/framework_spec/app/spec/core/time/saturday_spec.rb +7 -0
  2367. data/spec/framework_spec/app/spec/core/time/sec_spec.rb +2 -2
  2368. data/spec/framework_spec/app/spec/core/time/shared/gmt_offset.rb +23 -0
  2369. data/spec/framework_spec/app/spec/core/time/shared/inspect.rb +25 -0
  2370. data/spec/framework_spec/app/spec/core/time/shared/isdst.rb +1 -1
  2371. data/spec/framework_spec/app/spec/core/time/shared/local.rb +8 -0
  2372. data/spec/framework_spec/app/spec/core/time/shared/now.rb +12 -4
  2373. data/spec/framework_spec/app/spec/core/time/shared/time_params.rb +134 -35
  2374. data/spec/framework_spec/app/spec/core/time/strftime_spec.rb +141 -2
  2375. data/spec/framework_spec/app/spec/core/time/subsec_spec.rb +7 -0
  2376. data/spec/framework_spec/app/spec/core/time/succ_spec.rb +3 -3
  2377. data/spec/framework_spec/app/spec/core/time/sunday_spec.rb +7 -0
  2378. data/spec/framework_spec/app/spec/core/time/thursday_spec.rb +7 -0
  2379. data/spec/framework_spec/app/spec/core/time/times_spec.rb +2 -2
  2380. data/spec/framework_spec/app/spec/core/time/to_a_spec.rb +4 -3
  2381. data/spec/framework_spec/app/spec/core/time/to_f_spec.rb +2 -2
  2382. data/spec/framework_spec/app/spec/core/time/to_i_spec.rb +3 -3
  2383. data/spec/framework_spec/app/spec/core/time/to_r_spec.rb +13 -0
  2384. data/spec/framework_spec/app/spec/core/time/to_s_spec.rb +11 -2
  2385. data/spec/framework_spec/app/spec/core/time/tuesday_spec.rb +7 -0
  2386. data/spec/framework_spec/app/spec/core/time/tv_nsec_spec.rb +7 -0
  2387. data/spec/framework_spec/app/spec/core/time/tv_sec_spec.rb +3 -3
  2388. data/spec/framework_spec/app/spec/core/time/tv_usec_spec.rb +6 -2
  2389. data/spec/framework_spec/app/spec/core/time/usec_spec.rb +8 -2
  2390. data/spec/framework_spec/app/spec/core/time/utc_offset_spec.rb +3 -3
  2391. data/spec/framework_spec/app/spec/core/time/utc_spec.rb +7 -7
  2392. data/spec/framework_spec/app/spec/core/time/wday_spec.rb +2 -2
  2393. data/spec/framework_spec/app/spec/core/time/wednesday_spec.rb +7 -0
  2394. data/spec/framework_spec/app/spec/core/time/yday_spec.rb +2 -2
  2395. data/spec/framework_spec/app/spec/core/time/year_spec.rb +3 -3
  2396. data/spec/framework_spec/app/spec/core/time/zone_spec.rb +4 -3
  2397. data/spec/framework_spec/app/spec/core/true/and_spec.rb +1 -1
  2398. data/spec/framework_spec/app/spec/core/true/inspect_spec.rb +1 -1
  2399. data/spec/framework_spec/app/spec/core/true/or_spec.rb +1 -1
  2400. data/spec/framework_spec/app/spec/core/true/to_s_spec.rb +1 -1
  2401. data/spec/framework_spec/app/spec/core/true/xor_spec.rb +1 -1
  2402. data/spec/framework_spec/app/spec/core/unboundmethod/arity_spec.rb +2 -2
  2403. data/spec/framework_spec/app/spec/core/unboundmethod/bind_spec.rb +26 -6
  2404. data/spec/framework_spec/app/spec/core/unboundmethod/clone_spec.rb +2 -2
  2405. data/spec/framework_spec/app/spec/core/unboundmethod/eql_spec.rb +7 -0
  2406. data/spec/framework_spec/app/spec/core/unboundmethod/equal_value_spec.rb +4 -4
  2407. data/spec/framework_spec/app/spec/core/unboundmethod/fixtures/classes.rb +4 -1
  2408. data/spec/framework_spec/app/spec/core/unboundmethod/hash_spec.rb +7 -0
  2409. data/spec/framework_spec/app/spec/core/unboundmethod/inspect_spec.rb +3 -3
  2410. data/spec/framework_spec/app/spec/core/unboundmethod/name_spec.rb +19 -5
  2411. data/spec/framework_spec/app/spec/core/unboundmethod/owner_spec.rb +4 -4
  2412. data/spec/framework_spec/app/spec/core/unboundmethod/parameters_spec.rb +7 -0
  2413. data/spec/framework_spec/app/spec/core/unboundmethod/shared/to_s.rb +4 -4
  2414. data/spec/framework_spec/app/spec/core/unboundmethod/source_location_spec.rb +31 -0
  2415. data/spec/framework_spec/app/spec/core/unboundmethod/to_s_spec.rb +3 -3
  2416. data/spec/framework_spec/app/spec/fixtures/class.rb +39 -16
  2417. data/spec/framework_spec/app/spec/fixtures/class_variables.rb +7 -7
  2418. data/spec/framework_spec/app/spec/fixtures/code/file_fixture.rb +1 -0
  2419. data/spec/framework_spec/app/spec/fixtures/code/line_fixture.rb +5 -0
  2420. data/spec/framework_spec/app/spec/fixtures/code/load_ext_fixture.rb +1 -0
  2421. data/spec/framework_spec/app/spec/fixtures/code/load_fixture +1 -0
  2422. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.bundle +1 -0
  2423. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.dll +1 -0
  2424. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.dylib +1 -0
  2425. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext +1 -0
  2426. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.bundle +1 -0
  2427. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.dll +1 -0
  2428. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.dylib +1 -0
  2429. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.rb +1 -0
  2430. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.ext.so +1 -0
  2431. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.rb +1 -0
  2432. data/spec/framework_spec/app/spec/fixtures/code/load_fixture.so +1 -0
  2433. data/spec/framework_spec/app/spec/fixtures/code/methods_fixture.rb +364 -0
  2434. data/spec/framework_spec/app/spec/fixtures/code/raise_fixture.rb +1 -0
  2435. data/spec/framework_spec/app/spec/fixtures/code/recursive_load_fixture.rb +5 -0
  2436. data/spec/framework_spec/app/spec/fixtures/code/recursive_require_fixture.rb +3 -0
  2437. data/spec/framework_spec/app/spec/fixtures/code/wrap_fixture.rb +3 -0
  2438. data/spec/framework_spec/app/spec/fixtures/code_loading.rb +30 -0
  2439. data/spec/framework_spec/app/spec/fixtures/enumerator/classes.rb +15 -0
  2440. data/spec/framework_spec/app/spec/fixtures/kernel/callcc.rb +17 -0
  2441. data/spec/framework_spec/app/spec/fixtures/kernel/classes.rb +56 -0
  2442. data/spec/framework_spec/app/spec/fixtures/math/common.rb +3 -0
  2443. data/spec/framework_spec/app/spec/fixtures/reflection.rb +352 -0
  2444. data/spec/framework_spec/app/spec/language/BEGIN_spec.rb +57 -0
  2445. data/spec/framework_spec/app/spec/language/README +1 -1
  2446. data/spec/framework_spec/app/spec/language/alias_spec.rb +33 -20
  2447. data/spec/framework_spec/app/spec/language/and_spec.rb +8 -8
  2448. data/spec/framework_spec/app/spec/language/array_spec.rb +5 -5
  2449. data/spec/framework_spec/app/spec/language/block_spec.rb +408 -27
  2450. data/spec/framework_spec/app/spec/language/break_spec.rb +210 -280
  2451. data/spec/framework_spec/app/spec/language/case_spec.rb +37 -38
  2452. data/spec/framework_spec/app/spec/language/class_spec.rb +52 -70
  2453. data/spec/framework_spec/app/spec/language/class_variable_spec.rb +6 -6
  2454. data/spec/framework_spec/app/spec/language/{constants_spec_dontrun.rb → constants_spec.rb} +14 -0
  2455. data/spec/framework_spec/app/spec/language/def_spec.rb +83 -68
  2456. data/spec/framework_spec/app/spec/language/defined_spec.rb +1181 -142
  2457. data/spec/framework_spec/app/spec/language/encoding_spec.rb +19 -20
  2458. data/spec/framework_spec/app/spec/language/ensure_spec.rb +32 -37
  2459. data/spec/framework_spec/app/spec/language/execution_spec.rb +9 -11
  2460. data/spec/framework_spec/app/spec/language/file_spec.rb +21 -39
  2461. data/spec/framework_spec/app/spec/language/fixtures/block.rb +26 -15
  2462. data/spec/framework_spec/app/spec/language/fixtures/break.rb +240 -0
  2463. data/spec/framework_spec/app/spec/language/fixtures/break_lambda_toplevel.rb +9 -0
  2464. data/spec/framework_spec/app/spec/language/fixtures/break_lambda_toplevel_block.rb +23 -0
  2465. data/spec/framework_spec/app/spec/language/fixtures/break_lambda_toplevel_method.rb +17 -0
  2466. data/spec/framework_spec/app/spec/language/fixtures/classes.rb +8 -8
  2467. data/spec/framework_spec/app/spec/language/fixtures/defined.rb +270 -0
  2468. data/spec/framework_spec/app/spec/language/fixtures/ensure.rb +6 -6
  2469. data/spec/framework_spec/app/spec/language/fixtures/file.rb +1 -1
  2470. data/spec/framework_spec/app/spec/language/fixtures/literal_lambda.rb +7 -0
  2471. data/spec/framework_spec/app/spec/language/fixtures/next.rb +128 -0
  2472. data/spec/framework_spec/app/spec/language/fixtures/private.rb +3 -3
  2473. data/spec/framework_spec/app/spec/language/fixtures/return.rb +44 -0
  2474. data/spec/framework_spec/app/spec/language/fixtures/rubyopt.rb +1 -0
  2475. data/spec/framework_spec/app/spec/language/fixtures/send.rb +110 -0
  2476. data/spec/framework_spec/app/spec/language/fixtures/send_1.9.rb +20 -0
  2477. data/spec/framework_spec/app/spec/language/fixtures/super.rb +38 -7
  2478. data/spec/framework_spec/app/spec/language/fixtures/variables.rb +1 -1
  2479. data/spec/framework_spec/app/spec/language/fixtures/yield.rb +20 -2
  2480. data/spec/framework_spec/app/spec/language/for_spec.rb +63 -39
  2481. data/spec/framework_spec/app/spec/language/hash_spec.rb +26 -1
  2482. data/spec/framework_spec/app/spec/language/if_spec.rb +32 -2
  2483. data/spec/framework_spec/app/spec/language/line_spec.rb +42 -17
  2484. data/spec/framework_spec/app/spec/language/literal_lambda_spec.rb +1 -0
  2485. data/spec/framework_spec/app/spec/language/loop_spec.rb +7 -8
  2486. data/spec/framework_spec/app/spec/language/magic_comment_spec.rb +60 -61
  2487. data/spec/framework_spec/app/spec/language/metaclass_spec.rb +21 -24
  2488. data/spec/framework_spec/app/spec/language/module_spec.rb +46 -1
  2489. data/spec/framework_spec/app/spec/language/next_spec.rb +241 -7
  2490. data/spec/framework_spec/app/spec/language/not_spec.rb +22 -2
  2491. data/spec/framework_spec/app/spec/language/numbers_spec.rb +5 -6
  2492. data/spec/framework_spec/app/spec/language/or_spec.rb +33 -7
  2493. data/spec/framework_spec/app/spec/language/order_spec.rb +3 -3
  2494. data/spec/framework_spec/app/spec/language/precedence_spec.rb +31 -33
  2495. data/spec/framework_spec/app/spec/language/predefined/data_spec.rb +45 -0
  2496. data/spec/framework_spec/app/spec/language/{fixtures/predefined.rb → predefined/fixtures/data1.rb} +2 -0
  2497. data/spec/framework_spec/app/spec/language/predefined/fixtures/data2.rb +4 -0
  2498. data/spec/framework_spec/app/spec/language/predefined/fixtures/data3.rb +7 -0
  2499. data/spec/framework_spec/app/spec/language/predefined/fixtures/data4.rb +4 -0
  2500. data/spec/framework_spec/app/spec/{core/io/data/fixtures/data2.rb → language/predefined/fixtures/data_flock.rb} +1 -1
  2501. data/spec/framework_spec/app/spec/language/predefined/fixtures/data_only.rb +2 -0
  2502. data/spec/framework_spec/app/spec/language/predefined/fixtures/print_data.rb +3 -0
  2503. data/spec/framework_spec/app/spec/language/predefined_spec.rb +599 -283
  2504. data/spec/framework_spec/app/spec/language/private_spec.rb +4 -4
  2505. data/spec/framework_spec/app/spec/language/proc_spec.rb +238 -0
  2506. data/spec/framework_spec/app/spec/language/redo_spec.rb +2 -2
  2507. data/spec/framework_spec/app/spec/language/regexp/anchors_spec.rb +163 -0
  2508. data/spec/framework_spec/app/spec/language/regexp/back-references_spec.rb +50 -0
  2509. data/spec/framework_spec/app/spec/language/regexp/character_classes_spec.rb +96 -0
  2510. data/spec/framework_spec/app/spec/language/regexp/encoding_spec.rb +129 -0
  2511. data/spec/framework_spec/app/spec/language/regexp/escapes_spec.rb +80 -0
  2512. data/spec/framework_spec/app/spec/language/regexp/grouping_spec.rb +23 -0
  2513. data/spec/framework_spec/app/spec/language/regexp/interpolation_spec.rb +55 -0
  2514. data/spec/framework_spec/app/spec/language/regexp/modifiers_spec.rb +132 -0
  2515. data/spec/framework_spec/app/spec/language/regexp/repetition_spec.rb +47 -0
  2516. data/spec/framework_spec/app/spec/language/regexp/versions/character_classes_1.9.rb +499 -0
  2517. data/spec/framework_spec/app/spec/language/regexp_spec.rb +42 -677
  2518. data/spec/framework_spec/app/spec/language/rescue_spec.rb +57 -8
  2519. data/spec/framework_spec/app/spec/language/retry_spec.rb +4 -4
  2520. data/spec/framework_spec/app/spec/language/return_spec.rb +11 -2
  2521. data/spec/framework_spec/app/spec/language/send_spec.rb +227 -0
  2522. data/spec/framework_spec/app/spec/language/shared/__FILE__.rb +37 -0
  2523. data/spec/framework_spec/app/spec/language/shared/__LINE__.rb +17 -0
  2524. data/spec/framework_spec/app/spec/language/singleton_class_spec.rb +299 -0
  2525. data/spec/framework_spec/app/spec/language/splat_spec.rb +188 -0
  2526. data/spec/framework_spec/app/spec/language/string_spec.rb +42 -7
  2527. data/spec/framework_spec/app/spec/language/super_spec.rb +11 -5
  2528. data/spec/framework_spec/app/spec/language/symbol_spec.rb +18 -11
  2529. data/spec/framework_spec/app/spec/language/throw_spec.rb +3 -3
  2530. data/spec/framework_spec/app/spec/language/undef_spec.rb +1 -1
  2531. data/spec/framework_spec/app/spec/language/unless_spec.rb +8 -8
  2532. data/spec/framework_spec/app/spec/language/until_spec.rb +27 -27
  2533. data/spec/framework_spec/app/spec/language/variables_spec.rb +57 -61
  2534. data/spec/framework_spec/app/spec/language/versions/array_1.9.rb +8 -0
  2535. data/spec/framework_spec/app/spec/language/versions/block_1.9.rb +80 -17
  2536. data/spec/framework_spec/app/spec/language/versions/case_1.9.rb +5 -5
  2537. data/spec/framework_spec/app/spec/language/versions/hash_1.9.rb +19 -0
  2538. data/spec/framework_spec/app/spec/language/versions/literal_lambda_1.9.rb +143 -0
  2539. data/spec/framework_spec/app/spec/language/versions/not_1.9.rb +22 -0
  2540. data/spec/framework_spec/app/spec/language/versions/regexp_1.9.rb +3 -3
  2541. data/spec/framework_spec/app/spec/language/versions/send_1.9.rb +196 -0
  2542. data/spec/framework_spec/app/spec/language/versions/symbol_1.9.rb +10 -2
  2543. data/spec/framework_spec/app/spec/language/versions/variables_1.9.rb +8 -0
  2544. data/spec/framework_spec/app/spec/language/while_spec.rb +24 -24
  2545. data/spec/framework_spec/app/spec/language/yield_spec.rb +105 -84
  2546. data/spec/framework_spec/app/spec/library/base64/b64encode_spec.rb +36 -0
  2547. data/spec/framework_spec/app/spec/library/base64/decode64_spec.rb +9 -0
  2548. data/spec/framework_spec/app/spec/library/base64/decode_b_spec.rb +19 -0
  2549. data/spec/framework_spec/app/spec/library/base64/encode64_spec.rb +14 -0
  2550. data/spec/framework_spec/app/spec/library/digest/hexencode_spec.rb +31 -0
  2551. data/spec/framework_spec/app/spec/library/digest/md5/append_spec.rb +3 -3
  2552. data/spec/framework_spec/app/spec/library/digest/md5/block_length_spec.rb +2 -2
  2553. data/spec/framework_spec/app/spec/library/digest/md5/digest_bang_spec.rb +2 -2
  2554. data/spec/framework_spec/app/spec/library/digest/md5/digest_length_spec.rb +2 -2
  2555. data/spec/framework_spec/app/spec/library/digest/md5/digest_spec.rb +2 -2
  2556. data/spec/framework_spec/app/spec/library/digest/md5/equal_spec.rb +2 -2
  2557. data/spec/framework_spec/app/spec/library/digest/md5/file_spec.rb +48 -0
  2558. data/spec/framework_spec/app/spec/library/digest/md5/hexdigest_bang_spec.rb +2 -2
  2559. data/spec/framework_spec/app/spec/library/digest/md5/hexdigest_spec.rb +2 -2
  2560. data/spec/framework_spec/app/spec/library/digest/md5/inspect_spec.rb +2 -2
  2561. data/spec/framework_spec/app/spec/library/digest/md5/length_spec.rb +3 -3
  2562. data/spec/framework_spec/app/spec/library/digest/md5/reset_spec.rb +2 -2
  2563. data/spec/framework_spec/app/spec/library/digest/md5/shared/constants.rb +1 -1
  2564. data/spec/framework_spec/app/spec/library/digest/md5/shared/sample.rb +1 -1
  2565. data/spec/framework_spec/app/spec/library/digest/md5/size_spec.rb +3 -3
  2566. data/spec/framework_spec/app/spec/library/digest/md5/to_s_spec.rb +2 -2
  2567. data/spec/framework_spec/app/spec/library/digest/md5/update_spec.rb +3 -3
  2568. data/spec/framework_spec/app/spec/library/digest/sha1/digest_spec.rb +2 -2
  2569. data/spec/framework_spec/app/spec/library/digest/sha1/file_spec.rb +43 -0
  2570. data/spec/framework_spec/app/spec/library/digest/sha1/shared/constants.rb +1 -1
  2571. data/spec/framework_spec/app/spec/library/set/add_spec.rb +27 -0
  2572. data/spec/framework_spec/app/spec/library/set/append_spec.rb +7 -0
  2573. data/spec/framework_spec/app/spec/library/set/classify_spec.rb +35 -0
  2574. data/spec/framework_spec/app/spec/library/set/clear_spec.rb +17 -0
  2575. data/spec/framework_spec/app/spec/library/set/collect_spec.rb +7 -0
  2576. data/spec/framework_spec/app/spec/library/set/constructor_spec.rb +15 -0
  2577. data/spec/framework_spec/app/spec/library/set/delete_if_spec.rb +46 -0
  2578. data/spec/framework_spec/app/spec/library/set/delete_spec.rb +37 -0
  2579. data/spec/framework_spec/app/spec/library/set/difference_spec.rb +7 -0
  2580. data/spec/framework_spec/app/spec/library/set/divide_spec.rb +34 -0
  2581. data/spec/framework_spec/app/spec/library/set/each_spec.rb +34 -0
  2582. data/spec/framework_spec/app/spec/library/set/empty_spec.rb +10 -0
  2583. data/spec/framework_spec/app/spec/library/set/enumerable/to_set_spec.rb +19 -0
  2584. data/spec/framework_spec/app/spec/library/set/eql_spec.rb +17 -0
  2585. data/spec/framework_spec/app/spec/library/set/equal_value_spec.rb +38 -0
  2586. data/spec/framework_spec/app/spec/library/set/exclusion_spec.rb +18 -0
  2587. data/spec/framework_spec/app/spec/library/set/flatten_merge_spec.rb +23 -0
  2588. data/spec/framework_spec/app/spec/library/set/flatten_spec.rb +40 -0
  2589. data/spec/framework_spec/app/spec/library/set/hash_spec.rb +15 -0
  2590. data/spec/framework_spec/app/spec/library/set/include_spec.rb +7 -0
  2591. data/spec/framework_spec/app/spec/library/set/initialize_copy_spec.rb +18 -0
  2592. data/spec/framework_spec/app/spec/library/set/initialize_spec.rb +24 -0
  2593. data/spec/framework_spec/app/spec/library/set/inspect_spec.rb +18 -0
  2594. data/spec/framework_spec/app/spec/library/set/intersection_spec.rb +11 -0
  2595. data/spec/framework_spec/app/spec/library/set/keep_if_spec.rb +41 -0
  2596. data/spec/framework_spec/app/spec/library/set/length_spec.rb +7 -0
  2597. data/spec/framework_spec/app/spec/library/set/map_spec.rb +7 -0
  2598. data/spec/framework_spec/app/spec/library/set/member_spec.rb +7 -0
  2599. data/spec/framework_spec/app/spec/library/set/merge_spec.rb +19 -0
  2600. data/spec/framework_spec/app/spec/library/set/minus_spec.rb +7 -0
  2601. data/spec/framework_spec/app/spec/library/set/plus_spec.rb +7 -0
  2602. data/spec/framework_spec/app/spec/library/set/pretty_print_cycle_spec.rb +10 -0
  2603. data/spec/framework_spec/app/spec/library/set/pretty_print_spec.rb +17 -0
  2604. data/spec/framework_spec/app/spec/library/set/proper_subset_spec.rb +34 -0
  2605. data/spec/framework_spec/app/spec/library/set/proper_superset_spec.rb +34 -0
  2606. data/spec/framework_spec/app/spec/library/set/reject_spec.rb +50 -0
  2607. data/spec/framework_spec/app/spec/library/set/replace_spec.rb +17 -0
  2608. data/spec/framework_spec/app/spec/library/set/select_spec.rb +45 -0
  2609. data/spec/framework_spec/app/spec/library/set/shared/add.rb +14 -0
  2610. data/spec/framework_spec/app/spec/library/set/shared/collect.rb +20 -0
  2611. data/spec/framework_spec/app/spec/library/set/shared/difference.rb +15 -0
  2612. data/spec/framework_spec/app/spec/library/set/shared/include.rb +7 -0
  2613. data/spec/framework_spec/app/spec/library/set/shared/intersection.rb +15 -0
  2614. data/spec/framework_spec/app/spec/library/set/shared/length.rb +6 -0
  2615. data/spec/framework_spec/app/spec/library/set/shared/union.rb +15 -0
  2616. data/spec/framework_spec/app/spec/library/set/size_spec.rb +7 -0
  2617. data/spec/framework_spec/app/spec/library/set/sortedset/add_spec.rb +36 -0
  2618. data/spec/framework_spec/app/spec/library/set/sortedset/append_spec.rb +7 -0
  2619. data/spec/framework_spec/app/spec/library/set/sortedset/classify_spec.rb +35 -0
  2620. data/spec/framework_spec/app/spec/library/set/sortedset/clear_spec.rb +17 -0
  2621. data/spec/framework_spec/app/spec/library/set/sortedset/collect_spec.rb +7 -0
  2622. data/spec/framework_spec/app/spec/library/set/sortedset/constructor_spec.rb +15 -0
  2623. data/spec/framework_spec/app/spec/library/set/sortedset/delete_if_spec.rb +48 -0
  2624. data/spec/framework_spec/app/spec/library/set/sortedset/delete_spec.rb +37 -0
  2625. data/spec/framework_spec/app/spec/library/set/sortedset/difference_spec.rb +7 -0
  2626. data/spec/framework_spec/app/spec/library/set/sortedset/divide_spec.rb +34 -0
  2627. data/spec/framework_spec/app/spec/library/set/sortedset/each_spec.rb +36 -0
  2628. data/spec/framework_spec/app/spec/library/set/sortedset/empty_spec.rb +10 -0
  2629. data/spec/framework_spec/app/spec/library/set/sortedset/eql_spec.rb +18 -0
  2630. data/spec/framework_spec/app/spec/library/set/sortedset/equal_value_spec.rb +13 -0
  2631. data/spec/framework_spec/app/spec/library/set/sortedset/exclusion_spec.rb +18 -0
  2632. data/spec/framework_spec/app/spec/library/set/sortedset/flatten_merge_spec.rb +8 -0
  2633. data/spec/framework_spec/app/spec/library/set/sortedset/flatten_spec.rb +48 -0
  2634. data/spec/framework_spec/app/spec/library/set/sortedset/hash_spec.rb +15 -0
  2635. data/spec/framework_spec/app/spec/library/set/sortedset/include_spec.rb +7 -0
  2636. data/spec/framework_spec/app/spec/library/set/sortedset/initialize_copy_spec.rb +18 -0
  2637. data/spec/framework_spec/app/spec/library/set/sortedset/initialize_spec.rb +32 -0
  2638. data/spec/framework_spec/app/spec/library/set/sortedset/inspect_spec.rb +10 -0
  2639. data/spec/framework_spec/app/spec/library/set/sortedset/intersection_spec.rb +11 -0
  2640. data/spec/framework_spec/app/spec/library/set/sortedset/keep_if_spec.rb +34 -0
  2641. data/spec/framework_spec/app/spec/library/set/sortedset/length_spec.rb +7 -0
  2642. data/spec/framework_spec/app/spec/library/set/sortedset/map_spec.rb +7 -0
  2643. data/spec/framework_spec/app/spec/library/set/sortedset/member_spec.rb +7 -0
  2644. data/spec/framework_spec/app/spec/library/set/sortedset/merge_spec.rb +19 -0
  2645. data/spec/framework_spec/app/spec/library/set/sortedset/minus_spec.rb +7 -0
  2646. data/spec/framework_spec/app/spec/library/set/sortedset/plus_spec.rb +7 -0
  2647. data/spec/framework_spec/app/spec/library/set/sortedset/pretty_print_cycle_spec.rb +10 -0
  2648. data/spec/framework_spec/app/spec/library/set/sortedset/pretty_print_spec.rb +17 -0
  2649. data/spec/framework_spec/app/spec/library/set/sortedset/proper_subset_spec.rb +33 -0
  2650. data/spec/framework_spec/app/spec/library/set/sortedset/proper_superset_spec.rb +33 -0
  2651. data/spec/framework_spec/app/spec/library/set/sortedset/reject_spec.rb +52 -0
  2652. data/spec/framework_spec/app/spec/library/set/sortedset/replace_spec.rb +17 -0
  2653. data/spec/framework_spec/app/spec/library/set/sortedset/select_spec.rb +38 -0
  2654. data/spec/framework_spec/app/spec/library/set/sortedset/shared/add.rb +14 -0
  2655. data/spec/framework_spec/app/spec/library/set/sortedset/shared/collect.rb +20 -0
  2656. data/spec/framework_spec/app/spec/library/set/sortedset/shared/difference.rb +15 -0
  2657. data/spec/framework_spec/app/spec/library/set/sortedset/shared/include.rb +7 -0
  2658. data/spec/framework_spec/app/spec/library/set/sortedset/shared/intersection.rb +15 -0
  2659. data/spec/framework_spec/app/spec/library/set/sortedset/shared/length.rb +6 -0
  2660. data/spec/framework_spec/app/spec/library/set/sortedset/shared/union.rb +15 -0
  2661. data/spec/framework_spec/app/spec/library/set/sortedset/size_spec.rb +7 -0
  2662. data/spec/framework_spec/app/spec/library/set/sortedset/subset_spec.rb +33 -0
  2663. data/spec/framework_spec/app/spec/library/set/sortedset/subtract_spec.rb +17 -0
  2664. data/spec/framework_spec/app/spec/library/set/sortedset/superset_spec.rb +33 -0
  2665. data/spec/framework_spec/app/spec/library/set/sortedset/to_a_spec.rb +8 -0
  2666. data/spec/framework_spec/app/spec/library/set/sortedset/union_spec.rb +11 -0
  2667. data/spec/framework_spec/app/spec/library/set/subset_spec.rb +34 -0
  2668. data/spec/framework_spec/app/spec/library/set/subtract_spec.rb +17 -0
  2669. data/spec/framework_spec/app/spec/library/set/superset_spec.rb +34 -0
  2670. data/spec/framework_spec/app/spec/library/set/to_a_spec.rb +8 -0
  2671. data/spec/framework_spec/app/spec/library/set/union_spec.rb +11 -0
  2672. data/spec/framework_spec/app/spec/library/stringio/append_spec.rb +84 -0
  2673. data/spec/framework_spec/app/spec/library/stringio/binmode_spec.rb +9 -0
  2674. data/spec/framework_spec/app/spec/library/stringio/bytes_spec.rb +13 -0
  2675. data/spec/framework_spec/app/spec/library/stringio/chars_spec.rb +13 -0
  2676. data/spec/framework_spec/app/spec/library/stringio/close_read_spec.rb +31 -0
  2677. data/spec/framework_spec/app/spec/library/stringio/close_spec.rb +23 -0
  2678. data/spec/framework_spec/app/spec/library/stringio/close_write_spec.rb +31 -0
  2679. data/spec/framework_spec/app/spec/library/stringio/closed_read_spec.rb +12 -0
  2680. data/spec/framework_spec/app/spec/library/stringio/closed_spec.rb +16 -0
  2681. data/spec/framework_spec/app/spec/library/stringio/closed_write_spec.rb +12 -0
  2682. data/spec/framework_spec/app/spec/library/stringio/codepoints.rb +11 -0
  2683. data/spec/framework_spec/app/spec/library/stringio/each_byte_spec.rb +11 -0
  2684. data/spec/framework_spec/app/spec/library/stringio/each_char_spec.rb +13 -0
  2685. data/spec/framework_spec/app/spec/library/stringio/each_codepoint.rb +12 -0
  2686. data/spec/framework_spec/app/spec/library/stringio/each_line_spec.rb +15 -0
  2687. data/spec/framework_spec/app/spec/library/stringio/each_spec.rb +15 -0
  2688. data/spec/framework_spec/app/spec/library/stringio/eof_spec.rb +11 -0
  2689. data/spec/framework_spec/app/spec/library/stringio/external_encoding.rb +12 -0
  2690. data/spec/framework_spec/app/spec/library/stringio/fcntl_spec.rb +8 -0
  2691. data/spec/framework_spec/app/spec/library/stringio/fileno_spec.rb +9 -0
  2692. data/spec/framework_spec/app/spec/library/stringio/fixtures/classes.rb +15 -0
  2693. data/spec/framework_spec/app/spec/library/stringio/flush_spec.rb +9 -0
  2694. data/spec/framework_spec/app/spec/library/stringio/fsync_spec.rb +9 -0
  2695. data/spec/framework_spec/app/spec/library/stringio/getbyte_spec.rb +21 -0
  2696. data/spec/framework_spec/app/spec/library/stringio/getc_spec.rb +19 -0
  2697. data/spec/framework_spec/app/spec/library/stringio/gets_spec.rb +139 -0
  2698. data/spec/framework_spec/app/spec/library/stringio/initialize_copy_spec.rb +96 -0
  2699. data/spec/framework_spec/app/spec/library/stringio/initialize_spec.rb +194 -0
  2700. data/spec/framework_spec/app/spec/library/stringio/internal_encoding.rb +12 -0
  2701. data/spec/framework_spec/app/spec/library/stringio/isatty_spec.rb +7 -0
  2702. data/spec/framework_spec/app/spec/library/stringio/length_spec.rb +7 -0
  2703. data/spec/framework_spec/app/spec/library/stringio/lineno_spec.rb +30 -0
  2704. data/spec/framework_spec/app/spec/library/stringio/lines_spec.rb +17 -0
  2705. data/spec/framework_spec/app/spec/library/stringio/open_spec.rb +216 -0
  2706. data/spec/framework_spec/app/spec/library/stringio/path_spec.rb +16 -0
  2707. data/spec/framework_spec/app/spec/library/stringio/pid_spec.rb +8 -0
  2708. data/spec/framework_spec/app/spec/library/stringio/pos_spec.rb +28 -0
  2709. data/spec/framework_spec/app/spec/library/stringio/print_spec.rb +114 -0
  2710. data/spec/framework_spec/app/spec/library/stringio/printf_spec.rb +61 -0
  2711. data/spec/framework_spec/app/spec/library/stringio/putc_spec.rb +88 -0
  2712. data/spec/framework_spec/app/spec/library/stringio/puts_spec.rb +159 -0
  2713. data/spec/framework_spec/app/spec/library/stringio/read_spec.rb +62 -0
  2714. data/spec/framework_spec/app/spec/library/stringio/readbyte_spec.rb +22 -0
  2715. data/spec/framework_spec/app/spec/library/stringio/readchar_spec.rb +20 -0
  2716. data/spec/framework_spec/app/spec/library/stringio/readline_spec.rb +128 -0
  2717. data/spec/framework_spec/app/spec/library/stringio/readlines_spec.rb +94 -0
  2718. data/spec/framework_spec/app/spec/library/stringio/readpartial_spec.rb +83 -0
  2719. data/spec/framework_spec/app/spec/library/stringio/reopen_spec.rb +304 -0
  2720. data/spec/framework_spec/app/spec/library/stringio/rewind_spec.rb +24 -0
  2721. data/spec/framework_spec/app/spec/library/stringio/seek_spec.rb +76 -0
  2722. data/spec/framework_spec/app/spec/library/stringio/set_encoding.rb +12 -0
  2723. data/spec/framework_spec/app/spec/library/stringio/shared/codepoints.rb +45 -0
  2724. data/spec/framework_spec/app/spec/library/stringio/shared/each.rb +115 -0
  2725. data/spec/framework_spec/app/spec/library/stringio/shared/each_byte.rb +60 -0
  2726. data/spec/framework_spec/app/spec/library/stringio/shared/each_char.rb +50 -0
  2727. data/spec/framework_spec/app/spec/library/stringio/shared/eof.rb +24 -0
  2728. data/spec/framework_spec/app/spec/library/stringio/shared/getc.rb +43 -0
  2729. data/spec/framework_spec/app/spec/library/stringio/shared/isatty.rb +5 -0
  2730. data/spec/framework_spec/app/spec/library/stringio/shared/length.rb +5 -0
  2731. data/spec/framework_spec/app/spec/library/stringio/shared/read.rb +125 -0
  2732. data/spec/framework_spec/app/spec/library/stringio/shared/readchar.rb +29 -0
  2733. data/spec/framework_spec/app/spec/library/stringio/shared/tell.rb +12 -0
  2734. data/spec/framework_spec/app/spec/library/stringio/shared/write.rb +87 -0
  2735. data/spec/framework_spec/app/spec/library/stringio/size_spec.rb +7 -0
  2736. data/spec/framework_spec/app/spec/library/stringio/string_spec.rb +50 -0
  2737. data/spec/framework_spec/app/spec/library/stringio/stringio_spec.rb +9 -0
  2738. data/spec/framework_spec/app/spec/library/stringio/sync_spec.rb +19 -0
  2739. data/spec/framework_spec/app/spec/library/stringio/sysread_spec.rb +54 -0
  2740. data/spec/framework_spec/app/spec/library/stringio/syswrite_spec.rb +19 -0
  2741. data/spec/framework_spec/app/spec/library/stringio/tell_spec.rb +7 -0
  2742. data/spec/framework_spec/app/spec/library/stringio/truncate_spec.rb +70 -0
  2743. data/spec/framework_spec/app/spec/library/stringio/tty_spec.rb +7 -0
  2744. data/spec/framework_spec/app/spec/library/stringio/ungetc_spec.rb +99 -0
  2745. data/spec/framework_spec/app/spec/library/stringio/write_spec.rb +19 -0
  2746. data/spec/framework_spec/app/spec/library/stringscanner/append_spec.rb +11 -0
  2747. data/spec/framework_spec/app/spec/library/stringscanner/beginning_of_line_spec.rb +7 -0
  2748. data/spec/framework_spec/app/spec/library/stringscanner/bol_spec.rb +7 -0
  2749. data/spec/framework_spec/app/spec/library/stringscanner/check_spec.rb +16 -0
  2750. data/spec/framework_spec/app/spec/library/stringscanner/check_until_spec.rb +15 -0
  2751. data/spec/framework_spec/app/spec/library/stringscanner/clear_spec.rb +26 -0
  2752. data/spec/framework_spec/app/spec/library/stringscanner/concat_spec.rb +11 -0
  2753. data/spec/framework_spec/app/spec/library/stringscanner/dup_spec.rb +39 -0
  2754. data/spec/framework_spec/app/spec/library/stringscanner/element_reference_spec.rb +49 -0
  2755. data/spec/framework_spec/app/spec/library/stringscanner/empty_spec.rb +26 -0
  2756. data/spec/framework_spec/app/spec/library/stringscanner/eos_spec.rb +7 -0
  2757. data/spec/framework_spec/app/spec/library/stringscanner/exist_spec.rb +24 -0
  2758. data/spec/framework_spec/app/spec/library/stringscanner/get_byte_spec.rb +7 -0
  2759. data/spec/framework_spec/app/spec/library/stringscanner/getbyte_spec.rb +29 -0
  2760. data/spec/framework_spec/app/spec/library/stringscanner/getch_spec.rb +44 -0
  2761. data/spec/framework_spec/app/spec/library/stringscanner/initialize_spec.rb +28 -0
  2762. data/spec/framework_spec/app/spec/library/stringscanner/inspect_spec.rb +20 -0
  2763. data/spec/framework_spec/app/spec/library/stringscanner/match_spec.rb +28 -0
  2764. data/spec/framework_spec/app/spec/library/stringscanner/matched_size_spec.rb +7 -0
  2765. data/spec/framework_spec/app/spec/library/stringscanner/matched_spec.rb +41 -0
  2766. data/spec/framework_spec/app/spec/library/stringscanner/matchedsize_spec.rb +27 -0
  2767. data/spec/framework_spec/app/spec/library/stringscanner/must_C_version_spec.rb +8 -0
  2768. data/spec/framework_spec/app/spec/library/stringscanner/peek_spec.rb +8 -0
  2769. data/spec/framework_spec/app/spec/library/stringscanner/peep_spec.rb +26 -0
  2770. data/spec/framework_spec/app/spec/library/stringscanner/pointer_spec.rb +11 -0
  2771. data/spec/framework_spec/app/spec/library/stringscanner/pos_spec.rb +11 -0
  2772. data/spec/framework_spec/app/spec/library/stringscanner/post_match_spec.rb +28 -0
  2773. data/spec/framework_spec/app/spec/library/stringscanner/pre_match_spec.rb +41 -0
  2774. data/spec/framework_spec/app/spec/library/stringscanner/reset_spec.rb +15 -0
  2775. data/spec/framework_spec/app/spec/library/stringscanner/rest_size_spec.rb +7 -0
  2776. data/spec/framework_spec/app/spec/library/stringscanner/rest_spec.rb +48 -0
  2777. data/spec/framework_spec/app/spec/library/stringscanner/restsize_spec.rb +26 -0
  2778. data/spec/framework_spec/app/spec/library/stringscanner/scan_full_spec.rb +30 -0
  2779. data/spec/framework_spec/app/spec/library/stringscanner/scan_spec.rb +43 -0
  2780. data/spec/framework_spec/app/spec/library/stringscanner/scan_until_spec.rb +23 -0
  2781. data/spec/framework_spec/app/spec/library/stringscanner/search_full_spec.rb +30 -0
  2782. data/spec/framework_spec/app/spec/library/stringscanner/shared/bol.rb +25 -0
  2783. data/spec/framework_spec/app/spec/library/stringscanner/shared/concat.rb +30 -0
  2784. data/spec/framework_spec/app/spec/library/stringscanner/shared/eos.rb +17 -0
  2785. data/spec/framework_spec/app/spec/library/stringscanner/shared/extract_range.rb +22 -0
  2786. data/spec/framework_spec/app/spec/library/stringscanner/shared/extract_range_matched.rb +22 -0
  2787. data/spec/framework_spec/app/spec/library/stringscanner/shared/get_byte.rb +28 -0
  2788. data/spec/framework_spec/app/spec/library/stringscanner/shared/matched_size.rb +21 -0
  2789. data/spec/framework_spec/app/spec/library/stringscanner/shared/peek.rb +44 -0
  2790. data/spec/framework_spec/app/spec/library/stringscanner/shared/pos.rb +52 -0
  2791. data/spec/framework_spec/app/spec/library/stringscanner/shared/rest_size.rb +18 -0
  2792. data/spec/framework_spec/app/spec/library/stringscanner/shared/terminate.rb +8 -0
  2793. data/spec/framework_spec/app/spec/library/stringscanner/skip_spec.rb +18 -0
  2794. data/spec/framework_spec/app/spec/library/stringscanner/skip_until_spec.rb +18 -0
  2795. data/spec/framework_spec/app/spec/library/stringscanner/string_spec.rb +40 -0
  2796. data/spec/framework_spec/app/spec/library/stringscanner/terminate_spec.rb +7 -0
  2797. data/spec/framework_spec/app/spec/library/stringscanner/unscan_spec.rb +29 -0
  2798. data/spec/framework_spec/app/spec/shared/complex/Complex.rb +76 -0
  2799. data/spec/framework_spec/app/spec/shared/complex/abs.rb +12 -0
  2800. data/spec/framework_spec/app/spec/shared/complex/abs2.rb +12 -0
  2801. data/spec/framework_spec/app/spec/shared/complex/arg.rb +9 -0
  2802. data/spec/framework_spec/app/spec/shared/complex/coerce.rb +41 -0
  2803. data/spec/framework_spec/app/spec/shared/complex/conjugate.rb +8 -0
  2804. data/spec/framework_spec/app/spec/shared/complex/denominator.rb +13 -0
  2805. data/spec/framework_spec/app/spec/shared/complex/divide.rb +57 -0
  2806. data/spec/framework_spec/app/spec/shared/complex/equal_value.rb +64 -0
  2807. data/spec/framework_spec/app/spec/shared/complex/exponent.rb +54 -0
  2808. data/spec/framework_spec/app/spec/shared/complex/hash.rb +16 -0
  2809. data/spec/framework_spec/app/spec/shared/complex/image.rb +10 -0
  2810. data/spec/framework_spec/app/spec/shared/complex/inspect.rb +29 -0
  2811. data/spec/framework_spec/app/spec/shared/complex/minus.rb +25 -0
  2812. data/spec/framework_spec/app/spec/shared/complex/modulo.rb +25 -0
  2813. data/spec/framework_spec/app/spec/shared/complex/multiply.rb +24 -0
  2814. data/spec/framework_spec/app/spec/shared/complex/numerator.rb +19 -0
  2815. data/spec/framework_spec/app/spec/shared/complex/numeric/arg.rb +43 -0
  2816. data/spec/framework_spec/app/spec/shared/complex/numeric/conj.rb +26 -0
  2817. data/spec/framework_spec/app/spec/shared/complex/numeric/imag.rb +26 -0
  2818. data/spec/framework_spec/app/spec/shared/complex/numeric/polar.rb +52 -0
  2819. data/spec/framework_spec/app/spec/shared/complex/numeric/real.rb +30 -0
  2820. data/spec/framework_spec/app/spec/shared/complex/plus.rb +25 -0
  2821. data/spec/framework_spec/app/spec/shared/complex/polar.rb +22 -0
  2822. data/spec/framework_spec/app/spec/shared/complex/real.rb +8 -0
  2823. data/spec/framework_spec/app/spec/shared/complex/rect.rb +45 -0
  2824. data/spec/framework_spec/app/spec/shared/complex/to_s.rb +39 -0
  2825. data/spec/framework_spec/app/spec/shared/continuation/call.rb +76 -0
  2826. data/spec/framework_spec/app/spec/shared/continuation/new.rb +5 -0
  2827. data/spec/framework_spec/app/spec/shared/enumerator/each.rb +45 -0
  2828. data/spec/framework_spec/app/spec/shared/enumerator/enum_cons.rb +12 -0
  2829. data/spec/framework_spec/app/spec/shared/enumerator/enum_for.rb +15 -0
  2830. data/spec/framework_spec/app/spec/shared/enumerator/new.rb +42 -0
  2831. data/spec/framework_spec/app/spec/shared/enumerator/next.rb +30 -0
  2832. data/spec/framework_spec/app/spec/shared/enumerator/rewind.rb +32 -0
  2833. data/spec/framework_spec/app/spec/shared/enumerator/with_index.rb +35 -0
  2834. data/spec/framework_spec/app/spec/shared/enumerator/with_object.rb +19 -0
  2835. data/spec/framework_spec/app/spec/shared/fiber/resume.rb +65 -0
  2836. data/spec/framework_spec/app/spec/shared/file/blockdev.rb +7 -1
  2837. data/spec/framework_spec/app/spec/shared/file/chardev.rb +7 -1
  2838. data/spec/framework_spec/app/spec/shared/file/directory.rb +59 -21
  2839. data/spec/framework_spec/app/spec/shared/file/executable.rb +10 -14
  2840. data/spec/framework_spec/app/spec/shared/file/executable_real.rb +15 -9
  2841. data/spec/framework_spec/app/spec/shared/file/exist.rb +9 -3
  2842. data/spec/framework_spec/app/spec/shared/file/file.rb +12 -10
  2843. data/spec/framework_spec/app/spec/shared/file/grpowned.rb +12 -6
  2844. data/spec/framework_spec/app/spec/shared/file/identical.rb +21 -16
  2845. data/spec/framework_spec/app/spec/shared/file/owned.rb +4 -0
  2846. data/spec/framework_spec/app/spec/shared/file/pipe.rb +4 -0
  2847. data/spec/framework_spec/app/spec/shared/file/readable.rb +16 -13
  2848. data/spec/framework_spec/app/spec/shared/file/readable_real.rb +7 -1
  2849. data/spec/framework_spec/app/spec/shared/file/size.rb +107 -15
  2850. data/spec/framework_spec/app/spec/shared/file/socket.rb +4 -0
  2851. data/spec/framework_spec/app/spec/shared/file/sticky.rb +30 -0
  2852. data/spec/framework_spec/app/spec/shared/file/symlink.rb +20 -14
  2853. data/spec/framework_spec/app/spec/shared/file/world_readable.rb +48 -0
  2854. data/spec/framework_spec/app/spec/shared/file/world_writable.rb +48 -0
  2855. data/spec/framework_spec/app/spec/shared/file/writable.rb +10 -7
  2856. data/spec/framework_spec/app/spec/shared/file/writable_real.rb +7 -1
  2857. data/spec/framework_spec/app/spec/shared/file/zero.rb +16 -17
  2858. data/spec/framework_spec/app/spec/shared/io/putc.rb +57 -0
  2859. data/spec/framework_spec/app/spec/shared/kernel/callcc.rb +68 -0
  2860. data/spec/framework_spec/app/spec/shared/kernel/method_missing.rb +60 -0
  2861. data/spec/framework_spec/app/spec/shared/kernel/singleton_method_added.rb +7 -0
  2862. data/spec/framework_spec/app/spec/shared/kernel/singleton_method_removed.rb +7 -0
  2863. data/spec/framework_spec/app/spec/shared/kernel/singleton_method_undefined.rb +7 -0
  2864. data/spec/framework_spec/app/spec/shared/math/atanh.rb +142 -0
  2865. data/spec/framework_spec/app/spec/shared/process/times.rb +8 -8
  2866. data/spec/framework_spec/app/spec/shared/rational/Rational.rb +113 -0
  2867. data/spec/framework_spec/app/spec/shared/rational/abs.rb +12 -0
  2868. data/spec/framework_spec/app/spec/shared/rational/ceil.rb +41 -0
  2869. data/spec/framework_spec/app/spec/shared/rational/coerce.rb +41 -0
  2870. data/spec/framework_spec/app/spec/shared/rational/comparison.rb +86 -0
  2871. data/spec/framework_spec/app/spec/shared/rational/denominator.rb +15 -0
  2872. data/spec/framework_spec/app/spec/shared/rational/div.rb +81 -0
  2873. data/spec/framework_spec/app/spec/shared/rational/divide.rb +72 -0
  2874. data/spec/framework_spec/app/spec/shared/rational/divmod.rb +53 -0
  2875. data/spec/framework_spec/app/spec/shared/rational/equal_value.rb +62 -0
  2876. data/spec/framework_spec/app/spec/shared/rational/exponent.rb +144 -0
  2877. data/spec/framework_spec/app/spec/shared/rational/fdiv.rb +5 -0
  2878. data/spec/framework_spec/app/spec/shared/rational/floor.rb +5 -0
  2879. data/spec/framework_spec/app/spec/shared/rational/hash.rb +10 -0
  2880. data/spec/framework_spec/app/spec/shared/rational/initialize.rb +25 -0
  2881. data/spec/framework_spec/app/spec/shared/rational/inspect.rb +24 -0
  2882. data/spec/framework_spec/app/spec/shared/rational/marshal_dump.rb +5 -0
  2883. data/spec/framework_spec/app/spec/shared/rational/marshal_load.rb +5 -0
  2884. data/spec/framework_spec/app/spec/shared/rational/minus.rb +49 -0
  2885. data/spec/framework_spec/app/spec/shared/rational/modulo.rb +52 -0
  2886. data/spec/framework_spec/app/spec/shared/rational/multiply.rb +63 -0
  2887. data/spec/framework_spec/app/spec/shared/rational/new.rb +21 -0
  2888. data/spec/framework_spec/app/spec/shared/rational/numerator.rb +11 -0
  2889. data/spec/framework_spec/app/spec/shared/rational/plus.rb +49 -0
  2890. data/spec/framework_spec/app/spec/shared/rational/quo.rb +5 -0
  2891. data/spec/framework_spec/app/spec/shared/rational/reduce.rb +31 -0
  2892. data/spec/framework_spec/app/spec/shared/rational/remainder.rb +5 -0
  2893. data/spec/framework_spec/app/spec/shared/rational/round.rb +5 -0
  2894. data/spec/framework_spec/app/spec/shared/rational/to_f.rb +11 -0
  2895. data/spec/framework_spec/app/spec/shared/rational/to_i.rb +15 -0
  2896. data/spec/framework_spec/app/spec/shared/rational/to_r.rb +14 -0
  2897. data/spec/framework_spec/app/spec/shared/rational/to_s.rb +24 -0
  2898. data/spec/framework_spec/app/spec/shared/rational/truncate.rb +5 -0
  2899. data/spec/framework_spec/app/spec/spec_helper.rb +1 -37
  2900. data/spec/framework_spec/app/spec/version.rb +3 -0
  2901. data/spec/framework_spec/app/spec_runner.rb +50 -80
  2902. data/spec/framework_spec/build.yml +3 -4
  2903. data/spec/framework_spec/rhoconfig.txt +4 -1
  2904. data/spec/phone_spec/app/spec/contacts_spec.rb +8 -4
  2905. data/spec/phone_spec/app/spec/date_spec.rb +17 -0
  2906. data/spec/phone_spec/app/spec/rhom_object_spec.rb +11 -0
  2907. data/spec/phone_spec/app/spec/syncengine_spec.rb +63 -1
  2908. data/spec/phone_spec/app/spec/uri_spec.rb +2 -0
  2909. data/spec/phone_spec/app/spec/xml_spec.rb +10 -3
  2910. data/spec/phone_spec/app/spec_runner.rb +1 -1
  2911. data/spec/phone_spec/build.yml +2 -2
  2912. data/spec/phone_spec/rhoconfig.txt +1 -0
  2913. metadata +1059 -91
  2914. data/Manifest.txt +0 -6338
  2915. data/doc/rhodes-api/alert-api.txt +0 -102
  2916. data/lib/extensions/mspec/mspec/fileutils.rb +0 -1589
  2917. data/lib/extensions/mspec/mspec/helpers/bignum.rb +0 -5
  2918. data/lib/extensions/mspec/mspec/helpers/infinity.rb +0 -5
  2919. data/lib/extensions/mspec/mspec/helpers/metaclass.rb +0 -7
  2920. data/lib/extensions/mspec/mspec/helpers/nan.rb +0 -5
  2921. data/platform/shared/ruby/blockinlining.c +0 -464
  2922. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b2.min.css +0 -8
  2923. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.0b2.min.js +0 -155
  2924. data/res/generators/templates/application/public/jquery/jquery-1.6.2.min.js +0 -18
  2925. data/spec/framework_spec/app/spec/core/basicobject/basic_object_class_spec.rb +0 -18
  2926. data/spec/framework_spec/app/spec/core/basicobject/basic_object_spec.rb +0 -23
  2927. data/spec/framework_spec/app/spec/core/basicobject/basic_object_subclass_spec.rb +0 -25
  2928. data/spec/framework_spec/app/spec/core/basicobject/metaclass_spec.rb +0 -27
  2929. data/spec/framework_spec/app/spec/core/basicobject/remove_method_missing.rb +0 -14
  2930. data/spec/framework_spec/app/spec/core/basicobject/shared/behavior.rb +0 -16
  2931. data/spec/framework_spec/app/spec/core/builtin_constants/builtin_constants.rb +0 -13
  2932. data/spec/framework_spec/app/spec/core/continuation/continuation_spec.rb +0 -109
  2933. data/spec/framework_spec/app/spec/core/dir/new_spec.rb +0 -2
  2934. data/spec/framework_spec/app/spec/core/enumerable/each_spec.rb +0 -14
  2935. data/spec/framework_spec/app/spec/core/fiber/alive_spec.rb +0 -54
  2936. data/spec/framework_spec/app/spec/core/fiber/current_spec.rb +0 -63
  2937. data/spec/framework_spec/app/spec/core/fiber/shared/resume.rb +0 -71
  2938. data/spec/framework_spec/app/spec/core/fiber/transfer_spec.rb +0 -45
  2939. data/spec/framework_spec/app/spec/core/io/data/data_spec.rb +0 -13
  2940. data/spec/framework_spec/app/spec/core/io/data/fixtures/data1.rb +0 -3
  2941. data/spec/framework_spec/app/spec/core/io/data/flock_spec.rb +0 -22
  2942. data/spec/framework_spec/app/spec/core/io/fixtures/paragraphs.txt +0 -7
  2943. data/spec/framework_spec/app/spec/core/io/fixtures/readlines.txt +0 -6
  2944. data/spec/framework_spec/app/spec/core/kernel/__callee__spec.rb +0 -9
  2945. data/spec/framework_spec/app/spec/core/kernel/__method__spec.rb +0 -9
  2946. data/spec/framework_spec/app/spec/core/proc/fixtures/procs.rb +0 -5
  2947. data/spec/framework_spec/app/spec/find_spec.rb +0 -56
  2948. data/spec/framework_spec/app/spec/fixtures/load/load_spec +0 -1
  2949. data/spec/framework_spec/app/spec/fixtures/load/load_spec.rooby +0 -1
  2950. data/spec/framework_spec/app/spec/fixtures/load/load_spec_1.rb +0 -1
  2951. data/spec/framework_spec/app/spec/fixtures/load/load_spec_10.rb +0 -1
  2952. data/spec/framework_spec/app/spec/fixtures/load/load_spec_2.rb +0 -1
  2953. data/spec/framework_spec/app/spec/fixtures/load/load_spec_3.rb +0 -1
  2954. data/spec/framework_spec/app/spec/fixtures/load/load_spec_4.rb +0 -12
  2955. data/spec/framework_spec/app/spec/fixtures/load/load_spec_5.rb +0 -2
  2956. data/spec/framework_spec/app/spec/fixtures/load/load_spec_6.rb +0 -2
  2957. data/spec/framework_spec/app/spec/fixtures/load/load_spec_7.rb +0 -2
  2958. data/spec/framework_spec/app/spec/fixtures/load/load_spec_8.rb +0 -1
  2959. data/spec/framework_spec/app/spec/fixtures/load/load_spec_9.rb +0 -1
  2960. data/spec/framework_spec/app/spec/fixtures/load/load_spec_wrap.rb +0 -7
  2961. data/spec/framework_spec/app/spec/fixtures/load/load_spec_wrap2.rb +0 -7
  2962. data/spec/framework_spec/app/spec/fixtures/load/load_spec_wrap_2.rb +0 -7
  2963. data/spec/framework_spec/app/spec/fixtures/matrix.rb +0 -5
  2964. data/spec/framework_spec/app/spec/fixtures/require/masked_require_spec_2.rb +0 -1
  2965. data/spec/framework_spec/app/spec/fixtures/require/masked_require_spec_3.rb +0 -1
  2966. data/spec/framework_spec/app/spec/fixtures/require/require_spec +0 -1
  2967. data/spec/framework_spec/app/spec/fixtures/require/require_spec.rb +0 -1
  2968. data/spec/framework_spec/app/spec/fixtures/require/require_spec.rooby +0 -1
  2969. data/spec/framework_spec/app/spec/fixtures/require/require_spec.rooby.rb +0 -1
  2970. data/spec/framework_spec/app/spec/fixtures/require/require_spec_1.rb +0 -1
  2971. data/spec/framework_spec/app/spec/fixtures/require/require_spec_10.rb +0 -1
  2972. data/spec/framework_spec/app/spec/fixtures/require/require_spec_2.rb +0 -1
  2973. data/spec/framework_spec/app/spec/fixtures/require/require_spec_3.rb +0 -1
  2974. data/spec/framework_spec/app/spec/fixtures/require/require_spec_4.rb +0 -12
  2975. data/spec/framework_spec/app/spec/fixtures/require/require_spec_6.rb +0 -1
  2976. data/spec/framework_spec/app/spec/fixtures/require/require_spec_7.rb +0 -1
  2977. data/spec/framework_spec/app/spec/fixtures/require/require_spec_8.rb +0 -1
  2978. data/spec/framework_spec/app/spec/fixtures/require/require_spec_9.rb +0 -1
  2979. data/spec/framework_spec/app/spec/fixtures/require/require_spec_raises.rb +0 -3
  2980. data/spec/framework_spec/app/spec/fixtures/require/require_spec_recursive.rb +0 -2
  2981. data/spec/framework_spec/app/spec/language/catch_spec.rb +0 -84
  2982. data/spec/framework_spec/app/spec/language/eigenclass_spec.rb +0 -317
  2983. data/spec/framework_spec/app/spec/language/else_spec.rb +0 -1
  2984. data/spec/framework_spec/app/spec/language/method_spec.rb +0 -273
  2985. data/spec/framework_spec/app/spec/language/versions/array_1.8.rb +0 -13
  2986. data/spec/framework_spec/app/spec/language/versions/method_1.9.rb +0 -137
  2987. data/spec/framework_spec/app/spec/language/versions/symbol_1.8.rb +0 -5
@@ -25,7 +25,7 @@ VALUE rb_cArray;
25
25
  static ID id_cmp;
26
26
 
27
27
  #define ARY_DEFAULT_SIZE 16
28
- #define ARY_MAX_SIZE (LONG_MAX / sizeof(VALUE))
28
+ #define ARY_MAX_SIZE (LONG_MAX / (int)sizeof(VALUE))
29
29
 
30
30
  void
31
31
  rb_mem_clear(register VALUE *mem, register long size)
@@ -45,10 +45,10 @@ memfill(register VALUE *mem, register long size, register VALUE val)
45
45
 
46
46
  # define ARY_SHARED_P(ary) \
47
47
  (assert(!FL_TEST(ary, ELTS_SHARED) || !FL_TEST(ary, RARRAY_EMBED_FLAG)), \
48
- FL_TEST(ary,ELTS_SHARED))
48
+ FL_TEST(ary,ELTS_SHARED)!=0)
49
49
  # define ARY_EMBED_P(ary) \
50
50
  (assert(!FL_TEST(ary, ELTS_SHARED) || !FL_TEST(ary, RARRAY_EMBED_FLAG)), \
51
- FL_TEST(ary, RARRAY_EMBED_FLAG))
51
+ FL_TEST(ary, RARRAY_EMBED_FLAG)!=0)
52
52
 
53
53
  #define ARY_HEAP_PTR(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.ptr)
54
54
  #define ARY_HEAP_LEN(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.len)
@@ -95,7 +95,7 @@ memfill(register VALUE *mem, register long size, register VALUE val)
95
95
  ARY_SET_HEAP_LEN(ary, n); \
96
96
  } \
97
97
  assert(RARRAY_LEN(ary) == n); \
98
- } while (0)
98
+ } while (0)
99
99
  #define ARY_INCREASE_PTR(ary, n) do { \
100
100
  assert(!ARY_EMBED_P(ary)); \
101
101
  assert(!OBJ_FROZEN(ary)); \
@@ -144,39 +144,55 @@ static void
144
144
  ary_resize_capa(VALUE ary, long capacity)
145
145
  {
146
146
  assert(RARRAY_LEN(ary) <= capacity);
147
- assert(!OBJ_FROZEN(ary));
148
- assert(!ARY_SHARED_P(ary));
147
+ assert(!OBJ_FROZEN(ary));
148
+ assert(!ARY_SHARED_P(ary));
149
149
  if (capacity > RARRAY_EMBED_LEN_MAX) {
150
150
  if (ARY_EMBED_P(ary)) {
151
- long len = ARY_EMBED_LEN(ary);
151
+ long len = ARY_EMBED_LEN(ary);
152
152
  VALUE *ptr = ALLOC_N(VALUE, (capacity));
153
- MEMCPY(ptr, ARY_EMBED_PTR(ary), VALUE, len);
154
- FL_UNSET_EMBED(ary);
155
- ARY_SET_PTR(ary, ptr);
156
- ARY_SET_HEAP_LEN(ary, len);
153
+ MEMCPY(ptr, ARY_EMBED_PTR(ary), VALUE, len);
154
+ FL_UNSET_EMBED(ary);
155
+ ARY_SET_PTR(ary, ptr);
156
+ ARY_SET_HEAP_LEN(ary, len);
157
157
  }
158
- else {
158
+ else {
159
159
  REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, (capacity));
160
160
  }
161
- ARY_SET_CAPA(ary, (capacity));
161
+ ARY_SET_CAPA(ary, (capacity));
162
162
  }
163
163
  else {
164
164
  if (!ARY_EMBED_P(ary)) {
165
- long len = RARRAY_LEN(ary);
166
- VALUE *ptr = RARRAY_PTR(ary);
167
- MEMCPY(RARRAY(ary)->as.ary, ptr, VALUE, len);
168
- FL_SET_EMBED(ary);
169
- ARY_SET_LEN(ary, len);
170
- xfree(ptr);
165
+ long len = RARRAY_LEN(ary);
166
+ VALUE *ptr = RARRAY_PTR(ary);
167
+ if (len > capacity) len = capacity;
168
+ MEMCPY(RARRAY(ary)->as.ary, ptr, VALUE, len);
169
+ FL_SET_EMBED(ary);
170
+ ARY_SET_LEN(ary, len);
171
+ xfree(ptr);
171
172
  }
172
173
  }
173
174
  }
174
175
 
176
+ static void
177
+ ary_double_capa(VALUE ary, long min)
178
+ {
179
+ long new_capa = ARY_CAPA(ary) / 2;
180
+
181
+ if (new_capa < ARY_DEFAULT_SIZE) {
182
+ new_capa = ARY_DEFAULT_SIZE;
183
+ }
184
+ if (new_capa >= ARY_MAX_SIZE - min) {
185
+ new_capa = (ARY_MAX_SIZE - min) / 2;
186
+ }
187
+ new_capa += min;
188
+ ary_resize_capa(ary, new_capa);
189
+ }
190
+
175
191
  static void
176
192
  rb_ary_decrement_share(VALUE shared)
177
193
  {
178
194
  if (shared) {
179
- int num = ARY_SHARED_NUM(shared) - 1;
195
+ long num = ARY_SHARED_NUM(shared) - 1;
180
196
  if (num == 0) {
181
197
  rb_ary_free(shared);
182
198
  rb_gc_force_recycle(shared);
@@ -196,15 +212,17 @@ rb_ary_unshare(VALUE ary)
196
212
  }
197
213
 
198
214
  static inline void
199
- rb_ary_unshare_safe(VALUE ary) {
215
+ rb_ary_unshare_safe(VALUE ary)
216
+ {
200
217
  if (ARY_SHARED_P(ary) && !ARY_EMBED_P(ary)) {
201
218
  rb_ary_unshare(ary);
202
219
  }
203
220
  }
204
221
 
205
222
  static VALUE
206
- rb_ary_increment_share(VALUE shared) {
207
- int num = ARY_SHARED_NUM(shared);
223
+ rb_ary_increment_share(VALUE shared)
224
+ {
225
+ long num = ARY_SHARED_NUM(shared);
208
226
  if (num >= 0) {
209
227
  ARY_SET_SHARED_NUM(shared, num + 1);
210
228
  }
@@ -260,7 +278,7 @@ rb_ary_freeze(VALUE ary)
260
278
 
261
279
  /*
262
280
  * call-seq:
263
- * array.frozen? -> true or false
281
+ * ary.frozen? -> true or false
264
282
  *
265
283
  * Return <code>true</code> if this array is frozen (or temporarily frozen
266
284
  * while being sorted).
@@ -285,21 +303,21 @@ ary_alloc(VALUE klass)
285
303
  }
286
304
 
287
305
  static VALUE
288
- ary_new(VALUE klass, long len)
306
+ ary_new(VALUE klass, long capa)
289
307
  {
290
308
  VALUE ary;
291
309
 
292
- if (len < 0) {
310
+ if (capa < 0) {
293
311
  rb_raise(rb_eArgError, "negative array size (or size too big)");
294
312
  }
295
- if (len > ARY_MAX_SIZE) {
313
+ if (capa > ARY_MAX_SIZE) {
296
314
  rb_raise(rb_eArgError, "array size too big");
297
315
  }
298
316
  ary = ary_alloc(klass);
299
- if (len > RARRAY_EMBED_LEN_MAX) {
317
+ if (capa > RARRAY_EMBED_LEN_MAX) {
300
318
  FL_UNSET_EMBED(ary);
301
- ARY_SET_PTR(ary, ALLOC_N(VALUE, len));
302
- ARY_SET_CAPA(ary, len);
319
+ ARY_SET_PTR(ary, ALLOC_N(VALUE, capa));
320
+ ARY_SET_CAPA(ary, capa);
303
321
  ARY_SET_HEAP_LEN(ary, 0);
304
322
  }
305
323
 
@@ -307,9 +325,9 @@ ary_new(VALUE klass, long len)
307
325
  }
308
326
 
309
327
  VALUE
310
- rb_ary_new2(long len)
328
+ rb_ary_new2(long capa)
311
329
  {
312
- return ary_new(rb_cArray, len);
330
+ return ary_new(rb_cArray, capa);
313
331
  }
314
332
 
315
333
 
@@ -355,19 +373,38 @@ rb_ary_new4(long n, const VALUE *elts)
355
373
  }
356
374
 
357
375
  VALUE
358
- rb_ary_tmp_new(long len)
376
+ rb_ary_tmp_new(long capa)
359
377
  {
360
- return ary_new(0, len);
378
+ return ary_new(0, capa);
361
379
  }
362
380
 
363
381
  void
364
382
  rb_ary_free(VALUE ary)
365
383
  {
366
384
  if (ARY_OWNS_HEAP_P(ary)) {
367
- xfree(RARRAY_PTR(ary));
385
+ xfree(ARY_HEAP_PTR(ary));
368
386
  }
369
387
  }
370
388
 
389
+ size_t
390
+ rb_ary_memsize(VALUE ary)
391
+ {
392
+ if (ARY_OWNS_HEAP_P(ary)) {
393
+ return RARRAY(ary)->as.heap.aux.capa * sizeof(VALUE);
394
+ }
395
+ else {
396
+ return 0;
397
+ }
398
+ }
399
+
400
+ static inline void
401
+ ary_discard(VALUE ary)
402
+ {
403
+ rb_ary_free(ary);
404
+ RBASIC(ary)->flags |= RARRAY_EMBED_FLAG;
405
+ RBASIC(ary)->flags &= ~RARRAY_EMBED_LEN_MASK;
406
+ }
407
+
371
408
  static VALUE
372
409
  ary_make_shared(VALUE ary)
373
410
  {
@@ -375,6 +412,15 @@ ary_make_shared(VALUE ary)
375
412
  if (ARY_SHARED_P(ary)) {
376
413
  return ARY_SHARED(ary);
377
414
  }
415
+ else if (ARY_SHARED_ROOT_P(ary)) {
416
+ return ary;
417
+ }
418
+ else if (OBJ_FROZEN(ary)) {
419
+ ary_resize_capa(ary, ARY_HEAP_LEN(ary));
420
+ FL_SET_SHARED_ROOT(ary);
421
+ ARY_SET_SHARED_NUM(ary, 1);
422
+ return ary;
423
+ }
378
424
  else {
379
425
  NEWOBJ(shared, struct RArray);
380
426
  OBJSETUP(shared, 0, T_ARRAY);
@@ -428,14 +474,14 @@ rb_check_array_type(VALUE ary)
428
474
  * call-seq:
429
475
  * Array.try_convert(obj) -> array or nil
430
476
  *
431
- * Try to convert <i>obj</i> into an array, using to_ary method.
432
- * Returns converted array or nil if <i>obj</i> cannot be converted
433
- * for any reason. This method is to check if an argument is an
434
- * array.
477
+ * Try to convert <i>obj</i> into an array, using +to_ary+ method.
478
+ * Returns converted array or +nil+ if <i>obj</i> cannot be converted
479
+ * for any reason. This method can be used to check if an argument is an
480
+ * array.
481
+ *
482
+ * Array.try_convert([1]) #=> [1]
483
+ * Array.try_convert("1") #=> nil
435
484
  *
436
- * Array.try_convert([1]) # => [1]
437
- * Array.try_convert("1") # => nil
438
- *
439
485
  * if tmp = Array.try_convert(arg)
440
486
  * # the argument is an array
441
487
  * elsif tmp = String.try_convert(arg)
@@ -469,22 +515,22 @@ rb_ary_s_try_convert(VALUE dummy, VALUE ary)
469
515
  * Array.new
470
516
  * Array.new(2)
471
517
  * Array.new(5, "A")
472
- *
518
+ *
473
519
  * # only one copy of the object is created
474
520
  * a = Array.new(2, Hash.new)
475
521
  * a[0]['cat'] = 'feline'
476
522
  * a
477
523
  * a[1]['cat'] = 'Felix'
478
524
  * a
479
- *
525
+ *
480
526
  * # here multiple copies are created
481
527
  * a = Array.new(2) { Hash.new }
482
528
  * a[0]['cat'] = 'feline'
483
529
  * a
484
- *
530
+ *
485
531
  * squares = Array.new(5) {|i| i*i}
486
532
  * squares
487
- *
533
+ *
488
534
  * copy = Array.new(squares)
489
535
  */
490
536
 
@@ -495,7 +541,7 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
495
541
  VALUE size, val;
496
542
 
497
543
  rb_ary_modify(ary);
498
- if (argc == 0) {
544
+ if (argc == 0) {
499
545
  if (ARY_OWNS_HEAP_P(ary) && RARRAY_PTR(ary)) {
500
546
  xfree(RARRAY_PTR(ary));
501
547
  }
@@ -544,8 +590,8 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary)
544
590
  }
545
591
 
546
592
 
547
- /*
548
- * Returns a new array populated with the given objects.
593
+ /*
594
+ * Returns a new array populated with the given objects.
549
595
  *
550
596
  * Array.[]( 1, 'a', /^A/ )
551
597
  * Array[ 1, 'a', /^A/ ]
@@ -570,8 +616,8 @@ rb_ary_store(VALUE ary, long idx, VALUE val)
570
616
  if (idx < 0) {
571
617
  idx += RARRAY_LEN(ary);
572
618
  if (idx < 0) {
573
- rb_raise(rb_eIndexError, "index %ld out of array",
574
- idx - RARRAY_LEN(ary));
619
+ rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
620
+ idx - RARRAY_LEN(ary), -RARRAY_LEN(ary));
575
621
  }
576
622
  }
577
623
  else if (idx >= ARY_MAX_SIZE) {
@@ -580,16 +626,7 @@ rb_ary_store(VALUE ary, long idx, VALUE val)
580
626
 
581
627
  rb_ary_modify(ary);
582
628
  if (idx >= ARY_CAPA(ary)) {
583
- long new_capa = ARY_CAPA(ary) / 2;
584
-
585
- if (new_capa < ARY_DEFAULT_SIZE) {
586
- new_capa = ARY_DEFAULT_SIZE;
587
- }
588
- if (new_capa >= ARY_MAX_SIZE - idx) {
589
- new_capa = (ARY_MAX_SIZE - idx) / 2;
590
- }
591
- new_capa += idx;
592
- ary_resize_capa(ary, new_capa);
629
+ ary_double_capa(ary, idx);
593
630
  }
594
631
  if (idx > RARRAY_LEN(ary)) {
595
632
  rb_mem_clear(RARRAY_PTR(ary) + RARRAY_LEN(ary),
@@ -663,10 +700,12 @@ ary_take_first_or_last(int argc, VALUE *argv, VALUE ary, enum ary_take_pos_flags
663
700
  return ary_make_partial(ary, rb_cArray, offset, n);
664
701
  }
665
702
 
703
+ static VALUE rb_ary_push_1(VALUE ary, VALUE item);
704
+
666
705
  /*
667
706
  * call-seq:
668
- * array << obj -> array
669
- *
707
+ * ary << obj -> ary
708
+ *
670
709
  * Append---Pushes the given object on to the end of this array. This
671
710
  * expression returns the array itself, so several appends
672
711
  * may be chained together.
@@ -679,29 +718,42 @@ ary_take_first_or_last(int argc, VALUE *argv, VALUE ary, enum ary_take_pos_flags
679
718
  VALUE
680
719
  rb_ary_push(VALUE ary, VALUE item)
681
720
  {
682
- rb_ary_store(ary, RARRAY_LEN(ary), item);
721
+ rb_ary_modify(ary);
722
+ return rb_ary_push_1(ary, item);
723
+ }
724
+
725
+ static VALUE
726
+ rb_ary_push_1(VALUE ary, VALUE item)
727
+ {
728
+ long idx = RARRAY_LEN(ary);
729
+
730
+ if (idx >= ARY_CAPA(ary)) {
731
+ ary_double_capa(ary, idx);
732
+ }
733
+ RARRAY_PTR(ary)[idx] = item;
734
+ ARY_SET_LEN(ary, idx + 1);
683
735
  return ary;
684
736
  }
685
737
 
686
- /*
738
+ /*
687
739
  * call-seq:
688
- * array.push(obj, ... ) -> array
689
- *
740
+ * ary.push(obj, ... ) -> ary
741
+ *
690
742
  * Append---Pushes the given object(s) on to the end of this array. This
691
743
  * expression returns the array itself, so several appends
692
744
  * may be chained together.
693
745
  *
694
746
  * a = [ "a", "b", "c" ]
695
- * a.push("d", "e", "f")
747
+ * a.push("d", "e", "f")
696
748
  * #=> ["a", "b", "c", "d", "e", "f"]
697
749
  */
698
750
 
699
751
  static VALUE
700
752
  rb_ary_push_m(int argc, VALUE *argv, VALUE ary)
701
753
  {
702
- rb_ary_modify_check(ary);
754
+ rb_ary_modify(ary);
703
755
  while (argc--) {
704
- rb_ary_push(ary, *argv++);
756
+ rb_ary_push_1(ary, *argv++);
705
757
  }
706
758
  return ary;
707
759
  }
@@ -725,15 +777,15 @@ rb_ary_pop(VALUE ary)
725
777
 
726
778
  /*
727
779
  * call-seq:
728
- * array.pop -> obj or nil
729
- * array.pop(n) -> array
730
- *
731
- * Removes the last element from <i>self</i> and returns it, or
780
+ * ary.pop -> obj or nil
781
+ * ary.pop(n) -> new_ary
782
+ *
783
+ * Removes the last element from +self+ and returns it, or
732
784
  * <code>nil</code> if the array is empty.
733
785
  *
734
786
  * If a number _n_ is given, returns an array of the last n elements
735
787
  * (or less) just like <code>array.slice!(-n, n)</code> does.
736
- *
788
+ *
737
789
  * a = [ "a", "b", "c", "d" ]
738
790
  * a.pop #=> "d"
739
791
  * a.pop(2) #=> ["b", "c"]
@@ -774,6 +826,9 @@ rb_ary_shift(VALUE ary)
774
826
  RARRAY_PTR(ary)[0] = Qnil;
775
827
  ary_make_shared(ary);
776
828
  }
829
+ else if (ARY_SHARED_NUM(ARY_SHARED(ary)) == 1) {
830
+ RARRAY_PTR(ary)[0] = Qnil;
831
+ }
777
832
  ARY_INCREASE_PTR(ary, 1); /* shift ptr */
778
833
  ARY_INCREASE_LEN(ary, -1);
779
834
 
@@ -782,16 +837,16 @@ rb_ary_shift(VALUE ary)
782
837
 
783
838
  /*
784
839
  * call-seq:
785
- * array.shift -> obj or nil
786
- * array.shift(n) -> array
787
- *
788
- * Returns the first element of <i>self</i> and removes it (shifting all
840
+ * ary.shift -> obj or nil
841
+ * ary.shift(n) -> new_ary
842
+ *
843
+ * Returns the first element of +self+ and removes it (shifting all
789
844
  * other elements down by one). Returns <code>nil</code> if the array
790
845
  * is empty.
791
846
  *
792
847
  * If a number _n_ is given, returns an array of the first n elements
793
848
  * (or less) just like <code>array.slice!(0, n)</code> does.
794
- *
849
+ *
795
850
  * args = [ "-m", "-q", "filename" ]
796
851
  * args.shift #=> "-m"
797
852
  * args #=> ["-q", "filename"]
@@ -815,6 +870,9 @@ rb_ary_shift_m(int argc, VALUE *argv, VALUE ary)
815
870
  result = ary_take_first_or_last(argc, argv, ary, ARY_TAKE_FIRST);
816
871
  n = RARRAY_LEN(result);
817
872
  if (ARY_SHARED_P(ary)) {
873
+ if (ARY_SHARED_NUM(ARY_SHARED(ary)) == 1) {
874
+ rb_mem_clear(RARRAY_PTR(ary), n);
875
+ }
818
876
  ARY_INCREASE_PTR(ary, n);
819
877
  }
820
878
  else {
@@ -827,11 +885,11 @@ rb_ary_shift_m(int argc, VALUE *argv, VALUE ary)
827
885
 
828
886
  /*
829
887
  * call-seq:
830
- * array.unshift(obj, ...) -> array
831
- *
832
- * Prepends objects to the front of <i>array</i>.
833
- * other elements up one.
834
- *
888
+ * ary.unshift(obj, ...) -> ary
889
+ *
890
+ * Prepends objects to the front of +self+,
891
+ * moving other elements upwards.
892
+ *
835
893
  * a = [ "b", "c", "d" ]
836
894
  * a.unshift("a") #=> ["a", "b", "c", "d"]
837
895
  * a.unshift(1, 2) #=> [ 1, 2, "a", "b", "c", "d"]
@@ -842,17 +900,17 @@ rb_ary_unshift_m(int argc, VALUE *argv, VALUE ary)
842
900
  {
843
901
  long len;
844
902
 
845
- if (argc == 0) return ary;
846
903
  rb_ary_modify(ary);
904
+ if (argc == 0) return ary;
847
905
  if (ARY_CAPA(ary) <= (len = RARRAY_LEN(ary)) + argc) {
848
- ary_resize_capa(ary, len + argc + ARY_DEFAULT_SIZE);
906
+ ary_double_capa(ary, len + argc);
849
907
  }
850
908
 
851
909
  /* sliding items */
852
910
  MEMMOVE(RARRAY_PTR(ary) + argc, RARRAY_PTR(ary), VALUE, len);
853
911
  MEMCPY(RARRAY_PTR(ary), argv, VALUE, argc);
854
912
  ARY_INCREASE_LEN(ary, argc);
855
-
913
+
856
914
  return ary;
857
915
  }
858
916
 
@@ -899,21 +957,21 @@ rb_ary_subseq(VALUE ary, long beg, long len)
899
957
  return ary_make_partial(ary, klass, beg, len);
900
958
  }
901
959
 
902
- /*
960
+ /*
903
961
  * call-seq:
904
- * array[index] -> obj or nil
905
- * array[start, length] -> an_array or nil
906
- * array[range] -> an_array or nil
907
- * array.slice(index) -> obj or nil
908
- * array.slice(start, length) -> an_array or nil
909
- * array.slice(range) -> an_array or nil
962
+ * ary[index] -> obj or nil
963
+ * ary[start, length] -> new_ary or nil
964
+ * ary[range] -> new_ary or nil
965
+ * ary.slice(index) -> obj or nil
966
+ * ary.slice(start, length) -> new_ary or nil
967
+ * ary.slice(range) -> new_ary or nil
910
968
  *
911
969
  * Element Reference---Returns the element at _index_,
912
970
  * or returns a subarray starting at _start_ and
913
971
  * continuing for _length_ elements, or returns a subarray
914
972
  * specified by _range_.
915
973
  * Negative indices count backward from the end of the
916
- * array (-1 is the last element). Returns nil if the index
974
+ * array (-1 is the last element). Returns +nil+ if the index
917
975
  * (or starting index) are out of range.
918
976
  *
919
977
  * a = [ "a", "b", "c", "d", "e" ]
@@ -965,12 +1023,12 @@ rb_ary_aref(int argc, VALUE *argv, VALUE ary)
965
1023
  return rb_ary_entry(ary, NUM2LONG(arg));
966
1024
  }
967
1025
 
968
- /*
1026
+ /*
969
1027
  * call-seq:
970
- * array.at(index) -> obj or nil
1028
+ * ary.at(index) -> obj or nil
971
1029
  *
972
1030
  * Returns the element at _index_. A
973
- * negative index counts from the end of _self_. Returns +nil+
1031
+ * negative index counts from the end of +self+. Returns +nil+
974
1032
  * if the index is out of range. See also <code>Array#[]</code>.
975
1033
  *
976
1034
  * a = [ "a", "b", "c", "d", "e" ]
@@ -986,13 +1044,13 @@ rb_ary_at(VALUE ary, VALUE pos)
986
1044
 
987
1045
  /*
988
1046
  * call-seq:
989
- * array.first -> obj or nil
990
- * array.first(n) -> an_array
991
- *
1047
+ * ary.first -> obj or nil
1048
+ * ary.first(n) -> new_ary
1049
+ *
992
1050
  * Returns the first element, or the first +n+ elements, of the array.
993
1051
  * If the array is empty, the first form returns <code>nil</code>, and the
994
1052
  * second form returns an empty array.
995
- *
1053
+ *
996
1054
  * a = [ "q", "r", "s", "t" ]
997
1055
  * a.first #=> "q"
998
1056
  * a.first(2) #=> ["q", "r"]
@@ -1012,12 +1070,12 @@ rb_ary_first(int argc, VALUE *argv, VALUE ary)
1012
1070
 
1013
1071
  /*
1014
1072
  * call-seq:
1015
- * array.last -> obj or nil
1016
- * array.last(n) -> an_array
1017
- *
1018
- * Returns the last element(s) of <i>self</i>. If the array is empty,
1073
+ * ary.last -> obj or nil
1074
+ * ary.last(n) -> new_ary
1075
+ *
1076
+ * Returns the last element(s) of +self+. If the array is empty,
1019
1077
  * the first form returns <code>nil</code>.
1020
- *
1078
+ *
1021
1079
  * a = [ "w", "x", "y", "z" ]
1022
1080
  * a.last #=> "z"
1023
1081
  * a.last(2) #=> ["y", "z"]
@@ -1037,17 +1095,17 @@ rb_ary_last(int argc, VALUE *argv, VALUE ary)
1037
1095
 
1038
1096
  /*
1039
1097
  * call-seq:
1040
- * array.fetch(index) -> obj
1041
- * array.fetch(index, default ) -> obj
1042
- * array.fetch(index) {|index| block } -> obj
1043
- *
1098
+ * ary.fetch(index) -> obj
1099
+ * ary.fetch(index, default ) -> obj
1100
+ * ary.fetch(index) {|index| block } -> obj
1101
+ *
1044
1102
  * Tries to return the element at position <i>index</i>. If the index
1045
1103
  * lies outside the array, the first form throws an
1046
1104
  * <code>IndexError</code> exception, the second form returns
1047
1105
  * <i>default</i>, and the third form returns the value of invoking
1048
1106
  * the block, passing in the index. Negative values of <i>index</i>
1049
1107
  * count from the end of the array.
1050
- *
1108
+ *
1051
1109
  * a = [ 11, 22, 33, 44 ]
1052
1110
  * a.fetch(1) #=> 22
1053
1111
  * a.fetch(-1) #=> 44
@@ -1075,7 +1133,8 @@ rb_ary_fetch(int argc, VALUE *argv, VALUE ary)
1075
1133
  if (idx < 0 || RARRAY_LEN(ary) <= idx) {
1076
1134
  if (block_given) return rb_yield(pos);
1077
1135
  if (argc == 1) {
1078
- rb_raise(rb_eIndexError, "index %ld out of array", idx);
1136
+ rb_raise(rb_eIndexError, "index %ld outside of array bounds: %ld...%ld",
1137
+ idx - (idx < 0 ? RARRAY_LEN(ary) : 0), -RARRAY_LEN(ary), RARRAY_LEN(ary));
1079
1138
  }
1080
1139
  return ifnone;
1081
1140
  }
@@ -1084,14 +1143,18 @@ rb_ary_fetch(int argc, VALUE *argv, VALUE ary)
1084
1143
 
1085
1144
  /*
1086
1145
  * call-seq:
1087
- * array.index(obj) -> int or nil
1088
- * array.index {|item| block} -> int or nil
1089
- *
1090
- * Returns the index of the first object in <i>self</i> such that is
1146
+ * ary.index(obj) -> int or nil
1147
+ * ary.index {|item| block} -> int or nil
1148
+ * ary.index -> an_enumerator
1149
+ *
1150
+ * Returns the index of the first object in +self+ such that is
1091
1151
  * <code>==</code> to <i>obj</i>. If a block is given instead of an
1092
1152
  * argument, returns first object for which <em>block</em> is true.
1093
1153
  * Returns <code>nil</code> if no match is found.
1094
- *
1154
+ * See also <code>Array#rindex</code>.
1155
+ *
1156
+ * If neither block nor argument is given, an enumerator is returned instead.
1157
+ *
1095
1158
  * a = [ "a", "b", "c" ]
1096
1159
  * a.index("b") #=> 1
1097
1160
  * a.index("z") #=> nil
@@ -1106,7 +1169,7 @@ rb_ary_index(int argc, VALUE *argv, VALUE ary)
1106
1169
  VALUE val;
1107
1170
  long i;
1108
1171
 
1109
- if (argc == 0) {
1172
+ if (argc == 0) {
1110
1173
  RETURN_ENUMERATOR(ary, 0, 0);
1111
1174
  for (i=0; i<RARRAY_LEN(ary); i++) {
1112
1175
  if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) {
@@ -1115,7 +1178,9 @@ rb_ary_index(int argc, VALUE *argv, VALUE ary)
1115
1178
  }
1116
1179
  return Qnil;
1117
1180
  }
1118
- rb_scan_args(argc, argv, "01", &val);
1181
+ rb_scan_args(argc, argv, "1", &val);
1182
+ if (rb_block_given_p())
1183
+ rb_warn("given block not used");
1119
1184
  for (i=0; i<RARRAY_LEN(ary); i++) {
1120
1185
  if (rb_equal(RARRAY_PTR(ary)[i], val))
1121
1186
  return LONG2NUM(i);
@@ -1125,13 +1190,19 @@ rb_ary_index(int argc, VALUE *argv, VALUE ary)
1125
1190
 
1126
1191
  /*
1127
1192
  * call-seq:
1128
- * array.rindex(obj) -> int or nil
1129
- *
1130
- * Returns the index of the last object in <i>array</i>
1193
+ * ary.rindex(obj) -> int or nil
1194
+ * ary.rindex {|item| block} -> int or nil
1195
+ * ary.rindex -> an_enumerator
1196
+ *
1197
+ * Returns the index of the last object in +self+
1131
1198
  * <code>==</code> to <i>obj</i>. If a block is given instead of an
1132
1199
  * argument, returns first object for which <em>block</em> is
1133
- * true. Returns <code>nil</code> if no match is found.
1134
- *
1200
+ * true, starting from the last object.
1201
+ * Returns <code>nil</code> if no match is found.
1202
+ * See also <code>Array#index</code>.
1203
+ *
1204
+ * If neither block nor argument is given, an enumerator is returned instead.
1205
+ *
1135
1206
  * a = [ "a", "b", "b", "b", "c" ]
1136
1207
  * a.rindex("b") #=> 3
1137
1208
  * a.rindex("z") #=> nil
@@ -1155,7 +1226,9 @@ rb_ary_rindex(int argc, VALUE *argv, VALUE ary)
1155
1226
  }
1156
1227
  return Qnil;
1157
1228
  }
1158
- rb_scan_args(argc, argv, "01", &val);
1229
+ rb_scan_args(argc, argv, "1", &val);
1230
+ if (rb_block_given_p())
1231
+ rb_warn("given block not used");
1159
1232
  while (i--) {
1160
1233
  if (rb_equal(RARRAY_PTR(ary)[i], val))
1161
1234
  return LONG2NUM(i);
@@ -1169,12 +1242,9 @@ rb_ary_rindex(int argc, VALUE *argv, VALUE ary)
1169
1242
  VALUE
1170
1243
  rb_ary_to_ary(VALUE obj)
1171
1244
  {
1172
- if (TYPE(obj) == T_ARRAY) {
1173
- return obj;
1174
- }
1175
- if (rb_respond_to(obj, rb_intern("to_ary"))) {
1176
- return to_ary(obj);
1177
- }
1245
+ VALUE tmp = rb_check_array_type(obj);
1246
+
1247
+ if (!NIL_P(tmp)) return tmp;
1178
1248
  return rb_ary_new3(1, obj);
1179
1249
  }
1180
1250
 
@@ -1187,8 +1257,8 @@ rb_ary_splice(VALUE ary, long beg, long len, VALUE rpl)
1187
1257
  if (beg < 0) {
1188
1258
  beg += RARRAY_LEN(ary);
1189
1259
  if (beg < 0) {
1190
- beg -= RARRAY_LEN(ary);
1191
- rb_raise(rb_eIndexError, "index %ld out of array", beg);
1260
+ rb_raise(rb_eIndexError, "index %ld too small for array; minimum: %ld",
1261
+ beg - RARRAY_LEN(ary), -RARRAY_LEN(ary));
1192
1262
  }
1193
1263
  }
1194
1264
  if (RARRAY_LEN(ary) < len || RARRAY_LEN(ary) < beg + len) {
@@ -1209,7 +1279,7 @@ rb_ary_splice(VALUE ary, long beg, long len, VALUE rpl)
1209
1279
  }
1210
1280
  len = beg + rlen;
1211
1281
  if (len >= ARY_CAPA(ary)) {
1212
- ary_resize_capa(ary, len);
1282
+ ary_double_capa(ary, len);
1213
1283
  }
1214
1284
  rb_mem_clear(RARRAY_PTR(ary) + RARRAY_LEN(ary), beg - RARRAY_LEN(ary));
1215
1285
  if (rlen > 0) {
@@ -1222,7 +1292,7 @@ rb_ary_splice(VALUE ary, long beg, long len, VALUE rpl)
1222
1292
 
1223
1293
  alen = RARRAY_LEN(ary) + rlen - len;
1224
1294
  if (alen >= ARY_CAPA(ary)) {
1225
- ary_resize_capa(ary, alen);
1295
+ ary_double_capa(ary, alen);
1226
1296
  }
1227
1297
 
1228
1298
  if (len != rlen) {
@@ -1236,11 +1306,11 @@ rb_ary_splice(VALUE ary, long beg, long len, VALUE rpl)
1236
1306
  }
1237
1307
  }
1238
1308
 
1239
- /*
1309
+ /*
1240
1310
  * call-seq:
1241
- * array[index] = obj -> obj
1242
- * array[start, length] = obj or an_array or nil -> obj or an_array or nil
1243
- * array[range] = obj or an_array or nil -> obj or an_array or nil
1311
+ * ary[index] = obj -> obj
1312
+ * ary[start, length] = obj or other_ary or nil -> obj or other_ary or nil
1313
+ * ary[range] = obj or other_ary or nil -> obj or other_ary or nil
1244
1314
  *
1245
1315
  * Element Assignment---Sets the element at _index_,
1246
1316
  * or replaces a subarray starting at _start_ and
@@ -1252,7 +1322,7 @@ rb_ary_splice(VALUE ary, long beg, long len, VALUE rpl)
1252
1322
  * zero. An +IndexError+ is raised if a negative index points
1253
1323
  * past the beginning of the array. See also
1254
1324
  * <code>Array#push</code>, and <code>Array#unshift</code>.
1255
- *
1325
+ *
1256
1326
  * a = Array.new
1257
1327
  * a[4] = "4"; #=> [nil, nil, nil, nil, "4"]
1258
1328
  * a[0, 3] = [ 'a', 'b', 'c' ] #=> ["a", "b", "c", nil, "4"]
@@ -1270,6 +1340,7 @@ rb_ary_aset(int argc, VALUE *argv, VALUE ary)
1270
1340
  long offset, beg, len;
1271
1341
 
1272
1342
  if (argc == 3) {
1343
+ rb_ary_modify_check(ary);
1273
1344
  beg = NUM2LONG(argv[0]);
1274
1345
  len = NUM2LONG(argv[1]);
1275
1346
  rb_ary_splice(ary, beg, len, argv[2]);
@@ -1278,6 +1349,7 @@ rb_ary_aset(int argc, VALUE *argv, VALUE ary)
1278
1349
  if (argc != 2) {
1279
1350
  rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc);
1280
1351
  }
1352
+ rb_ary_modify_check(ary);
1281
1353
  if (FIXNUM_P(argv[0])) {
1282
1354
  offset = FIX2LONG(argv[0]);
1283
1355
  goto fixnum;
@@ -1296,11 +1368,11 @@ fixnum:
1296
1368
 
1297
1369
  /*
1298
1370
  * call-seq:
1299
- * array.insert(index, obj...) -> array
1300
- *
1371
+ * ary.insert(index, obj...) -> ary
1372
+ *
1301
1373
  * Inserts the given values before the element with the given index
1302
1374
  * (which may be negative).
1303
- *
1375
+ *
1304
1376
  * a = %w{ a b c d }
1305
1377
  * a.insert(2, 99) #=> ["a", "b", 99, "c", "d"]
1306
1378
  * a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"]
@@ -1311,10 +1383,11 @@ rb_ary_insert(int argc, VALUE *argv, VALUE ary)
1311
1383
  {
1312
1384
  long pos;
1313
1385
 
1314
- if (argc == 1) return ary;
1315
1386
  if (argc < 1) {
1316
1387
  rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
1317
1388
  }
1389
+ rb_ary_modify_check(ary);
1390
+ if (argc == 1) return ary;
1318
1391
  pos = NUM2LONG(argv[0]);
1319
1392
  if (pos == -1) {
1320
1393
  pos = RARRAY_LEN(ary);
@@ -1328,16 +1401,19 @@ rb_ary_insert(int argc, VALUE *argv, VALUE ary)
1328
1401
 
1329
1402
  /*
1330
1403
  * call-seq:
1331
- * array.each {|item| block } -> array
1332
- *
1333
- * Calls <i>block</i> once for each element in <i>self</i>, passing that
1404
+ * ary.each {|item| block } -> ary
1405
+ * ary.each -> an_enumerator
1406
+ *
1407
+ * Calls <i>block</i> once for each element in +self+, passing that
1334
1408
  * element as a parameter.
1335
- *
1409
+ *
1410
+ * If no block is given, an enumerator is returned instead.
1411
+ *
1336
1412
  * a = [ "a", "b", "c" ]
1337
1413
  * a.each {|x| print x, " -- " }
1338
- *
1414
+ *
1339
1415
  * produces:
1340
- *
1416
+ *
1341
1417
  * a -- b -- c --
1342
1418
  */
1343
1419
 
@@ -1355,16 +1431,20 @@ rb_ary_each(VALUE ary)
1355
1431
 
1356
1432
  /*
1357
1433
  * call-seq:
1358
- * array.each_index {|index| block } -> array
1359
- *
1434
+ * ary.each_index {|index| block } -> ary
1435
+ * ary.each_index -> an_enumerator
1436
+ *
1360
1437
  * Same as <code>Array#each</code>, but passes the index of the element
1361
1438
  * instead of the element itself.
1362
- *
1439
+ *
1440
+ * If no block is given, an enumerator is returned instead.
1441
+ *
1442
+ *
1363
1443
  * a = [ "a", "b", "c" ]
1364
1444
  * a.each_index {|x| print x, " -- " }
1365
- *
1445
+ *
1366
1446
  * produces:
1367
- *
1447
+ *
1368
1448
  * 0 -- 1 -- 2 --
1369
1449
  */
1370
1450
 
@@ -1382,16 +1462,17 @@ rb_ary_each_index(VALUE ary)
1382
1462
 
1383
1463
  /*
1384
1464
  * call-seq:
1385
- * array.reverse_each {|item| block }
1386
- *
1387
- * Same as <code>Array#each</code>, but traverses <i>self</i> in reverse
1465
+ * ary.reverse_each {|item| block } -> ary
1466
+ * ary.reverse_each -> an_enumerator
1467
+ *
1468
+ * Same as <code>Array#each</code>, but traverses +self+ in reverse
1388
1469
  * order.
1389
- *
1470
+ *
1390
1471
  * a = [ "a", "b", "c" ]
1391
1472
  * a.reverse_each {|x| print x, " " }
1392
- *
1473
+ *
1393
1474
  * produces:
1394
- *
1475
+ *
1395
1476
  * c b a
1396
1477
  */
1397
1478
 
@@ -1413,10 +1494,10 @@ rb_ary_reverse_each(VALUE ary)
1413
1494
 
1414
1495
  /*
1415
1496
  * call-seq:
1416
- * array.length -> int
1417
- *
1418
- * Returns the number of elements in <i>self</i>. May be zero.
1419
- *
1497
+ * ary.length -> int
1498
+ *
1499
+ * Returns the number of elements in +self+. May be zero.
1500
+ *
1420
1501
  * [ 1, 2, 3, 4, 5 ].length #=> 5
1421
1502
  */
1422
1503
 
@@ -1429,10 +1510,10 @@ rb_ary_length(VALUE ary)
1429
1510
 
1430
1511
  /*
1431
1512
  * call-seq:
1432
- * array.empty? -> true or false
1433
- *
1434
- * Returns <code>true</code> if <i>self</i> array contains no elements.
1435
- *
1513
+ * ary.empty? -> true or false
1514
+ *
1515
+ * Returns <code>true</code> if +self+ contains no elements.
1516
+ *
1436
1517
  * [].empty? #=> true
1437
1518
  */
1438
1519
 
@@ -1444,91 +1525,163 @@ rb_ary_empty_p(VALUE ary)
1444
1525
  return Qfalse;
1445
1526
  }
1446
1527
 
1447
- VALUE
1448
- rb_ary_dup(VALUE ary)
1528
+ static VALUE
1529
+ rb_ary_dup_setup(VALUE ary)
1449
1530
  {
1450
1531
  VALUE dup = rb_ary_new2(RARRAY_LEN(ary));
1451
1532
  int is_embed = ARY_EMBED_P(dup);
1452
1533
  DUPSETUP(dup, ary);
1453
1534
  if (is_embed) FL_SET_EMBED(dup);
1454
- MEMCPY(RARRAY_PTR(dup), RARRAY_PTR(ary), VALUE, RARRAY_LEN(ary));
1455
1535
  ARY_SET_LEN(dup, RARRAY_LEN(ary));
1536
+ return dup;
1537
+ }
1456
1538
 
1539
+ VALUE
1540
+ rb_ary_dup(VALUE ary)
1541
+ {
1542
+ VALUE dup = rb_ary_dup_setup(ary);
1543
+ MEMCPY(RARRAY_PTR(dup), RARRAY_PTR(ary), VALUE, RARRAY_LEN(ary));
1457
1544
  return dup;
1458
1545
  }
1459
1546
 
1547
+ VALUE
1548
+ rb_ary_resurrect(VALUE ary)
1549
+ {
1550
+ return rb_ary_new4(RARRAY_LEN(ary), RARRAY_PTR(ary));
1551
+ }
1552
+
1460
1553
  extern VALUE rb_output_fs;
1461
1554
 
1555
+ static void ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result);
1556
+
1462
1557
  static VALUE
1463
- recursive_join(VALUE ary, VALUE argp, int recur)
1558
+ recursive_join(VALUE obj, VALUE argp, int recur)
1464
1559
  {
1465
1560
  VALUE *arg = (VALUE *)argp;
1561
+ VALUE ary = arg[0];
1562
+ VALUE sep = arg[1];
1563
+ VALUE result = arg[2];
1564
+
1466
1565
  if (recur) {
1467
- return rb_usascii_str_new2("[...]");
1566
+ rb_raise(rb_eArgError, "recursive array join");
1567
+ }
1568
+ else {
1569
+ ary_join_1(obj, ary, sep, 0, result);
1468
1570
  }
1469
- return rb_ary_join(arg[0], arg[1]);
1571
+ return Qnil;
1470
1572
  }
1471
1573
 
1472
- VALUE
1473
- rb_ary_join(VALUE ary, VALUE sep)
1574
+ static void
1575
+ ary_join_0(VALUE ary, VALUE sep, long max, VALUE result)
1474
1576
  {
1475
- long len = 1, i;
1476
- int taint = Qfalse;
1477
- int untrust = Qfalse;
1478
- VALUE result, tmp;
1479
-
1480
- if (RARRAY_LEN(ary) == 0) return rb_str_new(0, 0);
1481
- if (OBJ_TAINTED(ary) || OBJ_TAINTED(sep)) taint = Qtrue;
1482
- if (OBJ_UNTRUSTED(ary) || OBJ_UNTRUSTED(sep)) untrust = Qtrue;
1577
+ long i;
1578
+ VALUE val;
1483
1579
 
1484
- for (i=0; i<RARRAY_LEN(ary); i++) {
1485
- tmp = rb_check_string_type(RARRAY_PTR(ary)[i]);
1486
- len += NIL_P(tmp) ? 10 : RSTRING_LEN(tmp);
1487
- }
1488
- if (!NIL_P(sep)) {
1489
- StringValue(sep);
1490
- len += RSTRING_LEN(sep) * (RARRAY_LEN(ary) - 1);
1580
+ for (i=0; i<max; i++) {
1581
+ val = RARRAY_PTR(ary)[i];
1582
+ if (i > 0 && !NIL_P(sep))
1583
+ rb_str_buf_append(result, sep);
1584
+ rb_str_buf_append(result, val);
1585
+ if (OBJ_TAINTED(val)) OBJ_TAINT(result);
1586
+ if (OBJ_UNTRUSTED(val)) OBJ_TAINT(result);
1491
1587
  }
1492
- result = rb_str_buf_new(len);
1493
- for (i=0; i<RARRAY_LEN(ary); i++) {
1494
- tmp = RARRAY_PTR(ary)[i];
1495
- switch (TYPE(tmp)) {
1588
+ }
1589
+
1590
+ static void
1591
+ ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result)
1592
+ {
1593
+ VALUE val, tmp;
1594
+
1595
+ for (; i<RARRAY_LEN(ary); i++) {
1596
+ if (i > 0 && !NIL_P(sep))
1597
+ rb_str_buf_append(result, sep);
1598
+
1599
+ val = RARRAY_PTR(ary)[i];
1600
+ switch (TYPE(val)) {
1496
1601
  case T_STRING:
1602
+ str_join:
1603
+ rb_str_buf_append(result, val);
1497
1604
  break;
1498
1605
  case T_ARRAY:
1499
- if (tmp == ary) {
1500
- tmp = rb_usascii_str_new2("[...]");
1606
+ obj = val;
1607
+ ary_join:
1608
+ if (val == ary) {
1609
+ rb_raise(rb_eArgError, "recursive array join");
1501
1610
  }
1502
1611
  else {
1503
- VALUE args[2];
1612
+ VALUE args[3];
1504
1613
 
1505
- args[0] = tmp;
1614
+ args[0] = val;
1506
1615
  args[1] = sep;
1507
- tmp = rb_exec_recursive(recursive_join, ary, (VALUE)args);
1616
+ args[2] = result;
1617
+ rb_exec_recursive(recursive_join, obj, (VALUE)args);
1508
1618
  }
1509
1619
  break;
1510
1620
  default:
1511
- tmp = rb_obj_as_string(tmp);
1621
+ tmp = rb_check_string_type(val);
1622
+ if (!NIL_P(tmp)) {
1623
+ val = tmp;
1624
+ goto str_join;
1625
+ }
1626
+ tmp = rb_check_convert_type(val, T_ARRAY, "Array", "to_ary");
1627
+ if (!NIL_P(tmp)) {
1628
+ obj = val;
1629
+ val = tmp;
1630
+ goto ary_join;
1631
+ }
1632
+ val = rb_obj_as_string(val);
1633
+ goto str_join;
1512
1634
  }
1513
- if (i > 0 && !NIL_P(sep))
1514
- rb_str_buf_append(result, sep);
1515
- rb_str_buf_append(result, tmp);
1516
- if (OBJ_TAINTED(tmp)) taint = Qtrue;
1517
- if (OBJ_UNTRUSTED(tmp)) untrust = Qtrue;
1635
+ }
1636
+ }
1637
+
1638
+ VALUE
1639
+ rb_ary_join(VALUE ary, VALUE sep)
1640
+ {
1641
+ long len = 1, i;
1642
+ int taint = FALSE;
1643
+ int untrust = FALSE;
1644
+ VALUE val, tmp, result;
1645
+
1646
+ if (RARRAY_LEN(ary) == 0) return rb_usascii_str_new(0, 0);
1647
+ if (OBJ_TAINTED(ary) || OBJ_TAINTED(sep)) taint = TRUE;
1648
+ if (OBJ_UNTRUSTED(ary) || OBJ_UNTRUSTED(sep)) untrust = TRUE;
1649
+
1650
+ if (!NIL_P(sep)) {
1651
+ StringValue(sep);
1652
+ len += RSTRING_LEN(sep) * (RARRAY_LEN(ary) - 1);
1653
+ }
1654
+ for (i=0; i<RARRAY_LEN(ary); i++) {
1655
+ val = RARRAY_PTR(ary)[i];
1656
+ tmp = rb_check_string_type(val);
1657
+
1658
+ if (NIL_P(tmp) || tmp != val) {
1659
+ result = rb_str_buf_new(len + (RARRAY_LEN(ary)-i)*10);
1660
+ if (taint) OBJ_TAINT(result);
1661
+ if (untrust) OBJ_UNTRUST(result);
1662
+ ary_join_0(ary, sep, i, result);
1663
+ ary_join_1(ary, ary, sep, i, result);
1664
+ return result;
1665
+ }
1666
+
1667
+ len += RSTRING_LEN(tmp);
1518
1668
  }
1519
1669
 
1670
+ result = rb_str_buf_new(len);
1520
1671
  if (taint) OBJ_TAINT(result);
1521
1672
  if (untrust) OBJ_UNTRUST(result);
1673
+ ary_join_0(ary, sep, RARRAY_LEN(ary), result);
1674
+
1522
1675
  return result;
1523
1676
  }
1524
1677
 
1525
1678
  /*
1526
1679
  * call-seq:
1527
- * array.join(sep=$,) -> str
1528
- *
1680
+ * ary.join(sep=$,) -> str
1681
+ *
1529
1682
  * Returns a string created by converting each element of the array to
1530
1683
  * a string, separated by <i>sep</i>.
1531
- *
1684
+ *
1532
1685
  * [ "a", "b", "c" ].join #=> "abc"
1533
1686
  * [ "a", "b", "c" ].join("-") #=> "a-b-c"
1534
1687
  */
@@ -1540,7 +1693,7 @@ rb_ary_join_m(int argc, VALUE *argv, VALUE ary)
1540
1693
 
1541
1694
  rb_scan_args(argc, argv, "01", &sep);
1542
1695
  if (NIL_P(sep)) sep = rb_output_fs;
1543
-
1696
+
1544
1697
  return rb_ary_join(ary, sep);
1545
1698
  }
1546
1699
 
@@ -1556,8 +1709,8 @@ inspect_ary(VALUE ary, VALUE dummy, int recur)
1556
1709
  str = rb_str_buf_new2("[");
1557
1710
  for (i=0; i<RARRAY_LEN(ary); i++) {
1558
1711
  s = rb_inspect(RARRAY_PTR(ary)[i]);
1559
- if (OBJ_TAINTED(s)) tainted = Qtrue;
1560
- if (OBJ_UNTRUSTED(s)) untrust = Qtrue;
1712
+ if (OBJ_TAINTED(s)) tainted = TRUE;
1713
+ if (OBJ_UNTRUSTED(s)) untrust = TRUE;
1561
1714
  if (i > 0) rb_str_buf_cat2(str, ", ");
1562
1715
  rb_str_buf_append(str, s);
1563
1716
  }
@@ -1569,10 +1722,10 @@ inspect_ary(VALUE ary, VALUE dummy, int recur)
1569
1722
 
1570
1723
  /*
1571
1724
  * call-seq:
1572
- * array.to_s -> string
1573
- * array.inspect -> string
1725
+ * ary.to_s -> string
1726
+ * ary.inspect -> string
1574
1727
  *
1575
- * Create a printable version of <i>array</i>.
1728
+ * Creates a string representation of +self+.
1576
1729
  */
1577
1730
 
1578
1731
  static VALUE
@@ -1590,9 +1743,9 @@ rb_ary_to_s(VALUE ary)
1590
1743
 
1591
1744
  /*
1592
1745
  * call-seq:
1593
- * array.to_a -> array
1594
- *
1595
- * Returns _self_. If called on a subclass of Array, converts
1746
+ * ary.to_a -> ary
1747
+ *
1748
+ * Returns +self+. If called on a subclass of Array, converts
1596
1749
  * the receiver to an Array object.
1597
1750
  */
1598
1751
 
@@ -1609,9 +1762,9 @@ rb_ary_to_a(VALUE ary)
1609
1762
 
1610
1763
  /*
1611
1764
  * call-seq:
1612
- * array.to_ary -> array
1613
- *
1614
- * Returns _self_.
1765
+ * ary.to_ary -> ary
1766
+ *
1767
+ * Returns +self+.
1615
1768
  */
1616
1769
 
1617
1770
  static VALUE
@@ -1620,32 +1773,37 @@ rb_ary_to_ary_m(VALUE ary)
1620
1773
  return ary;
1621
1774
  }
1622
1775
 
1776
+ static void
1777
+ ary_reverse(p1, p2)
1778
+ VALUE *p1, *p2;
1779
+ {
1780
+ while (p1 < p2) {
1781
+ VALUE tmp = *p1;
1782
+ *p1++ = *p2;
1783
+ *p2-- = tmp;
1784
+ }
1785
+ }
1786
+
1623
1787
  VALUE
1624
1788
  rb_ary_reverse(VALUE ary)
1625
1789
  {
1626
1790
  VALUE *p1, *p2;
1627
- VALUE tmp;
1628
1791
 
1629
1792
  rb_ary_modify(ary);
1630
1793
  if (RARRAY_LEN(ary) > 1) {
1631
1794
  p1 = RARRAY_PTR(ary);
1632
1795
  p2 = p1 + RARRAY_LEN(ary) - 1; /* points last item */
1633
-
1634
- while (p1 < p2) {
1635
- tmp = *p1;
1636
- *p1++ = *p2;
1637
- *p2-- = tmp;
1638
- }
1796
+ ary_reverse(p1, p2);
1639
1797
  }
1640
1798
  return ary;
1641
1799
  }
1642
1800
 
1643
1801
  /*
1644
1802
  * call-seq:
1645
- * array.reverse! -> array
1646
- *
1647
- * Reverses _self_ in place.
1648
- *
1803
+ * ary.reverse! -> ary
1804
+ *
1805
+ * Reverses +self+ in place.
1806
+ *
1649
1807
  * a = [ "a", "b", "c" ]
1650
1808
  * a.reverse! #=> ["c", "b", "a"]
1651
1809
  * a #=> ["c", "b", "a"]
@@ -1659,10 +1817,10 @@ rb_ary_reverse_bang(VALUE ary)
1659
1817
 
1660
1818
  /*
1661
1819
  * call-seq:
1662
- * array.reverse -> an_array
1663
- *
1664
- * Returns a new array containing <i>self</i>'s elements in reverse order.
1665
- *
1820
+ * ary.reverse -> new_ary
1821
+ *
1822
+ * Returns a new array containing +self+'s elements in reverse order.
1823
+ *
1666
1824
  * [ "a", "b", "c" ].reverse #=> ["c", "b", "a"]
1667
1825
  * [ 1 ].reverse #=> [1]
1668
1826
  */
@@ -1670,7 +1828,111 @@ rb_ary_reverse_bang(VALUE ary)
1670
1828
  static VALUE
1671
1829
  rb_ary_reverse_m(VALUE ary)
1672
1830
  {
1673
- return rb_ary_reverse(rb_ary_dup(ary));
1831
+ VALUE dup = rb_ary_dup_setup(ary);
1832
+ long len = RARRAY_LEN(ary);
1833
+
1834
+ if (len > 0) {
1835
+ VALUE *p1 = RARRAY_PTR(ary);
1836
+ VALUE *p2 = RARRAY_PTR(dup) + len - 1;
1837
+ do *p2-- = *p1++; while (--len > 0);
1838
+ }
1839
+ return dup;
1840
+ }
1841
+
1842
+ static inline long
1843
+ rotate_count(long cnt, long len)
1844
+ {
1845
+ return (cnt < 0) ? (len - (~cnt % len) - 1) : (cnt % len);
1846
+ }
1847
+
1848
+ VALUE
1849
+ rb_ary_rotate(VALUE ary, long cnt)
1850
+ {
1851
+ rb_ary_modify(ary);
1852
+
1853
+ if (cnt != 0) {
1854
+ VALUE *ptr = RARRAY_PTR(ary);
1855
+ long len = RARRAY_LEN(ary);
1856
+
1857
+ if (len > 0 && (cnt = rotate_count(cnt, len)) > 0) {
1858
+ --len;
1859
+ if (cnt < len) ary_reverse(ptr + cnt, ptr + len);
1860
+ if (--cnt > 0) ary_reverse(ptr, ptr + cnt);
1861
+ if (len > 0) ary_reverse(ptr, ptr + len);
1862
+ return ary;
1863
+ }
1864
+ }
1865
+
1866
+ return Qnil;
1867
+ }
1868
+
1869
+ /*
1870
+ * call-seq:
1871
+ * ary.rotate!(cnt=1) -> ary
1872
+ *
1873
+ * Rotates +self+ in place so that the element at +cnt+ comes first,
1874
+ * and returns +self+. If +cnt+ is negative then it rotates in
1875
+ * counter direction.
1876
+ *
1877
+ * a = [ "a", "b", "c", "d" ]
1878
+ * a.rotate! #=> ["b", "c", "d", "a"]
1879
+ * a #=> ["b", "c", "d", "a"]
1880
+ * a.rotate!(2) #=> ["d", "a", "b", "c"]
1881
+ * a.rotate!(-3) #=> ["a", "b", "c", "d"]
1882
+ */
1883
+
1884
+ static VALUE
1885
+ rb_ary_rotate_bang(int argc, VALUE *argv, VALUE ary)
1886
+ {
1887
+ long n = 1;
1888
+
1889
+ switch (argc) {
1890
+ case 1: n = NUM2LONG(argv[0]);
1891
+ case 0: break;
1892
+ default: rb_scan_args(argc, argv, "01", NULL);
1893
+ }
1894
+ rb_ary_rotate(ary, n);
1895
+ return ary;
1896
+ }
1897
+
1898
+ /*
1899
+ * call-seq:
1900
+ * ary.rotate([n = 1]) -> new_ary
1901
+ *
1902
+ * Returns new array by rotating +self+, whose first element is the
1903
+ * element at +cnt+ in +self+. If +cnt+ is negative then it rotates
1904
+ * in counter direction.
1905
+ *
1906
+ * a = [ "a", "b", "c", "d" ]
1907
+ * a.rotate #=> ["b", "c", "d", "a"]
1908
+ * a #=> ["a", "b", "c", "d"]
1909
+ * a.rotate(2) #=> ["c", "d", "a", "b"]
1910
+ * a.rotate(-3) #=> ["b", "c", "d", "a"]
1911
+ */
1912
+
1913
+ static VALUE
1914
+ rb_ary_rotate_m(int argc, VALUE *argv, VALUE ary)
1915
+ {
1916
+ VALUE rotated, *ptr, *ptr2;
1917
+ long len, cnt = 1;
1918
+
1919
+ switch (argc) {
1920
+ case 1: cnt = NUM2LONG(argv[0]);
1921
+ case 0: break;
1922
+ default: rb_scan_args(argc, argv, "01", NULL);
1923
+ }
1924
+
1925
+ len = RARRAY_LEN(ary);
1926
+ rotated = rb_ary_dup_setup(ary);
1927
+ if (len > 0) {
1928
+ cnt = rotate_count(cnt, len);
1929
+ ptr = RARRAY_PTR(ary);
1930
+ ptr2 = RARRAY_PTR(rotated);
1931
+ len -= cnt;
1932
+ MEMCPY(ptr2, ptr + cnt, VALUE, len);
1933
+ MEMCPY(ptr2 + len, ptr, VALUE, cnt);
1934
+ }
1935
+ return rotated;
1674
1936
  }
1675
1937
 
1676
1938
  struct ary_sort_data {
@@ -1744,15 +2006,15 @@ sort_2(const void *ap, const void *bp, void *dummy)
1744
2006
 
1745
2007
  /*
1746
2008
  * call-seq:
1747
- * array.sort! -> array
1748
- * array.sort! {| a,b | block } -> array
1749
- *
1750
- * Sorts _self_. Comparisons for
2009
+ * ary.sort! -> ary
2010
+ * ary.sort! {| a,b | block } -> ary
2011
+ *
2012
+ * Sorts +self+. Comparisons for
1751
2013
  * the sort will be done using the <code><=></code> operator or using
1752
2014
  * an optional code block. The block implements a comparison between
1753
2015
  * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also
1754
2016
  * <code>Enumerable#sort_by</code>.
1755
- *
2017
+ *
1756
2018
  * a = [ "d", "a", "e", "c", "b" ]
1757
2019
  * a.sort #=> ["a", "b", "c", "d", "e"]
1758
2020
  * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
@@ -1805,7 +2067,7 @@ rb_ary_sort_bang(VALUE ary)
1805
2067
  ARY_SET_PTR(ary, RARRAY_PTR(tmp));
1806
2068
  ARY_SET_HEAP_LEN(ary, RARRAY_LEN(tmp));
1807
2069
  ARY_SET_CAPA(ary, ARY_CAPA(tmp));
1808
- }
2070
+ }
1809
2071
  /* tmp was lost ownership for the ptr */
1810
2072
  FL_UNSET(tmp, FL_FREEZE);
1811
2073
  FL_SET_EMBED(tmp);
@@ -1820,15 +2082,15 @@ rb_ary_sort_bang(VALUE ary)
1820
2082
 
1821
2083
  /*
1822
2084
  * call-seq:
1823
- * array.sort -> an_array
1824
- * array.sort {| a,b | block } -> an_array
1825
- *
1826
- * Returns a new array created by sorting <i>self</i>. Comparisons for
2085
+ * ary.sort -> new_ary
2086
+ * ary.sort {| a,b | block } -> new_ary
2087
+ *
2088
+ * Returns a new array created by sorting +self+. Comparisons for
1827
2089
  * the sort will be done using the <code><=></code> operator or using
1828
2090
  * an optional code block. The block implements a comparison between
1829
2091
  * <i>a</i> and <i>b</i>, returning -1, 0, or +1. See also
1830
2092
  * <code>Enumerable#sort_by</code>.
1831
- *
2093
+ *
1832
2094
  * a = [ "d", "a", "e", "c", "b" ]
1833
2095
  * a.sort #=> ["a", "b", "c", "d", "e"]
1834
2096
  * a.sort {|x,y| y <=> x } #=> ["e", "d", "c", "b", "a"]
@@ -1843,15 +2105,50 @@ rb_ary_sort(VALUE ary)
1843
2105
  }
1844
2106
 
1845
2107
 
2108
+ static VALUE
2109
+ sort_by_i(VALUE i)
2110
+ {
2111
+ return rb_yield(i);
2112
+ }
2113
+
1846
2114
  /*
1847
2115
  * call-seq:
1848
- * array.collect {|item| block } -> an_array
1849
- * array.map {|item| block } -> an_array
1850
- *
1851
- * Invokes <i>block</i> once for each element of <i>self</i>. Creates a
2116
+ * ary.sort_by! {| obj | block } -> ary
2117
+ * ary.sort_by! -> an_enumerator
2118
+ *
2119
+ * Sorts +self+ in place using a set of keys generated by mapping the
2120
+ * values in +self+ through the given block.
2121
+ *
2122
+ * If no block is given, an enumerator is returned instead.
2123
+ *
2124
+ */
2125
+
2126
+ static VALUE
2127
+ rb_ary_sort_by_bang(VALUE ary)
2128
+ {
2129
+ VALUE sorted;
2130
+
2131
+ RETURN_ENUMERATOR(ary, 0, 0);
2132
+ rb_ary_modify(ary);
2133
+ sorted = rb_block_call(ary, rb_intern("sort_by"), 0, 0, sort_by_i, 0);
2134
+ rb_ary_replace(ary, sorted);
2135
+ return ary;
2136
+ }
2137
+
2138
+
2139
+ /*
2140
+ * call-seq:
2141
+ * ary.collect {|item| block } -> new_ary
2142
+ * ary.map {|item| block } -> new_ary
2143
+ * ary.collect -> an_enumerator
2144
+ * ary.map -> an_enumerator
2145
+ *
2146
+ * Invokes <i>block</i> once for each element of +self+. Creates a
1852
2147
  * new array containing the values returned by the block.
1853
2148
  * See also <code>Enumerable#collect</code>.
1854
- *
2149
+ *
2150
+ * If no block is given, an enumerator is returned instead.
2151
+ *
1855
2152
  * a = [ "a", "b", "c", "d" ]
1856
2153
  * a.collect {|x| x + "!" } #=> ["a!", "b!", "c!", "d!"]
1857
2154
  * a #=> ["a", "b", "c", "d"]
@@ -1872,15 +2169,19 @@ rb_ary_collect(VALUE ary)
1872
2169
  }
1873
2170
 
1874
2171
 
1875
- /*
2172
+ /*
1876
2173
  * call-seq:
1877
- * array.collect! {|item| block } -> array
1878
- * array.map! {|item| block } -> array
2174
+ * ary.collect! {|item| block } -> ary
2175
+ * ary.map! {|item| block } -> ary
2176
+ * ary.collect -> an_enumerator
2177
+ * ary.map -> an_enumerator
1879
2178
  *
1880
- * Invokes the block once for each element of _self_, replacing the
2179
+ * Invokes the block once for each element of +self+, replacing the
1881
2180
  * element with the value returned by _block_.
1882
2181
  * See also <code>Enumerable#collect</code>.
1883
- *
2182
+ *
2183
+ * If no block is given, an enumerator is returned instead.
2184
+ *
1884
2185
  * a = [ "a", "b", "c", "d" ]
1885
2186
  * a.collect! {|x| x + "!" }
1886
2187
  * a #=> [ "a!", "b!", "c!", "d!" ]
@@ -1927,15 +2228,15 @@ rb_get_values_at(VALUE obj, long olen, int argc, VALUE *argv, VALUE (*func) (VAL
1927
2228
  return result;
1928
2229
  }
1929
2230
 
1930
- /*
2231
+ /*
1931
2232
  * call-seq:
1932
- * array.values_at(selector,... ) -> an_array
2233
+ * ary.values_at(selector,... ) -> new_ary
1933
2234
  *
1934
2235
  * Returns an array containing the elements in
1935
- * _self_ corresponding to the given selector(s). The selectors
1936
- * may be either integer indices or ranges.
2236
+ * +self+ corresponding to the given selector(s). The selectors
2237
+ * may be either integer indices or ranges.
1937
2238
  * See also <code>Array#select</code>.
1938
- *
2239
+ *
1939
2240
  * a = %w{ a b c d e f }
1940
2241
  * a.values_at(1, 3, 5)
1941
2242
  * a.values_at(1, 3, 5, 7)
@@ -1952,12 +2253,15 @@ rb_ary_values_at(int argc, VALUE *argv, VALUE ary)
1952
2253
 
1953
2254
  /*
1954
2255
  * call-seq:
1955
- * array.select {|item| block } -> an_array
1956
- *
1957
- * Invokes the block passing in successive elements from <i>array</i>,
2256
+ * ary.select {|item| block } -> new_ary
2257
+ * ary.select -> an_enumerator
2258
+ *
2259
+ * Invokes the block passing in successive elements from +self+,
1958
2260
  * returning an array containing those elements for which the block
1959
2261
  * returns a true value (equivalent to <code>Enumerable#select</code>).
1960
- *
2262
+ *
2263
+ * If no block is given, an enumerator is returned instead.
2264
+ *
1961
2265
  * a = %w{ a b c d e f }
1962
2266
  * a.select {|v| v =~ /[aeiou]/} #=> ["a", "e"]
1963
2267
  */
@@ -1980,14 +2284,76 @@ rb_ary_select(VALUE ary)
1980
2284
 
1981
2285
  /*
1982
2286
  * call-seq:
1983
- * array.delete(obj) -> obj or nil
1984
- * array.delete(obj) { block } -> obj or nil
1985
- *
1986
- * Deletes items from <i>self</i> that are equal to <i>obj</i>. If
2287
+ * ary.select! {|item| block } -> new_ary or nil
2288
+ * ary.select! -> an_enumerator
2289
+ *
2290
+ * Invokes the block passing in successive elements from
2291
+ * +self+, deleting elements for which the block returns a
2292
+ * false value. It returns +self+ if changes were made,
2293
+ * otherwise it returns <code>nil</code>.
2294
+ * See also <code>Array#keep_if</code>
2295
+ *
2296
+ * If no block is given, an enumerator is returned instead.
2297
+ *
2298
+ */
2299
+
2300
+ static VALUE
2301
+ rb_ary_select_bang(VALUE ary)
2302
+ {
2303
+ long i1, i2;
2304
+
2305
+ RETURN_ENUMERATOR(ary, 0, 0);
2306
+ rb_ary_modify(ary);
2307
+ for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
2308
+ VALUE v = RARRAY_PTR(ary)[i1];
2309
+ if (!RTEST(rb_yield(v))) continue;
2310
+ if (i1 != i2) {
2311
+ rb_ary_store(ary, i2, v);
2312
+ }
2313
+ i2++;
2314
+ }
2315
+
2316
+ if (RARRAY_LEN(ary) == i2) return Qnil;
2317
+ if (i2 < RARRAY_LEN(ary))
2318
+ ARY_SET_LEN(ary, i2);
2319
+ return ary;
2320
+ }
2321
+
2322
+ /*
2323
+ * call-seq:
2324
+ * ary.keep_if {|item| block } -> ary
2325
+ * ary.keep_if -> an_enumerator
2326
+ *
2327
+ * Deletes every element of +self+ for which <i>block</i> evaluates
2328
+ * to false.
2329
+ * See also <code>Array#select!</code>
2330
+ *
2331
+ * If no block is given, an enumerator is returned instead.
2332
+ *
2333
+ * a = %w{ a b c d e f }
2334
+ * a.keep_if {|v| v =~ /[aeiou]/} #=> ["a", "e"]
2335
+ */
2336
+
2337
+ static VALUE
2338
+ rb_ary_keep_if(VALUE ary)
2339
+ {
2340
+ RETURN_ENUMERATOR(ary, 0, 0);
2341
+ rb_ary_select_bang(ary);
2342
+ return ary;
2343
+ }
2344
+
2345
+ /*
2346
+ * call-seq:
2347
+ * ary.delete(obj) -> obj or nil
2348
+ * ary.delete(obj) { block } -> obj or nil
2349
+ *
2350
+ * Deletes items from +self+ that are equal to <i>obj</i>.
2351
+ * If any items are found, returns <i>obj</i>. If
1987
2352
  * the item is not found, returns <code>nil</code>. If the optional
1988
2353
  * code block is given, returns the result of <i>block</i> if the item
1989
- * is not found.
1990
- *
2354
+ * is not found. (To remove <code>nil</code> elements and
2355
+ * get an informative return value, use #compact!)
2356
+ *
1991
2357
  * a = [ "a", "b", "b", "b", "c" ]
1992
2358
  * a.delete("b") #=> "b"
1993
2359
  * a #=> ["a", "c"]
@@ -2055,12 +2421,12 @@ rb_ary_delete_at(VALUE ary, long pos)
2055
2421
 
2056
2422
  /*
2057
2423
  * call-seq:
2058
- * array.delete_at(index) -> obj or nil
2059
- *
2424
+ * ary.delete_at(index) -> obj or nil
2425
+ *
2060
2426
  * Deletes the element at the specified index, returning that element,
2061
2427
  * or <code>nil</code> if the index is out of range. See also
2062
2428
  * <code>Array#slice!</code>.
2063
- *
2429
+ *
2064
2430
  * a = %w( ant bat cat dog )
2065
2431
  * a.delete_at(2) #=> "cat"
2066
2432
  * a #=> ["ant", "bat", "dog"]
@@ -2075,14 +2441,14 @@ rb_ary_delete_at_m(VALUE ary, VALUE pos)
2075
2441
 
2076
2442
  /*
2077
2443
  * call-seq:
2078
- * array.slice!(index) -> obj or nil
2079
- * array.slice!(start, length) -> sub_array or nil
2080
- * array.slice!(range) -> sub_array or nil
2081
- *
2444
+ * ary.slice!(index) -> obj or nil
2445
+ * ary.slice!(start, length) -> new_ary or nil
2446
+ * ary.slice!(range) -> new_ary or nil
2447
+ *
2082
2448
  * Deletes the element(s) given by an index (optionally with a length)
2083
- * or by a range. Returns the deleted object, subarray, or
2449
+ * or by a range. Returns the deleted object (or objects), or
2084
2450
  * <code>nil</code> if the index is out of range.
2085
- *
2451
+ *
2086
2452
  * a = [ "a", "b", "c" ]
2087
2453
  * a.slice!(1) #=> "b"
2088
2454
  * a #=> ["a", "c"]
@@ -2099,9 +2465,9 @@ rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
2099
2465
  long pos, len, orig_len;
2100
2466
 
2101
2467
  rb_ary_modify_check(ary);
2102
- if (rb_scan_args(argc, argv, "11", &arg1, &arg2) == 2) {
2103
- pos = NUM2LONG(arg1);
2104
- len = NUM2LONG(arg2);
2468
+ if (argc == 2) {
2469
+ pos = NUM2LONG(argv[0]);
2470
+ len = NUM2LONG(argv[1]);
2105
2471
  delete_pos_len:
2106
2472
  if (len < 0) return Qnil;
2107
2473
  orig_len = RARRAY_LEN(ary);
@@ -2120,6 +2486,12 @@ rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
2120
2486
  return arg2;
2121
2487
  }
2122
2488
 
2489
+ if (argc != 1) {
2490
+ /* error report */
2491
+ rb_scan_args(argc, argv, "11", NULL, NULL);
2492
+ }
2493
+ arg1 = argv[0];
2494
+
2123
2495
  if (!FIXNUM_P(arg1)) {
2124
2496
  switch (rb_range_beg_len(arg1, &pos, &len, RARRAY_LEN(ary), 0)) {
2125
2497
  case Qtrue:
@@ -2139,12 +2511,16 @@ rb_ary_slice_bang(int argc, VALUE *argv, VALUE ary)
2139
2511
 
2140
2512
  /*
2141
2513
  * call-seq:
2142
- * array.reject! {|item| block } -> array or nil
2143
- *
2514
+ * ary.reject! {|item| block } -> ary or nil
2515
+ * ary.reject! -> an_enumerator
2516
+ *
2144
2517
  * Equivalent to <code>Array#delete_if</code>, deleting elements from
2145
- * _self_ for which the block evaluates to true, but returns
2146
- * <code>nil</code> if no changes were made. Also see
2147
- * <code>Enumerable#reject</code>.
2518
+ * +self+ for which the block evaluates to true, but returns
2519
+ * <code>nil</code> if no changes were made.
2520
+ * See also <code>Enumerable#reject</code> and <code>Array#delete_if</code>.
2521
+ *
2522
+ * If no block is given, an enumerator is returned instead.
2523
+ *
2148
2524
  */
2149
2525
 
2150
2526
  static VALUE
@@ -2171,10 +2547,15 @@ rb_ary_reject_bang(VALUE ary)
2171
2547
 
2172
2548
  /*
2173
2549
  * call-seq:
2174
- * array.reject {|item| block } -> an_array
2175
- *
2176
- * Returns a new array containing the items in _self_
2550
+ * ary.reject {|item| block } -> new_ary
2551
+ * ary.reject -> an_enumerator
2552
+ *
2553
+ * Returns a new array containing the items in +self+
2177
2554
  * for which the block is not true.
2555
+ * See also <code>Array#delete_if</code>
2556
+ *
2557
+ * If no block is given, an enumerator is returned instead.
2558
+ *
2178
2559
  */
2179
2560
 
2180
2561
  static VALUE
@@ -2188,11 +2569,15 @@ rb_ary_reject(VALUE ary)
2188
2569
 
2189
2570
  /*
2190
2571
  * call-seq:
2191
- * array.delete_if {|item| block } -> array
2192
- *
2193
- * Deletes every element of <i>self</i> for which <i>block</i> evaluates
2194
- * to <code>true</code>.
2195
- *
2572
+ * ary.delete_if {|item| block } -> ary
2573
+ * ary.delete_if -> an_enumerator
2574
+ *
2575
+ * Deletes every element of +self+ for which <i>block</i> evaluates
2576
+ * to true.
2577
+ * See also <code>Array#reject!</code>
2578
+ *
2579
+ * If no block is given, an enumerator is returned instead.
2580
+ *
2196
2581
  * a = [ "a", "b", "c" ]
2197
2582
  * a.delete_if {|x| x >= "b" } #=> ["a"]
2198
2583
  */
@@ -2230,18 +2615,18 @@ take_items(VALUE obj, long n)
2230
2615
 
2231
2616
  /*
2232
2617
  * call-seq:
2233
- * array.zip(arg, ...) -> an_array
2234
- * array.zip(arg, ...) {| arr | block } -> nil
2235
- *
2618
+ * ary.zip(arg, ...) -> new_ary
2619
+ * ary.zip(arg, ...) {| arr | block } -> nil
2620
+ *
2236
2621
  * Converts any arguments to arrays, then merges elements of
2237
- * <i>self</i> with corresponding elements from each argument. This
2622
+ * +self+ with corresponding elements from each argument. This
2238
2623
  * generates a sequence of <code>self.size</code> <em>n</em>-element
2239
2624
  * arrays, where <em>n</em> is one more that the count of arguments. If
2240
2625
  * the size of any argument is less than <code>enumObj.size</code>,
2241
- * <code>nil</code> values are supplied. If a block given, it is
2626
+ * <code>nil</code> values are supplied. If a block is given, it is
2242
2627
  * invoked for each output array, otherwise an array of arrays is
2243
2628
  * returned.
2244
- *
2629
+ *
2245
2630
  * a = [ 4, 5, 6 ]
2246
2631
  * b = [ 7, 8, 9 ]
2247
2632
  * [1,2,3].zip(a, b) #=> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
@@ -2283,11 +2668,11 @@ rb_ary_zip(int argc, VALUE *argv, VALUE ary)
2283
2668
 
2284
2669
  /*
2285
2670
  * call-seq:
2286
- * array.transpose -> an_array
2287
- *
2288
- * Assumes that <i>self</i> is an array of arrays and transposes the
2671
+ * ary.transpose -> new_ary
2672
+ *
2673
+ * Assumes that +self+ is an array of arrays and transposes the
2289
2674
  * rows and columns.
2290
- *
2675
+ *
2291
2676
  * a = [[1,2], [3,4], [5,6]]
2292
2677
  * a.transpose #=> [[1, 3, 5], [2, 4, 6]]
2293
2678
  */
@@ -2322,11 +2707,11 @@ rb_ary_transpose(VALUE ary)
2322
2707
 
2323
2708
  /*
2324
2709
  * call-seq:
2325
- * array.replace(other_array) -> array
2326
- *
2327
- * Replaces the contents of <i>self</i> with the contents of
2328
- * <i>other_array</i>, truncating or expanding if necessary.
2329
- *
2710
+ * ary.replace(other_ary) -> ary
2711
+ *
2712
+ * Replaces the contents of +self+ with the contents of
2713
+ * <i>other_ary</i>, truncating or expanding if necessary.
2714
+ *
2330
2715
  * a = [ "a", "b", "c", "d", "e" ]
2331
2716
  * a.replace([ "x", "y", "z" ]) #=> ["x", "y", "z"]
2332
2717
  * a #=> ["x", "y", "z"]
@@ -2335,14 +2720,14 @@ rb_ary_transpose(VALUE ary)
2335
2720
  VALUE
2336
2721
  rb_ary_replace(VALUE copy, VALUE orig)
2337
2722
  {
2338
- orig = to_ary(orig);
2339
2723
  rb_ary_modify_check(copy);
2724
+ orig = to_ary(orig);
2340
2725
  if (copy == orig) return copy;
2341
2726
 
2342
2727
  if (RARRAY_LEN(orig) <= RARRAY_EMBED_LEN_MAX) {
2343
2728
  VALUE *ptr;
2344
2729
  VALUE shared = 0;
2345
-
2730
+
2346
2731
  if (ARY_OWNS_HEAP_P(copy)) {
2347
2732
  xfree(RARRAY_PTR(copy));
2348
2733
  }
@@ -2362,7 +2747,8 @@ rb_ary_replace(VALUE copy, VALUE orig)
2362
2747
  VALUE shared = ary_make_shared(orig);
2363
2748
  if (ARY_OWNS_HEAP_P(copy)) {
2364
2749
  xfree(RARRAY_PTR(copy));
2365
- } else {
2750
+ }
2751
+ else {
2366
2752
  rb_ary_unshare_safe(copy);
2367
2753
  }
2368
2754
  FL_UNSET_EMBED(copy);
@@ -2373,11 +2759,11 @@ rb_ary_replace(VALUE copy, VALUE orig)
2373
2759
  return copy;
2374
2760
  }
2375
2761
 
2376
- /*
2762
+ /*
2377
2763
  * call-seq:
2378
- * array.clear -> array
2764
+ * ary.clear -> ary
2379
2765
  *
2380
- * Removes all elements from _self_.
2766
+ * Removes all elements from +self+.
2381
2767
  *
2382
2768
  * a = [ "a", "b", "c", "d", "e" ]
2383
2769
  * a.clear #=> [ ]
@@ -2396,20 +2782,21 @@ rb_ary_clear(VALUE ary)
2396
2782
 
2397
2783
  /*
2398
2784
  * call-seq:
2399
- * array.fill(obj) -> array
2400
- * array.fill(obj, start [, length]) -> array
2401
- * array.fill(obj, range ) -> array
2402
- * array.fill {|index| block } -> array
2403
- * array.fill(start [, length] ) {|index| block } -> array
2404
- * array.fill(range) {|index| block } -> array
2405
- *
2406
- * The first three forms set the selected elements of <i>self</i> (which
2785
+ * ary.fill(obj) -> ary
2786
+ * ary.fill(obj, start [, length]) -> ary
2787
+ * ary.fill(obj, range ) -> ary
2788
+ * ary.fill {|index| block } -> ary
2789
+ * ary.fill(start [, length] ) {|index| block } -> ary
2790
+ * ary.fill(range) {|index| block } -> ary
2791
+ *
2792
+ * The first three forms set the selected elements of +self+ (which
2407
2793
  * may be the entire array) to <i>obj</i>. A <i>start</i> of
2408
2794
  * <code>nil</code> is equivalent to zero. A <i>length</i> of
2409
2795
  * <code>nil</code> is equivalent to <i>self.length</i>. The last three
2410
2796
  * forms fill the array with the value of the block. The block is
2411
2797
  * passed the absolute index of each element to be filled.
2412
- *
2798
+ * Negative values of <i>start</i> count from the end of the array.
2799
+ *
2413
2800
  * a = [ "a", "b", "c", "d" ]
2414
2801
  * a.fill("x") #=> ["x", "x", "x", "x"]
2415
2802
  * a.fill("z", 2, 2) #=> ["x", "x", "z", "z"]
@@ -2424,10 +2811,10 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
2424
2811
  VALUE item, arg1, arg2;
2425
2812
  long beg = 0, end = 0, len = 0;
2426
2813
  VALUE *p, *pend;
2427
- int block_p = Qfalse;
2814
+ int block_p = FALSE;
2428
2815
 
2429
2816
  if (rb_block_given_p()) {
2430
- block_p = Qtrue;
2817
+ block_p = TRUE;
2431
2818
  rb_scan_args(argc, argv, "02", &arg1, &arg2);
2432
2819
  argc += 1; /* hackish */
2433
2820
  }
@@ -2489,13 +2876,13 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
2489
2876
  return ary;
2490
2877
  }
2491
2878
 
2492
- /*
2879
+ /*
2493
2880
  * call-seq:
2494
- * array + other_array -> an_array
2881
+ * ary + other_ary -> new_ary
2495
2882
  *
2496
2883
  * Concatenation---Returns a new array built by concatenating the
2497
2884
  * two arrays together to produce a third array.
2498
- *
2885
+ *
2499
2886
  * [ 1, 2, 3 ] + [ 4, 5 ] #=> [ 1, 2, 3, 4, 5 ]
2500
2887
  */
2501
2888
 
@@ -2514,12 +2901,12 @@ rb_ary_plus(VALUE x, VALUE y)
2514
2901
  return z;
2515
2902
  }
2516
2903
 
2517
- /*
2904
+ /*
2518
2905
  * call-seq:
2519
- * array.concat(other_array) -> array
2906
+ * ary.concat(other_ary) -> ary
2907
+ *
2908
+ * Appends the elements of <i>other_ary</i> to +self+.
2520
2909
  *
2521
- * Appends the elements in other_array to _self_.
2522
- *
2523
2910
  * [ "a", "b" ].concat( ["c", "d"] ) #=> [ "a", "b", "c", "d" ]
2524
2911
  */
2525
2912
 
@@ -2527,6 +2914,7 @@ rb_ary_plus(VALUE x, VALUE y)
2527
2914
  VALUE
2528
2915
  rb_ary_concat(VALUE x, VALUE y)
2529
2916
  {
2917
+ rb_ary_modify_check(x);
2530
2918
  y = to_ary(y);
2531
2919
  if (RARRAY_LEN(y) > 0) {
2532
2920
  rb_ary_splice(x, RARRAY_LEN(x), 0, y);
@@ -2535,14 +2923,14 @@ rb_ary_concat(VALUE x, VALUE y)
2535
2923
  }
2536
2924
 
2537
2925
 
2538
- /*
2926
+ /*
2539
2927
  * call-seq:
2540
- * array * int -> an_array
2541
- * array * str -> a_string
2928
+ * ary * int -> new_ary
2929
+ * ary * str -> new_string
2542
2930
  *
2543
2931
  * Repetition---With a String argument, equivalent to
2544
2932
  * self.join(str). Otherwise, returns a new array
2545
- * built by concatenating the _int_ copies of _self_.
2933
+ * built by concatenating the _int_ copies of +self+.
2546
2934
  *
2547
2935
  *
2548
2936
  * [ 1, 2, 3 ] * 3 #=> [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ]
@@ -2553,8 +2941,8 @@ rb_ary_concat(VALUE x, VALUE y)
2553
2941
  static VALUE
2554
2942
  rb_ary_times(VALUE ary, VALUE times)
2555
2943
  {
2556
- VALUE ary2, tmp;
2557
- long i, len;
2944
+ VALUE ary2, tmp, *ptr, *ptr2;
2945
+ long i, t, len;
2558
2946
 
2559
2947
  tmp = rb_check_string_type(times);
2560
2948
  if (!NIL_P(tmp)) {
@@ -2577,8 +2965,11 @@ rb_ary_times(VALUE ary, VALUE times)
2577
2965
  ary2 = ary_new(rb_obj_class(ary), len);
2578
2966
  ARY_SET_LEN(ary2, len);
2579
2967
 
2580
- for (i=0; i<len; i+=RARRAY_LEN(ary)) {
2581
- MEMCPY(RARRAY_PTR(ary2)+i, RARRAY_PTR(ary), VALUE, RARRAY_LEN(ary));
2968
+ ptr = RARRAY_PTR(ary);
2969
+ ptr2 = RARRAY_PTR(ary2);
2970
+ t = RARRAY_LEN(ary);
2971
+ for (i=0; i<len; i+=t) {
2972
+ MEMCPY(ptr2+i, ptr, VALUE, t);
2582
2973
  }
2583
2974
  out:
2584
2975
  OBJ_INFECT(ary2, ary);
@@ -2586,9 +2977,9 @@ rb_ary_times(VALUE ary, VALUE times)
2586
2977
  return ary2;
2587
2978
  }
2588
2979
 
2589
- /*
2980
+ /*
2590
2981
  * call-seq:
2591
- * array.assoc(obj) -> an_array or nil
2982
+ * ary.assoc(obj) -> new_ary or nil
2592
2983
  *
2593
2984
  * Searches through an array whose elements are also arrays
2594
2985
  * comparing _obj_ with the first element of each contained array
@@ -2623,13 +3014,13 @@ rb_ary_assoc(VALUE ary, VALUE key)
2623
3014
 
2624
3015
  /*
2625
3016
  * call-seq:
2626
- * array.rassoc(obj) -> an_array or nil
2627
- *
3017
+ * ary.rassoc(obj) -> new_ary or nil
3018
+ *
2628
3019
  * Searches through the array whose elements are also arrays. Compares
2629
3020
  * _obj_ with the second element of each contained array using
2630
3021
  * <code>==</code>. Returns the first contained array that matches. See
2631
3022
  * also <code>Array#assoc</code>.
2632
- *
3023
+ *
2633
3024
  * a = [ [ 1, "one"], [2, "two"], [3, "three"], ["ii", "two"] ]
2634
3025
  * a.rassoc("two") #=> [2, "two"]
2635
3026
  * a.rassoc("four") #=> nil
@@ -2656,7 +3047,7 @@ recursive_equal(VALUE ary1, VALUE ary2, int recur)
2656
3047
  {
2657
3048
  long i;
2658
3049
 
2659
- if (recur) return Qfalse;
3050
+ if (recur) return Qtrue; /* Subtle! */
2660
3051
  for (i=0; i<RARRAY_LEN(ary1); i++) {
2661
3052
  if (!rb_equal(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i)))
2662
3053
  return Qfalse;
@@ -2664,9 +3055,9 @@ recursive_equal(VALUE ary1, VALUE ary2, int recur)
2664
3055
  return Qtrue;
2665
3056
  }
2666
3057
 
2667
- /*
3058
+ /*
2668
3059
  * call-seq:
2669
- * array == other_array -> bool
3060
+ * ary == other_ary -> bool
2670
3061
  *
2671
3062
  * Equality---Two arrays are equal if they contain the same number
2672
3063
  * of elements and if each element is equal to (according to
@@ -2689,7 +3080,7 @@ rb_ary_equal(VALUE ary1, VALUE ary2)
2689
3080
  return rb_equal(ary2, ary1);
2690
3081
  }
2691
3082
  if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return Qfalse;
2692
- return rb_exec_recursive(recursive_equal, ary1, ary2);
3083
+ return rb_exec_recursive_paired(recursive_equal, ary1, ary2, ary2);
2693
3084
  }
2694
3085
 
2695
3086
  static VALUE
@@ -2697,7 +3088,7 @@ recursive_eql(VALUE ary1, VALUE ary2, int recur)
2697
3088
  {
2698
3089
  long i;
2699
3090
 
2700
- if (recur) return Qfalse;
3091
+ if (recur) return Qtrue; /* Subtle! */
2701
3092
  for (i=0; i<RARRAY_LEN(ary1); i++) {
2702
3093
  if (!rb_eql(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i)))
2703
3094
  return Qfalse;
@@ -2707,9 +3098,9 @@ recursive_eql(VALUE ary1, VALUE ary2, int recur)
2707
3098
 
2708
3099
  /*
2709
3100
  * call-seq:
2710
- * array.eql?(other) -> true or false
3101
+ * ary.eql?(other) -> true or false
2711
3102
  *
2712
- * Returns <code>true</code> if _array_ and _other_ are the same object,
3103
+ * Returns <code>true</code> if +self+ and _other_ are the same object,
2713
3104
  * or are both arrays with the same content.
2714
3105
  */
2715
3106
 
@@ -2719,30 +3110,33 @@ rb_ary_eql(VALUE ary1, VALUE ary2)
2719
3110
  if (ary1 == ary2) return Qtrue;
2720
3111
  if (TYPE(ary2) != T_ARRAY) return Qfalse;
2721
3112
  if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return Qfalse;
2722
- return rb_exec_recursive(recursive_eql, ary1, ary2);
3113
+ return rb_exec_recursive_paired(recursive_eql, ary1, ary2, ary2);
2723
3114
  }
2724
3115
 
2725
3116
  static VALUE
2726
3117
  recursive_hash(VALUE ary, VALUE dummy, int recur)
2727
3118
  {
2728
- long i, h;
3119
+ long i;
3120
+ st_index_t h;
2729
3121
  VALUE n;
2730
3122
 
3123
+ h = rb_hash_start(RARRAY_LEN(ary));
2731
3124
  if (recur) {
2732
- return LONG2FIX(0);
3125
+ h = rb_hash_uint(h, NUM2LONG(rb_hash(rb_cArray)));
2733
3126
  }
2734
- h = RARRAY_LEN(ary);
2735
- for (i=0; i<RARRAY_LEN(ary); i++) {
2736
- h = (h << 1) | (h<0 ? 1 : 0);
2737
- n = rb_hash(RARRAY_PTR(ary)[i]);
2738
- h ^= NUM2LONG(n);
3127
+ else {
3128
+ for (i=0; i<RARRAY_LEN(ary); i++) {
3129
+ n = rb_hash(RARRAY_PTR(ary)[i]);
3130
+ h = rb_hash_uint(h, NUM2LONG(n));
3131
+ }
2739
3132
  }
3133
+ h = rb_hash_end(h);
2740
3134
  return LONG2FIX(h);
2741
3135
  }
2742
3136
 
2743
3137
  /*
2744
3138
  * call-seq:
2745
- * array.hash -> fixnum
3139
+ * ary.hash -> fixnum
2746
3140
  *
2747
3141
  * Compute a hash-code for this array. Two arrays with the same content
2748
3142
  * will have the same hash code (and will compare using <code>eql?</code>).
@@ -2751,17 +3145,17 @@ recursive_hash(VALUE ary, VALUE dummy, int recur)
2751
3145
  static VALUE
2752
3146
  rb_ary_hash(VALUE ary)
2753
3147
  {
2754
- return rb_exec_recursive(recursive_hash, ary, 0);
3148
+ return rb_exec_recursive_outer(recursive_hash, ary, 0);
2755
3149
  }
2756
3150
 
2757
3151
  /*
2758
3152
  * call-seq:
2759
- * array.include?(obj) -> true or false
2760
- *
3153
+ * ary.include?(obj) -> true or false
3154
+ *
2761
3155
  * Returns <code>true</code> if the given object is present in
2762
- * <i>self</i> (that is, if any object <code>==</code> <i>anObject</i>),
3156
+ * +self+ (that is, if any object <code>==</code> <i>anObject</i>),
2763
3157
  * <code>false</code> otherwise.
2764
- *
3158
+ *
2765
3159
  * a = [ "a", "b", "c" ]
2766
3160
  * a.include?("b") #=> true
2767
3161
  * a.include?("z") #=> false
@@ -2771,7 +3165,7 @@ VALUE
2771
3165
  rb_ary_includes(VALUE ary, VALUE item)
2772
3166
  {
2773
3167
  long i;
2774
-
3168
+
2775
3169
  for (i=0; i<RARRAY_LEN(ary); i++) {
2776
3170
  if (rb_equal(RARRAY_PTR(ary)[i], item)) {
2777
3171
  return Qtrue;
@@ -2786,7 +3180,7 @@ recursive_cmp(VALUE ary1, VALUE ary2, int recur)
2786
3180
  {
2787
3181
  long i, len;
2788
3182
 
2789
- if (recur) return Qnil;
3183
+ if (recur) return Qundef; /* Subtle! */
2790
3184
  len = RARRAY_LEN(ary1);
2791
3185
  if (len > RARRAY_LEN(ary2)) {
2792
3186
  len = RARRAY_LEN(ary2);
@@ -2800,13 +3194,13 @@ recursive_cmp(VALUE ary1, VALUE ary2, int recur)
2800
3194
  return Qundef;
2801
3195
  }
2802
3196
 
2803
- /*
3197
+ /*
2804
3198
  * call-seq:
2805
- * array <=> other_array -> -1, 0, +1
3199
+ * ary <=> other_ary -> -1, 0, +1 or nil
2806
3200
  *
2807
3201
  * Comparison---Returns an integer (-1, 0,
2808
3202
  * or +1) if this array is less than, equal to, or greater than
2809
- * other_array. Each object in each array is compared
3203
+ * <i>other_ary</i>. Each object in each array is compared
2810
3204
  * (using <=>). If any value isn't
2811
3205
  * equal, then that inequality is the return value. If all the
2812
3206
  * values found are equal, then the return is based on a
@@ -2814,7 +3208,7 @@ recursive_cmp(VALUE ary1, VALUE ary2, int recur)
2814
3208
  * ``equal'' according to <code>Array#<=></code> if and only if they have
2815
3209
  * the same length and the value of each element is equal to the
2816
3210
  * value of the corresponding element in the other array.
2817
- *
3211
+ *
2818
3212
  * [ "a", "a", "c" ] <=> [ "a", "b", "c" ] #=> -1
2819
3213
  * [ 1, 2, 3, 4, 5, 6 ] <=> [ 1, 2 ] #=> +1
2820
3214
  *
@@ -2826,9 +3220,10 @@ rb_ary_cmp(VALUE ary1, VALUE ary2)
2826
3220
  long len;
2827
3221
  VALUE v;
2828
3222
 
2829
- ary2 = to_ary(ary2);
3223
+ ary2 = rb_check_array_type(ary2);
3224
+ if (NIL_P(ary2)) return Qnil;
2830
3225
  if (ary1 == ary2) return INT2FIX(0);
2831
- v = rb_exec_recursive(recursive_cmp, ary1, ary2);
3226
+ v = rb_exec_recursive_paired(recursive_cmp, ary1, ary2, ary2);
2832
3227
  if (v != Qundef) return v;
2833
3228
  len = RARRAY_LEN(ary1) - RARRAY_LEN(ary2);
2834
3229
  if (len == 0) return INT2FIX(0);
@@ -2837,29 +3232,70 @@ rb_ary_cmp(VALUE ary1, VALUE ary2)
2837
3232
  }
2838
3233
 
2839
3234
  static VALUE
2840
- ary_make_hash(VALUE ary1, VALUE ary2)
3235
+ ary_add_hash(VALUE hash, VALUE ary)
2841
3236
  {
2842
- VALUE hash = rb_hash_new();
2843
3237
  long i;
2844
3238
 
2845
- for (i=0; i<RARRAY_LEN(ary1); i++) {
2846
- rb_hash_aset(hash, RARRAY_PTR(ary1)[i], Qtrue);
3239
+ for (i=0; i<RARRAY_LEN(ary); i++) {
3240
+ rb_hash_aset(hash, RARRAY_PTR(ary)[i], Qtrue);
2847
3241
  }
2848
- if (ary2) {
2849
- for (i=0; i<RARRAY_LEN(ary2); i++) {
2850
- rb_hash_aset(hash, RARRAY_PTR(ary2)[i], Qtrue);
3242
+ return hash;
3243
+ }
3244
+
3245
+ static inline VALUE
3246
+ ary_tmp_hash_new(void)
3247
+ {
3248
+ VALUE hash = rb_hash_new();
3249
+
3250
+ RBASIC(hash)->klass = 0;
3251
+ return hash;
3252
+ }
3253
+
3254
+ static VALUE
3255
+ ary_make_hash(VALUE ary)
3256
+ {
3257
+ VALUE hash = ary_tmp_hash_new();
3258
+ return ary_add_hash(hash, ary);
3259
+ }
3260
+
3261
+ static VALUE
3262
+ ary_add_hash_by(VALUE hash, VALUE ary)
3263
+ {
3264
+ long i;
3265
+
3266
+ for (i = 0; i < RARRAY_LEN(ary); ++i) {
3267
+ VALUE v = rb_ary_elt(ary, i), k = rb_yield(v);
3268
+ if (rb_hash_lookup2(hash, k, Qundef) == Qundef) {
3269
+ rb_hash_aset(hash, k, v);
2851
3270
  }
2852
3271
  }
2853
3272
  return hash;
2854
3273
  }
2855
3274
 
2856
- /*
3275
+ static VALUE
3276
+ ary_make_hash_by(VALUE ary)
3277
+ {
3278
+ VALUE hash = ary_tmp_hash_new();
3279
+ return ary_add_hash_by(hash, ary);
3280
+ }
3281
+
3282
+ static inline void
3283
+ ary_recycle_hash(VALUE hash)
3284
+ {
3285
+ if (RHASH(hash)->ntbl) {
3286
+ st_table *tbl = RHASH(hash)->ntbl;
3287
+ RHASH(hash)->ntbl = 0;
3288
+ st_free_table(tbl);
3289
+ }
3290
+ }
3291
+
3292
+ /*
2857
3293
  * call-seq:
2858
- * array - other_array -> an_array
3294
+ * ary - other_ary -> new_ary
2859
3295
  *
2860
3296
  * Array Difference---Returns a new array that is a copy of
2861
3297
  * the original array, removing any items that also appear in
2862
- * other_array. (If you need set-like behavior, see the
3298
+ * <i>other_ary</i>. (If you need set-like behavior, see the
2863
3299
  * library class Set.)
2864
3300
  *
2865
3301
  * [ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ] #=> [ 3, 3, 5 ]
@@ -2872,19 +3308,20 @@ rb_ary_diff(VALUE ary1, VALUE ary2)
2872
3308
  volatile VALUE hash;
2873
3309
  long i;
2874
3310
 
2875
- hash = ary_make_hash(to_ary(ary2), 0);
3311
+ hash = ary_make_hash(to_ary(ary2));
2876
3312
  ary3 = rb_ary_new();
2877
3313
 
2878
3314
  for (i=0; i<RARRAY_LEN(ary1); i++) {
2879
3315
  if (st_lookup(RHASH_TBL(hash), RARRAY_PTR(ary1)[i], 0)) continue;
2880
3316
  rb_ary_push(ary3, rb_ary_elt(ary1, i));
2881
3317
  }
3318
+ ary_recycle_hash(hash);
2882
3319
  return ary3;
2883
3320
  }
2884
3321
 
2885
- /*
3322
+ /*
2886
3323
  * call-seq:
2887
- * array & other_array
3324
+ * ary & other_ary -> new_ary
2888
3325
  *
2889
3326
  * Set Intersection---Returns a new array
2890
3327
  * containing elements common to the two arrays, with no duplicates.
@@ -2902,7 +3339,7 @@ rb_ary_and(VALUE ary1, VALUE ary2)
2902
3339
  ary2 = to_ary(ary2);
2903
3340
  ary3 = rb_ary_new2(RARRAY_LEN(ary1) < RARRAY_LEN(ary2) ?
2904
3341
  RARRAY_LEN(ary1) : RARRAY_LEN(ary2));
2905
- hash = ary_make_hash(ary2, 0);
3342
+ hash = ary_make_hash(ary2);
2906
3343
 
2907
3344
  if (RHASH_EMPTY_P(hash))
2908
3345
  return ary3;
@@ -2913,16 +3350,17 @@ rb_ary_and(VALUE ary1, VALUE ary2)
2913
3350
  rb_ary_push(ary3, v);
2914
3351
  }
2915
3352
  }
3353
+ ary_recycle_hash(hash);
2916
3354
 
2917
3355
  return ary3;
2918
3356
  }
2919
3357
 
2920
- /*
3358
+ /*
2921
3359
  * call-seq:
2922
- * array | other_array -> an_array
3360
+ * ary | other_ary -> new_ary
2923
3361
  *
2924
3362
  * Set Union---Returns a new array by joining this array with
2925
- * other_array, removing duplicates.
3363
+ * <i>other_ary</i>, removing duplicates.
2926
3364
  *
2927
3365
  * [ "a", "b", "c" ] | [ "c", "d", "a" ]
2928
3366
  * #=> [ "a", "b", "c", "d" ]
@@ -2937,7 +3375,7 @@ rb_ary_or(VALUE ary1, VALUE ary2)
2937
3375
 
2938
3376
  ary2 = to_ary(ary2);
2939
3377
  ary3 = rb_ary_new2(RARRAY_LEN(ary1)+RARRAY_LEN(ary2));
2940
- hash = ary_make_hash(ary1, ary2);
3378
+ hash = ary_add_hash(ary_make_hash(ary1), ary2);
2941
3379
 
2942
3380
  for (i=0; i<RARRAY_LEN(ary1); i++) {
2943
3381
  v = vv = rb_ary_elt(ary1, i);
@@ -2951,69 +3389,120 @@ rb_ary_or(VALUE ary1, VALUE ary2)
2951
3389
  rb_ary_push(ary3, v);
2952
3390
  }
2953
3391
  }
3392
+ ary_recycle_hash(hash);
2954
3393
  return ary3;
2955
3394
  }
2956
3395
 
3396
+ static int
3397
+ push_value(st_data_t key, st_data_t val, st_data_t ary)
3398
+ {
3399
+ rb_ary_push((VALUE)ary, (VALUE)val);
3400
+ return ST_CONTINUE;
3401
+ }
3402
+
2957
3403
  /*
2958
3404
  * call-seq:
2959
- * array.uniq! -> array or nil
2960
- *
2961
- * Removes duplicate elements from _self_.
3405
+ * ary.uniq! -> ary or nil
3406
+ *
3407
+ * Removes duplicate elements from +self+.
2962
3408
  * Returns <code>nil</code> if no changes are made (that is, no
2963
3409
  * duplicates are found).
2964
- *
3410
+ *
2965
3411
  * a = [ "a", "a", "b", "b", "c" ]
2966
3412
  * a.uniq! #=> ["a", "b", "c"]
2967
3413
  * b = [ "a", "b", "c" ]
2968
3414
  * b.uniq! #=> nil
3415
+ * c = [ "a:def", "a:xyz", "b:abc", "b:xyz", "c:jkl" ]
3416
+ * c.uniq! {|s| s[/^\w+/]} #=> [ "a:def", "b:abc", "c:jkl" ]
2969
3417
  */
2970
3418
 
2971
3419
  static VALUE
2972
3420
  rb_ary_uniq_bang(VALUE ary)
2973
3421
  {
2974
- VALUE hash, v, vv;
3422
+ VALUE hash, v;
2975
3423
  long i, j;
2976
3424
 
2977
- hash = ary_make_hash(ary, 0);
2978
-
2979
- if (RARRAY_LEN(ary) == RHASH_SIZE(hash)) {
2980
- return Qnil;
3425
+ rb_ary_modify_check(ary);
3426
+ if (RARRAY_LEN(ary) <= 1)
3427
+ return Qnil;
3428
+ if (rb_block_given_p()) {
3429
+ hash = ary_make_hash_by(ary);
3430
+ if (RARRAY_LEN(ary) == (i = RHASH_SIZE(hash))) {
3431
+ return Qnil;
3432
+ }
3433
+ ARY_SET_LEN(ary, 0);
3434
+ if (ARY_SHARED_P(ary) && !ARY_EMBED_P(ary)) {
3435
+ rb_ary_unshare(ary);
3436
+ FL_SET_EMBED(ary);
3437
+ }
3438
+ ary_resize_capa(ary, i);
3439
+ st_foreach(RHASH_TBL(hash), push_value, ary);
2981
3440
  }
2982
- for (i=j=0; i<RARRAY_LEN(ary); i++) {
2983
- v = vv = rb_ary_elt(ary, i);
2984
- if (st_delete(RHASH_TBL(hash), (st_data_t*)&vv, 0)) {
2985
- rb_ary_store(ary, j++, v);
3441
+ else {
3442
+ hash = ary_make_hash(ary);
3443
+ if (RARRAY_LEN(ary) == (long)RHASH_SIZE(hash)) {
3444
+ return Qnil;
3445
+ }
3446
+ for (i=j=0; i<RARRAY_LEN(ary); i++) {
3447
+ st_data_t vv = (st_data_t)(v = rb_ary_elt(ary, i));
3448
+ if (st_delete(RHASH_TBL(hash), &vv, 0)) {
3449
+ rb_ary_store(ary, j++, v);
3450
+ }
2986
3451
  }
3452
+ ARY_SET_LEN(ary, j);
2987
3453
  }
2988
- ARY_SET_LEN(ary, j);
3454
+ ary_recycle_hash(hash);
2989
3455
 
2990
3456
  return ary;
2991
3457
  }
2992
3458
 
2993
3459
  /*
2994
3460
  * call-seq:
2995
- * array.uniq -> an_array
2996
- *
2997
- * Returns a new array by removing duplicate values in <i>self</i>.
2998
- *
3461
+ * ary.uniq -> new_ary
3462
+ *
3463
+ * Returns a new array by removing duplicate values in +self+.
3464
+ *
2999
3465
  * a = [ "a", "a", "b", "b", "c" ]
3000
3466
  * a.uniq #=> ["a", "b", "c"]
3467
+ * c = [ "a:def", "a:xyz", "b:abc", "b:xyz", "c:jkl" ]
3468
+ * c.uniq {|s| s[/^\w+/]} #=> [ "a:def", "b:abc", "c:jkl" ]
3001
3469
  */
3002
3470
 
3003
3471
  static VALUE
3004
3472
  rb_ary_uniq(VALUE ary)
3005
3473
  {
3006
- ary = rb_ary_dup(ary);
3007
- rb_ary_uniq_bang(ary);
3008
- return ary;
3474
+ VALUE hash, uniq, v;
3475
+ long i;
3476
+
3477
+ if (RARRAY_LEN(ary) <= 1)
3478
+ return rb_ary_dup(ary);
3479
+ if (rb_block_given_p()) {
3480
+ hash = ary_make_hash_by(ary);
3481
+ uniq = ary_new(rb_obj_class(ary), RHASH_SIZE(hash));
3482
+ st_foreach(RHASH_TBL(hash), push_value, uniq);
3483
+ }
3484
+ else {
3485
+ hash = ary_make_hash(ary);
3486
+ uniq = ary_new(rb_obj_class(ary), RHASH_SIZE(hash));
3487
+ for (i=0; i<RARRAY_LEN(ary); i++) {
3488
+ st_data_t vv = (st_data_t)(v = rb_ary_elt(ary, i));
3489
+ if (st_delete(RHASH_TBL(hash), &vv, 0)) {
3490
+ rb_ary_push(uniq, v);
3491
+ }
3492
+ }
3493
+ }
3494
+ ary_recycle_hash(hash);
3495
+
3496
+ return uniq;
3009
3497
  }
3010
3498
 
3011
- /*
3499
+ /*
3012
3500
  * call-seq:
3013
- * array.compact! -> array or nil
3501
+ * ary.compact! -> ary or nil
3014
3502
  *
3015
- * Removes +nil+ elements from array.
3016
- * Returns +nil+ if no changes were made.
3503
+ * Removes +nil+ elements from the array.
3504
+ * Returns +nil+ if no changes were made, otherwise returns
3505
+ * </i>ary</i>.
3017
3506
  *
3018
3507
  * [ "a", nil, "b", nil, "c" ].compact! #=> [ "a", "b", "c" ]
3019
3508
  * [ "a", "b", "c" ].compact! #=> nil
@@ -3028,7 +3517,7 @@ rb_ary_compact_bang(VALUE ary)
3028
3517
  rb_ary_modify(ary);
3029
3518
  p = t = RARRAY_PTR(ary);
3030
3519
  end = p + RARRAY_LEN(ary);
3031
-
3520
+
3032
3521
  while (t < end) {
3033
3522
  if (NIL_P(*t)) t++;
3034
3523
  else *p++ = *t++;
@@ -3047,9 +3536,9 @@ rb_ary_compact_bang(VALUE ary)
3047
3536
 
3048
3537
  /*
3049
3538
  * call-seq:
3050
- * array.compact -> an_array
3539
+ * ary.compact -> new_ary
3051
3540
  *
3052
- * Returns a copy of _self_ with all +nil+ elements removed.
3541
+ * Returns a copy of +self+ with all +nil+ elements removed.
3053
3542
  *
3054
3543
  * [ "a", nil, "b", nil, "c", nil ].compact
3055
3544
  * #=> [ "a", "b", "c" ]
@@ -3065,18 +3554,18 @@ rb_ary_compact(VALUE ary)
3065
3554
 
3066
3555
  /*
3067
3556
  * call-seq:
3068
- * array.count -> int
3069
- * array.count(obj) -> int
3070
- * array.count { |item| block } -> int
3071
- *
3557
+ * ary.count -> int
3558
+ * ary.count(obj) -> int
3559
+ * ary.count { |item| block } -> int
3560
+ *
3072
3561
  * Returns the number of elements. If an argument is given, counts
3073
3562
  * the number of elements which equals to <i>obj</i>. If a block is
3074
3563
  * given, counts the number of elements yielding a true value.
3075
3564
  *
3076
3565
  * ary = [1, 2, 4, 2]
3077
- * ary.count # => 4
3078
- * ary.count(2) # => 2
3079
- * ary.count{|x|x%2==0} # => 3
3566
+ * ary.count #=> 4
3567
+ * ary.count(2) #=> 2
3568
+ * ary.count{|x|x%2==0} #=> 3
3080
3569
  *
3081
3570
  */
3082
3571
 
@@ -3166,14 +3655,14 @@ flatten(VALUE ary, int level, int *modified)
3166
3655
 
3167
3656
  /*
3168
3657
  * call-seq:
3169
- * array.flatten! -> array or nil
3170
- * array.flatten!(level) -> array or nil
3171
- *
3172
- * Flattens _self_ in place.
3658
+ * ary.flatten! -> ary or nil
3659
+ * ary.flatten!(level) -> array or nil
3660
+ *
3661
+ * Flattens +self+ in place.
3173
3662
  * Returns <code>nil</code> if no modifications were made (i.e.,
3174
- * <i>array</i> contains no subarrays.) If the optional <i>level</i>
3663
+ * <i>ary</i> contains no subarrays.) If the optional <i>level</i>
3175
3664
  * argument determines the level of recursion to flatten.
3176
- *
3665
+ *
3177
3666
  * a = [ 1, 2, [3, [4, 5] ] ]
3178
3667
  * a.flatten! #=> [1, 2, 3, 4, 5]
3179
3668
  * a.flatten! #=> nil
@@ -3189,26 +3678,32 @@ rb_ary_flatten_bang(int argc, VALUE *argv, VALUE ary)
3189
3678
  VALUE result, lv;
3190
3679
 
3191
3680
  rb_scan_args(argc, argv, "01", &lv);
3681
+ rb_ary_modify_check(ary);
3192
3682
  if (!NIL_P(lv)) level = NUM2INT(lv);
3193
- if (level == 0) return ary;
3683
+ if (level == 0) return Qnil;
3194
3684
 
3195
3685
  result = flatten(ary, level, &mod);
3196
- if (mod == 0) return Qnil;
3686
+ if (mod == 0) {
3687
+ ary_discard(result);
3688
+ return Qnil;
3689
+ }
3690
+ if (!(mod = ARY_EMBED_P(result))) rb_obj_freeze(result);
3197
3691
  rb_ary_replace(ary, result);
3692
+ if (mod) ARY_SET_EMBED_LEN(result, 0);
3198
3693
 
3199
3694
  return ary;
3200
3695
  }
3201
3696
 
3202
3697
  /*
3203
3698
  * call-seq:
3204
- * array.flatten -> an_array
3205
- * array.flatten(level) -> an_array
3206
- *
3699
+ * ary.flatten -> new_ary
3700
+ * ary.flatten(level) -> new_ary
3701
+ *
3207
3702
  * Returns a new array that is a one-dimensional flattening of this
3208
3703
  * array (recursively). That is, for every element that is an array,
3209
3704
  * extract its elements into the new array. If the optional
3210
3705
  * <i>level</i> argument determines the level of recursion to flatten.
3211
- *
3706
+ *
3212
3707
  * s = [ 1, 2, 3 ] #=> [1, 2, 3]
3213
3708
  * t = [ 4, 5, 6, [7, 8] ] #=> [4, 5, 6, [7, 8]]
3214
3709
  * a = [ s, t, 9, 10 ] #=> [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]
@@ -3235,23 +3730,25 @@ rb_ary_flatten(int argc, VALUE *argv, VALUE ary)
3235
3730
 
3236
3731
  /*
3237
3732
  * call-seq:
3238
- * array.shuffle! -> array
3239
- *
3240
- * Shuffles elements in _self_ in place.
3733
+ * ary.shuffle! -> ary
3734
+ *
3735
+ * Shuffles elements in +self+ in place.
3241
3736
  */
3242
3737
 
3243
3738
 
3244
3739
  static VALUE
3245
3740
  rb_ary_shuffle_bang(VALUE ary)
3246
3741
  {
3742
+ VALUE *ptr;
3247
3743
  long i = RARRAY_LEN(ary);
3248
3744
 
3249
3745
  rb_ary_modify(ary);
3746
+ ptr = RARRAY_PTR(ary);
3250
3747
  while (i) {
3251
- long j = rb_genrand_real()*i;
3252
- VALUE tmp = RARRAY_PTR(ary)[--i];
3253
- RARRAY_PTR(ary)[i] = RARRAY_PTR(ary)[j];
3254
- RARRAY_PTR(ary)[j] = tmp;
3748
+ long j = (long)(rb_genrand_real()*i);
3749
+ VALUE tmp = ptr[--i];
3750
+ ptr[i] = ptr[j];
3751
+ ptr[j] = tmp;
3255
3752
  }
3256
3753
  return ary;
3257
3754
  }
@@ -3259,10 +3756,10 @@ rb_ary_shuffle_bang(VALUE ary)
3259
3756
 
3260
3757
  /*
3261
3758
  * call-seq:
3262
- * array.shuffle -> an_array
3263
- *
3759
+ * ary.shuffle -> new_ary
3760
+ *
3264
3761
  * Returns a new array with elements of this array shuffled.
3265
- *
3762
+ *
3266
3763
  * a = [ 1, 2, 3 ] #=> [1, 2, 3]
3267
3764
  * a.shuffle #=> [2, 3, 1]
3268
3765
  */
@@ -3278,13 +3775,15 @@ rb_ary_shuffle(VALUE ary)
3278
3775
 
3279
3776
  /*
3280
3777
  * call-seq:
3281
- * array.sample -> obj
3282
- * array.sample(n) -> an_array
3283
- *
3284
- * Choose a random element, or the random +n+ elements, from the array.
3285
- * If the array is empty, the first form returns <code>nil</code>, and the
3286
- * second form returns an empty array.
3287
- *
3778
+ * ary.sample -> obj
3779
+ * ary.sample(n) -> new_ary
3780
+ *
3781
+ * Choose a random element or +n+ random elements from the array. The elements
3782
+ * are chosen by using random and unique indices into the array in order to
3783
+ * ensure that an element doesn't repeat itself unless the array already
3784
+ * contained duplicate elements. If the array is empty the first form returns
3785
+ * <code>nil</code> and the second form returns an empty array.
3786
+ *
3288
3787
  */
3289
3788
 
3290
3789
 
@@ -3294,31 +3793,31 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary)
3294
3793
  VALUE nv, result, *ptr;
3295
3794
  long n, len, i, j, k, idx[10];
3296
3795
 
3297
- len = RARRAY_LEN(ary);
3796
+ len = RARRAY_LEN(ary);
3298
3797
  if (argc == 0) {
3299
3798
  if (len == 0) return Qnil;
3300
- i = len == 1 ? 0 : rb_genrand_real()*len;
3799
+ i = len == 1 ? 0 : (long)(rb_genrand_real()*len);
3301
3800
  return RARRAY_PTR(ary)[i];
3302
3801
  }
3303
3802
  rb_scan_args(argc, argv, "1", &nv);
3304
3803
  n = NUM2LONG(nv);
3305
3804
  if (n < 0) rb_raise(rb_eArgError, "negative sample number");
3306
- ptr = RARRAY_PTR(ary);
3307
- len = RARRAY_LEN(ary);
3805
+ ptr = RARRAY_PTR(ary);
3806
+ len = RARRAY_LEN(ary);
3308
3807
  if (n > len) n = len;
3309
3808
  switch (n) {
3310
3809
  case 0: return rb_ary_new2(0);
3311
3810
  case 1:
3312
3811
  return rb_ary_new4(1, &ptr[(long)(rb_genrand_real()*len)]);
3313
3812
  case 2:
3314
- i = rb_genrand_real()*len;
3315
- j = rb_genrand_real()*(len-1);
3813
+ i = (long)(rb_genrand_real()*len);
3814
+ j = (long)(rb_genrand_real()*(len-1));
3316
3815
  if (j >= i) j++;
3317
3816
  return rb_ary_new3(2, ptr[i], ptr[j]);
3318
3817
  case 3:
3319
- i = rb_genrand_real()*len;
3320
- j = rb_genrand_real()*(len-1);
3321
- k = rb_genrand_real()*(len-2);
3818
+ i = (long)(rb_genrand_real()*len);
3819
+ j = (long)(rb_genrand_real()*(len-1));
3820
+ k = (long)(rb_genrand_real()*(len-2));
3322
3821
  {
3323
3822
  long l = j, g = i;
3324
3823
  if (j >= i) l = i, g = ++j;
@@ -3326,11 +3825,12 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary)
3326
3825
  }
3327
3826
  return rb_ary_new3(3, ptr[i], ptr[j], ptr[k]);
3328
3827
  }
3329
- if (n < sizeof(idx)/sizeof(idx[0])) {
3828
+ if ((size_t)n < sizeof(idx)/sizeof(idx[0])) {
3829
+ VALUE *ptr_result;
3330
3830
  long sorted[sizeof(idx)/sizeof(idx[0])];
3331
- sorted[0] = idx[0] = rb_genrand_real()*len;
3831
+ sorted[0] = idx[0] = (long)(rb_genrand_real()*len);
3332
3832
  for (i=1; i<n; i++) {
3333
- k = rb_genrand_real()*--len;
3833
+ k = (long)(rb_genrand_real()*--len);
3334
3834
  for (j = 0; j < i; ++j) {
3335
3835
  if (k < sorted[j]) break;
3336
3836
  ++k;
@@ -3339,18 +3839,21 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary)
3339
3839
  sorted[j] = idx[i] = k;
3340
3840
  }
3341
3841
  result = rb_ary_new2(n);
3842
+ ptr_result = RARRAY_PTR(result);
3342
3843
  for (i=0; i<n; i++) {
3343
- RARRAY_PTR(result)[i] = RARRAY_PTR(ary)[idx[i]];
3844
+ ptr_result[i] = ptr[idx[i]];
3344
3845
  }
3345
3846
  }
3346
3847
  else {
3848
+ VALUE *ptr_result;
3347
3849
  result = rb_ary_new4(len, ptr);
3850
+ ptr_result = RARRAY_PTR(result);
3348
3851
  RB_GC_GUARD(ary);
3349
3852
  for (i=0; i<n; i++) {
3350
3853
  j = (long)(rb_genrand_real()*(len-i)) + i;
3351
- nv = RARRAY_PTR(result)[j];
3352
- RARRAY_PTR(result)[j] = RARRAY_PTR(result)[i];
3353
- RARRAY_PTR(result)[i] = nv;
3854
+ nv = ptr_result[j];
3855
+ ptr_result[j] = ptr_result[i];
3856
+ ptr_result[i] = nv;
3354
3857
  }
3355
3858
  }
3356
3859
  ARY_SET_LEN(result, n);
@@ -3361,18 +3864,21 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary)
3361
3864
 
3362
3865
  /*
3363
3866
  * call-seq:
3364
- * ary.cycle {|obj| block }
3365
- * ary.cycle(n) {|obj| block }
3366
- *
3867
+ * ary.cycle(n=nil) {|obj| block } -> nil
3868
+ * ary.cycle(n=nil) -> an_enumerator
3869
+ *
3367
3870
  * Calls <i>block</i> for each element repeatedly _n_ times or
3368
- * forever if none or nil is given. If a non-positive number is
3369
- * given or the array is empty, does nothing. Returns nil if the
3871
+ * forever if none or +nil+ is given. If a non-positive number is
3872
+ * given or the array is empty, does nothing. Returns +nil+ if the
3370
3873
  * loop has finished without getting interrupted.
3371
- *
3874
+ *
3875
+ * If no block is given, an enumerator is returned instead.
3876
+ *
3877
+ *
3372
3878
  * a = ["a", "b", "c"]
3373
3879
  * a.cycle {|x| puts x } # print, a, b, c, a, b, c,.. forever.
3374
3880
  * a.cycle(2) {|x| puts x } # print, a, b, c, a, b, c.
3375
- *
3881
+ *
3376
3882
  */
3377
3883
 
3378
3884
  static VALUE
@@ -3401,13 +3907,16 @@ rb_ary_cycle(int argc, VALUE *argv, VALUE ary)
3401
3907
  }
3402
3908
 
3403
3909
  #define tmpbuf(n, size) rb_str_tmp_new((n)*(size))
3910
+ #define tmpbuf_discard(s) (rb_str_resize((s), 0L), RBASIC(s)->klass = rb_cString)
3911
+ #define tmpary(n) rb_ary_tmp_new(n)
3912
+ #define tmpary_discard(a) (ary_discard(a), RBASIC(a)->klass = rb_cArray)
3404
3913
 
3405
3914
  /*
3406
3915
  * Recursively compute permutations of r elements of the set [0..n-1].
3407
3916
  * When we have a complete permutation of array indexes, copy the values
3408
- * at those indexes into a new array and yield that array.
3917
+ * at those indexes into a new array and yield that array.
3409
3918
  *
3410
- * n: the size of the set
3919
+ * n: the size of the set
3411
3920
  * r: the number of elements in each permutation
3412
3921
  * p: the array (of size r) that we're filling in
3413
3922
  * index: what index we're filling in now
@@ -3415,7 +3924,7 @@ rb_ary_cycle(int argc, VALUE *argv, VALUE ary)
3415
3924
  * values: the Ruby array that holds the actual values to permute
3416
3925
  */
3417
3926
  static void
3418
- permute0(long n, long r, long *p, long index, int *used, VALUE values)
3927
+ permute0(long n, long r, long *p, long index, char *used, VALUE values)
3419
3928
  {
3420
3929
  long i,j;
3421
3930
  for (i = 0; i < n; i++) {
@@ -3424,7 +3933,7 @@ permute0(long n, long r, long *p, long index, int *used, VALUE values)
3424
3933
  if (index < r-1) { /* if not done yet */
3425
3934
  used[i] = 1; /* mark index used */
3426
3935
  permute0(n, r, p, index+1, /* recurse */
3427
- used, values);
3936
+ used, values);
3428
3937
  used[i] = 0; /* index unused */
3429
3938
  }
3430
3939
  else {
@@ -3438,6 +3947,9 @@ permute0(long n, long r, long *p, long index, int *used, VALUE values)
3438
3947
  for (j = 0; j < r; j++) result_array[j] = values_array[p[j]];
3439
3948
  ARY_SET_LEN(result, r);
3440
3949
  rb_yield(result);
3950
+ if (RBASIC(values)->klass) {
3951
+ rb_raise(rb_eRuntimeError, "permute reentered");
3952
+ }
3441
3953
  }
3442
3954
  }
3443
3955
  }
@@ -3445,19 +3957,19 @@ permute0(long n, long r, long *p, long index, int *used, VALUE values)
3445
3957
 
3446
3958
  /*
3447
3959
  * call-seq:
3448
- * ary.permutation { |p| block } -> array
3449
- * ary.permutation -> enumerator
3450
- * ary.permutation(n) { |p| block } -> array
3451
- * ary.permutation(n) -> enumerator
3452
- *
3960
+ * ary.permutation { |p| block } -> ary
3961
+ * ary.permutation -> an_enumerator
3962
+ * ary.permutation(n) { |p| block } -> ary
3963
+ * ary.permutation(n) -> an_enumerator
3964
+ *
3453
3965
  * When invoked with a block, yield all permutations of length <i>n</i>
3454
3966
  * of the elements of <i>ary</i>, then return the array itself.
3455
3967
  * If <i>n</i> is not specified, yield all permutations of all elements.
3456
- * The implementation makes no guarantees about the order in which
3968
+ * The implementation makes no guarantees about the order in which
3457
3969
  * the permutations are yielded.
3458
3970
  *
3459
- * When invoked without a block, return an enumerator object instead.
3460
- *
3971
+ * If no block is given, an enumerator is returned instead.
3972
+ *
3461
3973
  * Examples:
3462
3974
  *
3463
3975
  * a = [1, 2, 3]
@@ -3480,7 +3992,7 @@ rb_ary_permutation(int argc, VALUE *argv, VALUE ary)
3480
3992
  rb_scan_args(argc, argv, "01", &num);
3481
3993
  r = NIL_P(num) ? n : NUM2LONG(num); /* Permutation size from argument */
3482
3994
 
3483
- if (r < 0 || n < r) {
3995
+ if (r < 0 || n < r) {
3484
3996
  /* no permutations: yield nothing */
3485
3997
  }
3486
3998
  else if (r == 0) { /* exactly one permutation: the zero-length array */
@@ -3494,53 +4006,33 @@ rb_ary_permutation(int argc, VALUE *argv, VALUE ary)
3494
4006
  else { /* this is the general case */
3495
4007
  volatile VALUE t0 = tmpbuf(n,sizeof(long));
3496
4008
  long *p = (long*)RSTRING_PTR(t0);
3497
- volatile VALUE t1 = tmpbuf(n,sizeof(int));
3498
- int *used = (int*)RSTRING_PTR(t1);
3499
- VALUE ary0 = ary_make_substitution(ary); /* private defensive copy of ary */
4009
+ volatile VALUE t1 = tmpbuf(n,sizeof(char));
4010
+ char *used = (char*)RSTRING_PTR(t1);
4011
+ VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
3500
4012
  RBASIC(ary0)->klass = 0;
3501
4013
 
3502
- for (i = 0; i < n; i++) used[i] = 0; /* initialize array */
4014
+ MEMZERO(used, char, n); /* initialize array */
3503
4015
 
3504
4016
  permute0(n, r, p, 0, used, ary0); /* compute and yield permutations */
3505
- RB_GC_GUARD(t0);
3506
- RB_GC_GUARD(t1);
4017
+ tmpbuf_discard(t0);
4018
+ tmpbuf_discard(t1);
3507
4019
  RBASIC(ary0)->klass = rb_cArray;
3508
4020
  }
3509
4021
  return ary;
3510
4022
  }
3511
4023
 
3512
- static long
3513
- combi_len(long n, long k)
3514
- {
3515
- long i, val = 1;
3516
-
3517
- if (k*2 > n) k = n-k;
3518
- if (k == 0) return 1;
3519
- if (k < 0) return 0;
3520
- val = 1;
3521
- for (i=1; i <= k; i++,n--) {
3522
- long m = val;
3523
- val *= n;
3524
- if (val < m) {
3525
- rb_raise(rb_eRangeError, "too big for combination");
3526
- }
3527
- val /= i;
3528
- }
3529
- return val;
3530
- }
3531
-
3532
4024
  /*
3533
4025
  * call-seq:
3534
4026
  * ary.combination(n) { |c| block } -> ary
3535
- * ary.combination(n) -> enumerator
3536
- *
3537
- * When invoked with a block, yields all combinations of length <i>n</i>
4027
+ * ary.combination(n) -> an_enumerator
4028
+ *
4029
+ * When invoked with a block, yields all combinations of length <i>n</i>
3538
4030
  * of elements from <i>ary</i> and then returns <i>ary</i> itself.
3539
- * The implementation makes no guarantees about the order in which
4031
+ * The implementation makes no guarantees about the order in which
3540
4032
  * the combinations are yielded.
3541
4033
  *
3542
- * When invoked without a block, returns an enumerator object instead.
3543
- *
4034
+ * If no block is given, an enumerator is returned instead.
4035
+ *
3544
4036
  * Examples:
3545
4037
  *
3546
4038
  * a = [1, 2, 3, 4]
@@ -3550,7 +4042,7 @@ combi_len(long n, long k)
3550
4042
  * a.combination(4).to_a #=> [[1,2,3,4]]
3551
4043
  * a.combination(0).to_a #=> [[]] # one combination of length 0
3552
4044
  * a.combination(5).to_a #=> [] # no combinations of length 5
3553
- *
4045
+ *
3554
4046
  */
3555
4047
 
3556
4048
  static VALUE
@@ -3575,53 +4067,242 @@ rb_ary_combination(VALUE ary, VALUE num)
3575
4067
  else {
3576
4068
  volatile VALUE t0 = tmpbuf(n+1, sizeof(long));
3577
4069
  long *stack = (long*)RSTRING_PTR(t0);
3578
- long nlen = combi_len(len, n);
3579
- volatile VALUE cc = rb_ary_new2(n);
4070
+ volatile VALUE cc = tmpary(n);
3580
4071
  VALUE *chosen = RARRAY_PTR(cc);
3581
4072
  long lev = 0;
3582
4073
 
3583
- RBASIC(cc)->klass = 0;
3584
4074
  MEMZERO(stack, long, n);
3585
4075
  stack[0] = -1;
3586
- for (i = 0; i < nlen; i++) {
4076
+ for (;;) {
3587
4077
  chosen[lev] = RARRAY_PTR(ary)[stack[lev+1]];
3588
4078
  for (lev++; lev < n; lev++) {
3589
4079
  chosen[lev] = RARRAY_PTR(ary)[stack[lev+1] = stack[lev]+1];
3590
4080
  }
3591
4081
  rb_yield(rb_ary_new4(n, chosen));
4082
+ if (RBASIC(t0)->klass) {
4083
+ rb_raise(rb_eRuntimeError, "combination reentered");
4084
+ }
3592
4085
  do {
4086
+ if (lev == 0) goto done;
3593
4087
  stack[lev--]++;
3594
- } while (lev && (stack[lev+1]+n == len+lev+1));
4088
+ } while (stack[lev+1]+n == len+lev+1);
3595
4089
  }
4090
+ done:
4091
+ tmpbuf_discard(t0);
4092
+ tmpary_discard(cc);
3596
4093
  }
3597
4094
  return ary;
3598
4095
  }
3599
4096
 
4097
+ /*
4098
+ * Recursively compute repeated permutations of r elements of the set
4099
+ * [0..n-1].
4100
+ * When we have a complete repeated permutation of array indexes, copy the
4101
+ * values at those indexes into a new array and yield that array.
4102
+ *
4103
+ * n: the size of the set
4104
+ * r: the number of elements in each permutation
4105
+ * p: the array (of size r) that we're filling in
4106
+ * index: what index we're filling in now
4107
+ * values: the Ruby array that holds the actual values to permute
4108
+ */
4109
+ static void
4110
+ rpermute0(long n, long r, long *p, long index, VALUE values)
4111
+ {
4112
+ long i, j;
4113
+ for (i = 0; i < n; i++) {
4114
+ p[index] = i;
4115
+ if (index < r-1) { /* if not done yet */
4116
+ rpermute0(n, r, p, index+1, values); /* recurse */
4117
+ }
4118
+ else {
4119
+ /* We have a complete permutation of array indexes */
4120
+ /* Build a ruby array of the corresponding values */
4121
+ /* And yield it to the associated block */
4122
+ VALUE result = rb_ary_new2(r);
4123
+ VALUE *result_array = RARRAY_PTR(result);
4124
+ const VALUE *values_array = RARRAY_PTR(values);
4125
+
4126
+ for (j = 0; j < r; j++) result_array[j] = values_array[p[j]];
4127
+ ARY_SET_LEN(result, r);
4128
+ rb_yield(result);
4129
+ if (RBASIC(values)->klass) {
4130
+ rb_raise(rb_eRuntimeError, "repeated permute reentered");
4131
+ }
4132
+ }
4133
+ }
4134
+ }
4135
+
3600
4136
  /*
3601
4137
  * call-seq:
3602
- * ary.product(other_ary, ...)
3603
- *
3604
- * Returns an array of all combinations of elements from all arrays.
4138
+ * ary.repeated_permutation(n) { |p| block } -> ary
4139
+ * ary.repeated_permutation(n) -> an_enumerator
4140
+ *
4141
+ * When invoked with a block, yield all repeated permutations of length
4142
+ * <i>n</i> of the elements of <i>ary</i>, then return the array itself.
4143
+ * The implementation makes no guarantees about the order in which
4144
+ * the repeated permutations are yielded.
4145
+ *
4146
+ * If no block is given, an enumerator is returned instead.
4147
+ *
4148
+ * Examples:
4149
+ *
4150
+ * a = [1, 2]
4151
+ * a.repeated_permutation(1).to_a #=> [[1], [2]]
4152
+ * a.repeated_permutation(2).to_a #=> [[1,1],[1,2],[2,1],[2,2]]
4153
+ * a.repeated_permutation(3).to_a #=> [[1,1,1],[1,1,2],[1,2,1],[1,2,2],
4154
+ * # [2,1,1],[2,1,2],[2,2,1],[2,2,2]]
4155
+ * a.repeated_permutation(0).to_a #=> [[]] # one permutation of length 0
4156
+ */
4157
+
4158
+ static VALUE
4159
+ rb_ary_repeated_permutation(VALUE ary, VALUE num)
4160
+ {
4161
+ long r, n, i;
4162
+
4163
+ n = RARRAY_LEN(ary); /* Array length */
4164
+ RETURN_ENUMERATOR(ary, 1, &num); /* Return enumerator if no block */
4165
+ r = NUM2LONG(num); /* Permutation size from argument */
4166
+
4167
+ if (r < 0) {
4168
+ /* no permutations: yield nothing */
4169
+ }
4170
+ else if (r == 0) { /* exactly one permutation: the zero-length array */
4171
+ rb_yield(rb_ary_new2(0));
4172
+ }
4173
+ else if (r == 1) { /* this is a special, easy case */
4174
+ for (i = 0; i < RARRAY_LEN(ary); i++) {
4175
+ rb_yield(rb_ary_new3(1, RARRAY_PTR(ary)[i]));
4176
+ }
4177
+ }
4178
+ else { /* this is the general case */
4179
+ volatile VALUE t0 = tmpbuf(r, sizeof(long));
4180
+ long *p = (long*)RSTRING_PTR(t0);
4181
+ VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
4182
+ RBASIC(ary0)->klass = 0;
4183
+
4184
+ rpermute0(n, r, p, 0, ary0); /* compute and yield repeated permutations */
4185
+ tmpbuf_discard(t0);
4186
+ RBASIC(ary0)->klass = rb_cArray;
4187
+ }
4188
+ return ary;
4189
+ }
4190
+
4191
+ static void
4192
+ rcombinate0(long n, long r, long *p, long index, long rest, VALUE values)
4193
+ {
4194
+ long j;
4195
+ if (rest > 0) {
4196
+ for (; index < n; ++index) {
4197
+ p[r-rest] = index;
4198
+ rcombinate0(n, r, p, index, rest-1, values);
4199
+ }
4200
+ }
4201
+ else {
4202
+ VALUE result = rb_ary_new2(r);
4203
+ VALUE *result_array = RARRAY_PTR(result);
4204
+ const VALUE *values_array = RARRAY_PTR(values);
4205
+
4206
+ for (j = 0; j < r; ++j) result_array[j] = values_array[p[j]];
4207
+ ARY_SET_LEN(result, r);
4208
+ rb_yield(result);
4209
+ if (RBASIC(values)->klass) {
4210
+ rb_raise(rb_eRuntimeError, "repeated combination reentered");
4211
+ }
4212
+ }
4213
+ }
4214
+
4215
+ /*
4216
+ * call-seq:
4217
+ * ary.repeated_combination(n) { |c| block } -> ary
4218
+ * ary.repeated_combination(n) -> an_enumerator
4219
+ *
4220
+ * When invoked with a block, yields all repeated combinations of
4221
+ * length <i>n</i> of elements from <i>ary</i> and then returns
4222
+ * <i>ary</i> itself.
4223
+ * The implementation makes no guarantees about the order in which
4224
+ * the repeated combinations are yielded.
4225
+ *
4226
+ * If no block is given, an enumerator is returned instead.
4227
+ *
4228
+ * Examples:
4229
+ *
4230
+ * a = [1, 2, 3]
4231
+ * a.repeated_combination(1).to_a #=> [[1], [2], [3]]
4232
+ * a.repeated_combination(2).to_a #=> [[1,1],[1,2],[1,3],[2,2],[2,3],[3,3]]
4233
+ * a.repeated_combination(3).to_a #=> [[1,1,1],[1,1,2],[1,1,3],[1,2,2],[1,2,3],
4234
+ * # [1,3,3],[2,2,2],[2,2,3],[2,3,3],[3,3,3]]
4235
+ * a.repeated_combination(4).to_a #=> [[1,1,1,1],[1,1,1,2],[1,1,1,3],[1,1,2,2],[1,1,2,3],
4236
+ * # [1,1,3,3],[1,2,2,2],[1,2,2,3],[1,2,3,3],[1,3,3,3],
4237
+ * # [2,2,2,2],[2,2,2,3],[2,2,3,3],[2,3,3,3],[3,3,3,3]]
4238
+ * a.repeated_combination(0).to_a #=> [[]] # one combination of length 0
4239
+ *
4240
+ */
4241
+
4242
+ static VALUE
4243
+ rb_ary_repeated_combination(VALUE ary, VALUE num)
4244
+ {
4245
+ long n, i, len;
4246
+
4247
+ n = NUM2LONG(num); /* Combination size from argument */
4248
+ RETURN_ENUMERATOR(ary, 1, &num); /* Return enumerator if no block */
4249
+ len = RARRAY_LEN(ary);
4250
+ if (n < 0) {
4251
+ /* yield nothing */
4252
+ }
4253
+ else if (n == 0) {
4254
+ rb_yield(rb_ary_new2(0));
4255
+ }
4256
+ else if (n == 1) {
4257
+ for (i = 0; i < len; i++) {
4258
+ rb_yield(rb_ary_new3(1, RARRAY_PTR(ary)[i]));
4259
+ }
4260
+ }
4261
+ else if (len == 0) {
4262
+ /* yield nothing */
4263
+ }
4264
+ else {
4265
+ volatile VALUE t0 = tmpbuf(n, sizeof(long));
4266
+ long *p = (long*)RSTRING_PTR(t0);
4267
+ VALUE ary0 = ary_make_shared_copy(ary); /* private defensive copy of ary */
4268
+ RBASIC(ary0)->klass = 0;
4269
+
4270
+ rcombinate0(len, n, p, 0, n, ary0); /* compute and yield repeated combinations */
4271
+ tmpbuf_discard(t0);
4272
+ RBASIC(ary0)->klass = rb_cArray;
4273
+ }
4274
+ return ary;
4275
+ }
4276
+
4277
+ /*
4278
+ * call-seq:
4279
+ * ary.product(other_ary, ...) -> new_ary
4280
+ * ary.product(other_ary, ...) { |p| block } -> ary
4281
+ *
4282
+ * Returns an array of all combinations of elements from all arrays,
3605
4283
  * The length of the returned array is the product of the length
3606
- * of ary and the argument arrays
3607
- *
3608
- * [1,2,3].product([4,5]) # => [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]
3609
- * [1,2].product([1,2]) # => [[1,1],[1,2],[2,1],[2,2]]
3610
- * [1,2].product([3,4],[5,6]) # => [[1,3,5],[1,3,6],[1,4,5],[1,4,6],
4284
+ * of +self+ and the argument arrays.
4285
+ * If given a block, <i>product</i> will yield all combinations
4286
+ * and return +self+ instead.
4287
+ *
4288
+ *
4289
+ * [1,2,3].product([4,5]) #=> [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]
4290
+ * [1,2].product([1,2]) #=> [[1,1],[1,2],[2,1],[2,2]]
4291
+ * [1,2].product([3,4],[5,6]) #=> [[1,3,5],[1,3,6],[1,4,5],[1,4,6],
3611
4292
  * # [2,3,5],[2,3,6],[2,4,5],[2,4,6]]
3612
- * [1,2].product() # => [[1],[2]]
3613
- * [1,2].product([]) # => []
4293
+ * [1,2].product() #=> [[1],[2]]
4294
+ * [1,2].product([]) #=> []
3614
4295
  */
3615
4296
 
3616
4297
  static VALUE
3617
4298
  rb_ary_product(int argc, VALUE *argv, VALUE ary)
3618
4299
  {
3619
4300
  int n = argc+1; /* How many arrays we're operating on */
3620
- volatile VALUE t0 = tmpbuf(n, sizeof(VALUE));
4301
+ volatile VALUE t0 = tmpary(n);
3621
4302
  volatile VALUE t1 = tmpbuf(n, sizeof(int));
3622
- VALUE *arrays = (VALUE*)RSTRING_PTR(t0); /* The arrays we're computing the product of */
4303
+ VALUE *arrays = RARRAY_PTR(t0); /* The arrays we're computing the product of */
3623
4304
  int *counters = (int*)RSTRING_PTR(t1); /* The current position in each one */
3624
- VALUE result; /* The array we'll be returning */
4305
+ VALUE result = Qnil; /* The array we'll be returning, when no block given */
3625
4306
  long i,j;
3626
4307
  long resultlen = 1;
3627
4308
 
@@ -3629,25 +4310,38 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary)
3629
4310
  RBASIC(t1)->klass = 0;
3630
4311
 
3631
4312
  /* initialize the arrays of arrays */
4313
+ ARY_SET_LEN(t0, n);
3632
4314
  arrays[0] = ary;
4315
+ for (i = 1; i < n; i++) arrays[i] = Qnil;
3633
4316
  for (i = 1; i < n; i++) arrays[i] = to_ary(argv[i-1]);
3634
-
4317
+
3635
4318
  /* initialize the counters for the arrays */
3636
4319
  for (i = 0; i < n; i++) counters[i] = 0;
3637
4320
 
3638
- /* Compute the length of the result array; return [] if any is empty */
3639
- for (i = 0; i < n; i++) {
3640
- long k = RARRAY_LEN(arrays[i]), l = resultlen;
3641
- if (k == 0) return rb_ary_new2(0);
3642
- resultlen *= k;
3643
- if (resultlen < k || resultlen < l || resultlen / k != l) {
3644
- rb_raise(rb_eRangeError, "too big to product");
4321
+ /* Otherwise, allocate and fill in an array of results */
4322
+ if (rb_block_given_p()) {
4323
+ /* Make defensive copies of arrays; exit if any is empty */
4324
+ for (i = 0; i < n; i++) {
4325
+ if (RARRAY_LEN(arrays[i]) == 0) goto done;
4326
+ arrays[i] = ary_make_shared_copy(arrays[i]);
3645
4327
  }
3646
4328
  }
3647
-
3648
- /* Otherwise, allocate and fill in an array of results */
3649
- result = rb_ary_new2(resultlen);
3650
- for (i = 0; i < resultlen; i++) {
4329
+ else {
4330
+ /* Compute the length of the result array; return [] if any is empty */
4331
+ for (i = 0; i < n; i++) {
4332
+ long k = RARRAY_LEN(arrays[i]), l = resultlen;
4333
+ if (k == 0) {
4334
+ result = rb_ary_new2(0);
4335
+ goto done;
4336
+ }
4337
+ resultlen *= k;
4338
+ if (resultlen < k || resultlen < l || resultlen / k != l) {
4339
+ rb_raise(rb_eRangeError, "too big to product");
4340
+ }
4341
+ }
4342
+ result = rb_ary_new2(resultlen);
4343
+ }
4344
+ for (;;) {
3651
4345
  int m;
3652
4346
  /* fill in one subarray */
3653
4347
  VALUE subarray = rb_ary_new2(n);
@@ -3656,7 +4350,19 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary)
3656
4350
  }
3657
4351
 
3658
4352
  /* put it on the result array */
3659
- rb_ary_push(result, subarray);
4353
+ if(NIL_P(result)) {
4354
+ FL_SET(t0, FL_USER5);
4355
+ rb_yield(subarray);
4356
+ if (! FL_TEST(t0, FL_USER5)) {
4357
+ rb_raise(rb_eRuntimeError, "product reentered");
4358
+ }
4359
+ else {
4360
+ FL_UNSET(t0, FL_USER5);
4361
+ }
4362
+ }
4363
+ else {
4364
+ rb_ary_push(result, subarray);
4365
+ }
3660
4366
 
3661
4367
  /*
3662
4368
  * Increment the last counter. If it overflows, reset to 0
@@ -3664,25 +4370,29 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary)
3664
4370
  */
3665
4371
  m = n-1;
3666
4372
  counters[m]++;
3667
- while (m > 0 && counters[m] == RARRAY_LEN(arrays[m])) {
4373
+ while (counters[m] == RARRAY_LEN(arrays[m])) {
3668
4374
  counters[m] = 0;
3669
- m--;
4375
+ /* If the first counter overlows, we are done */
4376
+ if (--m < 0) goto done;
3670
4377
  counters[m]++;
3671
4378
  }
3672
4379
  }
4380
+ done:
4381
+ tmpary_discard(t0);
4382
+ tmpbuf_discard(t1);
3673
4383
 
3674
- return result;
4384
+ return NIL_P(result) ? ary : result;
3675
4385
  }
3676
4386
 
3677
4387
  /*
3678
4388
  * call-seq:
3679
- * ary.take(n) => array
3680
- *
4389
+ * ary.take(n) -> new_ary
4390
+ *
3681
4391
  * Returns first n elements from <i>ary</i>.
3682
- *
4392
+ *
3683
4393
  * a = [1, 2, 3, 4, 5, 0]
3684
- * a.take(3) # => [1, 2, 3]
3685
- *
4394
+ * a.take(3) #=> [1, 2, 3]
4395
+ *
3686
4396
  */
3687
4397
 
3688
4398
  static VALUE
@@ -3697,14 +4407,17 @@ rb_ary_take(VALUE obj, VALUE n)
3697
4407
 
3698
4408
  /*
3699
4409
  * call-seq:
3700
- * ary.take_while {|arr| block } => array
3701
- *
3702
- * Passes elements to the block until the block returns nil or false,
4410
+ * ary.take_while {|arr| block } -> new_ary
4411
+ * ary.take_while -> an_enumerator
4412
+ *
4413
+ * Passes elements to the block until the block returns +nil+ or +false+,
3703
4414
  * then stops iterating and returns an array of all prior elements.
3704
- *
4415
+ *
4416
+ * If no block is given, an enumerator is returned instead.
4417
+ *
3705
4418
  * a = [1, 2, 3, 4, 5, 0]
3706
- * a.take_while {|i| i < 3 } # => [1, 2]
3707
- *
4419
+ * a.take_while {|i| i < 3 } #=> [1, 2]
4420
+ *
3708
4421
  */
3709
4422
 
3710
4423
  static VALUE
@@ -3721,14 +4434,14 @@ rb_ary_take_while(VALUE ary)
3721
4434
 
3722
4435
  /*
3723
4436
  * call-seq:
3724
- * ary.drop(n) => array
3725
- *
4437
+ * ary.drop(n) -> new_ary
4438
+ *
3726
4439
  * Drops first n elements from <i>ary</i>, and returns rest elements
3727
4440
  * in an array.
3728
- *
4441
+ *
3729
4442
  * a = [1, 2, 3, 4, 5, 0]
3730
- * a.drop(3) # => [4, 5, 0]
3731
- *
4443
+ * a.drop(3) #=> [4, 5, 0]
4444
+ *
3732
4445
  */
3733
4446
 
3734
4447
  static VALUE
@@ -3747,15 +4460,18 @@ rb_ary_drop(VALUE ary, VALUE n)
3747
4460
 
3748
4461
  /*
3749
4462
  * call-seq:
3750
- * ary.drop_while {|arr| block } => array
3751
- *
4463
+ * ary.drop_while {|arr| block } -> new_ary
4464
+ * ary.drop_while -> an_enumerator
4465
+ *
3752
4466
  * Drops elements up to, but not including, the first element for
3753
- * which the block returns nil or false and returns an array
4467
+ * which the block returns +nil+ or +false+ and returns an array
3754
4468
  * containing the remaining elements.
3755
- *
4469
+ *
4470
+ * If no block is given, an enumerator is returned instead.
4471
+ *
3756
4472
  * a = [1, 2, 3, 4, 5, 0]
3757
- * a.drop_while {|i| i < 3 } # => [3, 4, 5, 0]
3758
- *
4473
+ * a.drop_while {|i| i < 3 } #=> [3, 4, 5, 0]
4474
+ *
3759
4475
  */
3760
4476
 
3761
4477
  static VALUE
@@ -3772,11 +4488,11 @@ rb_ary_drop_while(VALUE ary)
3772
4488
 
3773
4489
 
3774
4490
 
3775
- /* Arrays are ordered, integer-indexed collections of any object.
3776
- * Array indexing starts at 0, as in C or Java. A negative index is
3777
- * assumed to be relative to the end of the array---that is, an index of -1
3778
- * indicates the last element of the array, -2 is the next to last
3779
- * element in the array, and so on.
4491
+ /* Arrays are ordered, integer-indexed collections of any object.
4492
+ * Array indexing starts at 0, as in C or Java. A negative index is
4493
+ * assumed to be relative to the end of the array---that is, an index of -1
4494
+ * indicates the last element of the array, -2 is the next to last
4495
+ * element in the array, and so on.
3780
4496
  */
3781
4497
 
3782
4498
  void
@@ -3794,8 +4510,8 @@ Init_Array(void)
3794
4510
  rb_define_method(rb_cArray, "initialize", rb_ary_initialize, -1);
3795
4511
  rb_define_method(rb_cArray, "initialize_copy", rb_ary_replace, 1);
3796
4512
 
3797
- rb_define_method(rb_cArray, "to_s", rb_ary_inspect, 0);
3798
4513
  rb_define_method(rb_cArray, "inspect", rb_ary_inspect, 0);
4514
+ rb_define_alias(rb_cArray, "to_s", "inspect");
3799
4515
  rb_define_method(rb_cArray, "to_a", rb_ary_to_a, 0);
3800
4516
  rb_define_method(rb_cArray, "to_ary", rb_ary_to_ary_m, 0);
3801
4517
  rb_define_method(rb_cArray, "frozen?", rb_ary_frozen_p, 0);
@@ -3829,13 +4545,18 @@ Init_Array(void)
3829
4545
  rb_define_method(rb_cArray, "join", rb_ary_join_m, -1);
3830
4546
  rb_define_method(rb_cArray, "reverse", rb_ary_reverse_m, 0);
3831
4547
  rb_define_method(rb_cArray, "reverse!", rb_ary_reverse_bang, 0);
4548
+ rb_define_method(rb_cArray, "rotate", rb_ary_rotate_m, -1);
4549
+ rb_define_method(rb_cArray, "rotate!", rb_ary_rotate_bang, -1);
3832
4550
  rb_define_method(rb_cArray, "sort", rb_ary_sort, 0);
3833
4551
  rb_define_method(rb_cArray, "sort!", rb_ary_sort_bang, 0);
4552
+ rb_define_method(rb_cArray, "sort_by!", rb_ary_sort_by_bang, 0);
3834
4553
  rb_define_method(rb_cArray, "collect", rb_ary_collect, 0);
3835
4554
  rb_define_method(rb_cArray, "collect!", rb_ary_collect_bang, 0);
3836
4555
  rb_define_method(rb_cArray, "map", rb_ary_collect, 0);
3837
4556
  rb_define_method(rb_cArray, "map!", rb_ary_collect_bang, 0);
3838
4557
  rb_define_method(rb_cArray, "select", rb_ary_select, 0);
4558
+ rb_define_method(rb_cArray, "select!", rb_ary_select_bang, 0);
4559
+ rb_define_method(rb_cArray, "keep_if", rb_ary_keep_if, 0);
3839
4560
  rb_define_method(rb_cArray, "values_at", rb_ary_values_at, -1);
3840
4561
  rb_define_method(rb_cArray, "delete", rb_ary_delete, 1);
3841
4562
  rb_define_method(rb_cArray, "delete_at", rb_ary_delete_at_m, 1);
@@ -3876,6 +4597,8 @@ Init_Array(void)
3876
4597
  rb_define_method(rb_cArray, "cycle", rb_ary_cycle, -1);
3877
4598
  rb_define_method(rb_cArray, "permutation", rb_ary_permutation, -1);
3878
4599
  rb_define_method(rb_cArray, "combination", rb_ary_combination, 1);
4600
+ rb_define_method(rb_cArray, "repeated_permutation", rb_ary_repeated_permutation, 1);
4601
+ rb_define_method(rb_cArray, "repeated_combination", rb_ary_repeated_combination, 1);
3879
4602
  rb_define_method(rb_cArray, "product", rb_ary_product, -1);
3880
4603
 
3881
4604
  rb_define_method(rb_cArray, "take", rb_ary_take, 1);