rbs 4.0.0.dev.4 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +14 -14
  3. data/.github/workflows/bundle-update.yml +60 -0
  4. data/.github/workflows/c-check.yml +18 -11
  5. data/.github/workflows/comments.yml +5 -3
  6. data/.github/workflows/dependabot.yml +2 -2
  7. data/.github/workflows/ruby.yml +27 -34
  8. data/.github/workflows/rust.yml +95 -0
  9. data/.github/workflows/typecheck.yml +2 -2
  10. data/.github/workflows/windows.yml +2 -2
  11. data/.rubocop.yml +1 -1
  12. data/CHANGELOG.md +323 -0
  13. data/README.md +1 -1
  14. data/Rakefile +43 -33
  15. data/Steepfile +1 -0
  16. data/config.yml +426 -24
  17. data/core/array.rbs +307 -227
  18. data/core/basic_object.rbs +9 -8
  19. data/core/binding.rbs +0 -2
  20. data/core/builtin.rbs +2 -2
  21. data/core/class.rbs +6 -5
  22. data/core/comparable.rbs +55 -34
  23. data/core/complex.rbs +104 -78
  24. data/core/dir.rbs +61 -49
  25. data/core/encoding.rbs +12 -15
  26. data/core/enumerable.rbs +179 -87
  27. data/core/enumerator/arithmetic_sequence.rbs +70 -0
  28. data/core/enumerator.rbs +65 -2
  29. data/core/errno.rbs +11 -2
  30. data/core/errors.rbs +58 -29
  31. data/core/exception.rbs +13 -13
  32. data/core/fiber.rbs +74 -54
  33. data/core/file.rbs +280 -177
  34. data/core/file_test.rbs +3 -3
  35. data/core/float.rbs +257 -92
  36. data/core/gc.rbs +425 -281
  37. data/core/hash.rbs +1045 -739
  38. data/core/integer.rbs +135 -137
  39. data/core/io/buffer.rbs +53 -42
  40. data/core/io/wait.rbs +13 -35
  41. data/core/io.rbs +192 -144
  42. data/core/kernel.rbs +216 -155
  43. data/core/marshal.rbs +4 -4
  44. data/core/match_data.rbs +15 -13
  45. data/core/math.rbs +107 -66
  46. data/core/method.rbs +69 -33
  47. data/core/module.rbs +244 -106
  48. data/core/nil_class.rbs +7 -6
  49. data/core/numeric.rbs +74 -63
  50. data/core/object.rbs +9 -11
  51. data/core/object_space.rbs +30 -23
  52. data/core/pathname.rbs +1322 -0
  53. data/core/proc.rbs +95 -58
  54. data/core/process.rbs +222 -202
  55. data/core/ractor.rbs +371 -515
  56. data/core/random.rbs +21 -3
  57. data/core/range.rbs +159 -57
  58. data/core/rational.rbs +60 -89
  59. data/core/rbs/unnamed/argf.rbs +60 -53
  60. data/core/rbs/unnamed/env_class.rbs +19 -14
  61. data/core/rbs/unnamed/main_class.rbs +123 -0
  62. data/core/rbs/unnamed/random.rbs +11 -118
  63. data/core/regexp.rbs +258 -214
  64. data/core/ruby.rbs +53 -0
  65. data/core/ruby_vm.rbs +38 -34
  66. data/core/rubygems/config_file.rbs +5 -5
  67. data/core/rubygems/errors.rbs +4 -71
  68. data/core/rubygems/requirement.rbs +5 -5
  69. data/core/rubygems/rubygems.rbs +16 -82
  70. data/core/rubygems/version.rbs +2 -3
  71. data/core/set.rbs +490 -360
  72. data/core/signal.rbs +26 -16
  73. data/core/string.rbs +3234 -1285
  74. data/core/struct.rbs +27 -26
  75. data/core/symbol.rbs +41 -34
  76. data/core/thread.rbs +135 -67
  77. data/core/time.rbs +81 -50
  78. data/core/trace_point.rbs +41 -35
  79. data/core/true_class.rbs +2 -2
  80. data/core/unbound_method.rbs +24 -16
  81. data/core/warning.rbs +7 -7
  82. data/docs/aliases.md +79 -0
  83. data/docs/collection.md +3 -3
  84. data/docs/config.md +171 -0
  85. data/docs/encoding.md +56 -0
  86. data/docs/gem.md +0 -1
  87. data/docs/inline.md +576 -0
  88. data/docs/sigs.md +3 -3
  89. data/docs/syntax.md +46 -16
  90. data/docs/type_fingerprint.md +21 -0
  91. data/exe/rbs +1 -1
  92. data/ext/rbs_extension/ast_translation.c +544 -116
  93. data/ext/rbs_extension/ast_translation.h +3 -0
  94. data/ext/rbs_extension/class_constants.c +16 -2
  95. data/ext/rbs_extension/class_constants.h +8 -0
  96. data/ext/rbs_extension/extconf.rb +5 -1
  97. data/ext/rbs_extension/legacy_location.c +33 -56
  98. data/ext/rbs_extension/legacy_location.h +37 -0
  99. data/ext/rbs_extension/main.c +44 -35
  100. data/include/rbs/ast.h +448 -173
  101. data/include/rbs/defines.h +27 -0
  102. data/include/rbs/lexer.h +30 -11
  103. data/include/rbs/location.h +25 -44
  104. data/include/rbs/parser.h +6 -6
  105. data/include/rbs/string.h +0 -2
  106. data/include/rbs/util/rbs_allocator.h +34 -13
  107. data/include/rbs/util/rbs_assert.h +12 -1
  108. data/include/rbs/util/rbs_constant_pool.h +0 -3
  109. data/include/rbs/util/rbs_encoding.h +2 -0
  110. data/include/rbs/util/rbs_unescape.h +2 -1
  111. data/include/rbs.h +8 -0
  112. data/lib/rbs/ast/annotation.rb +1 -1
  113. data/lib/rbs/ast/comment.rb +1 -1
  114. data/lib/rbs/ast/declarations.rb +10 -10
  115. data/lib/rbs/ast/members.rb +14 -14
  116. data/lib/rbs/ast/ruby/annotations.rb +293 -3
  117. data/lib/rbs/ast/ruby/comment_block.rb +24 -0
  118. data/lib/rbs/ast/ruby/declarations.rb +198 -3
  119. data/lib/rbs/ast/ruby/helpers/constant_helper.rb +4 -0
  120. data/lib/rbs/ast/ruby/members.rb +532 -22
  121. data/lib/rbs/ast/type_param.rb +24 -4
  122. data/lib/rbs/buffer.rb +20 -15
  123. data/lib/rbs/cli/diff.rb +16 -15
  124. data/lib/rbs/cli/validate.rb +38 -106
  125. data/lib/rbs/cli.rb +52 -19
  126. data/lib/rbs/collection/config/lockfile_generator.rb +14 -2
  127. data/lib/rbs/collection/sources/git.rb +1 -0
  128. data/lib/rbs/definition.rb +1 -1
  129. data/lib/rbs/definition_builder/ancestor_builder.rb +62 -9
  130. data/lib/rbs/definition_builder/method_builder.rb +20 -0
  131. data/lib/rbs/definition_builder.rb +147 -25
  132. data/lib/rbs/diff.rb +7 -1
  133. data/lib/rbs/environment.rb +227 -74
  134. data/lib/rbs/environment_loader.rb +0 -6
  135. data/lib/rbs/errors.rb +27 -18
  136. data/lib/rbs/inline_parser.rb +342 -6
  137. data/lib/rbs/location_aux.rb +1 -1
  138. data/lib/rbs/locator.rb +5 -1
  139. data/lib/rbs/method_type.rb +5 -3
  140. data/lib/rbs/parser_aux.rb +20 -7
  141. data/lib/rbs/prototype/helpers.rb +57 -0
  142. data/lib/rbs/prototype/rb.rb +3 -28
  143. data/lib/rbs/prototype/rbi.rb +3 -20
  144. data/lib/rbs/prototype/runtime.rb +8 -0
  145. data/lib/rbs/resolver/constant_resolver.rb +2 -2
  146. data/lib/rbs/resolver/type_name_resolver.rb +116 -38
  147. data/lib/rbs/subtractor.rb +3 -1
  148. data/lib/rbs/test/type_check.rb +19 -2
  149. data/lib/rbs/type_name.rb +1 -1
  150. data/lib/rbs/types.rb +88 -78
  151. data/lib/rbs/unit_test/type_assertions.rb +35 -8
  152. data/lib/rbs/validator.rb +2 -2
  153. data/lib/rbs/version.rb +1 -1
  154. data/lib/rbs.rb +1 -2
  155. data/lib/rdoc/discover.rb +1 -1
  156. data/lib/rdoc_plugin/parser.rb +1 -1
  157. data/rbs.gemspec +4 -3
  158. data/rust/.gitignore +1 -0
  159. data/rust/Cargo.lock +378 -0
  160. data/rust/Cargo.toml +7 -0
  161. data/rust/ruby-rbs/Cargo.toml +22 -0
  162. data/rust/ruby-rbs/build.rs +764 -0
  163. data/rust/ruby-rbs/examples/locations.rs +60 -0
  164. data/rust/ruby-rbs/src/lib.rs +1 -0
  165. data/rust/ruby-rbs/src/node/mod.rs +742 -0
  166. data/rust/ruby-rbs/tests/sanity.rs +47 -0
  167. data/rust/ruby-rbs/vendor/rbs/config.yml +1 -0
  168. data/rust/ruby-rbs-sys/Cargo.toml +23 -0
  169. data/rust/ruby-rbs-sys/build.rs +204 -0
  170. data/rust/ruby-rbs-sys/src/lib.rs +50 -0
  171. data/rust/ruby-rbs-sys/vendor/rbs/include +1 -0
  172. data/rust/ruby-rbs-sys/vendor/rbs/src +1 -0
  173. data/rust/ruby-rbs-sys/wrapper.h +1 -0
  174. data/schema/typeParam.json +17 -1
  175. data/sig/ast/ruby/annotations.rbs +315 -4
  176. data/sig/ast/ruby/comment_block.rbs +8 -0
  177. data/sig/ast/ruby/declarations.rbs +102 -4
  178. data/sig/ast/ruby/members.rbs +108 -2
  179. data/sig/cli/diff.rbs +5 -11
  180. data/sig/cli/validate.rbs +12 -8
  181. data/sig/cli.rbs +18 -18
  182. data/sig/definition.rbs +6 -1
  183. data/sig/definition_builder.rbs +2 -0
  184. data/sig/environment.rbs +70 -12
  185. data/sig/errors.rbs +13 -14
  186. data/sig/inline_parser.rbs +39 -2
  187. data/sig/locator.rbs +0 -2
  188. data/sig/manifest.yaml +0 -1
  189. data/sig/method_builder.rbs +3 -1
  190. data/sig/parser.rbs +31 -13
  191. data/sig/prototype/helpers.rbs +2 -0
  192. data/sig/resolver/type_name_resolver.rbs +35 -7
  193. data/sig/source.rbs +3 -3
  194. data/sig/type_param.rbs +13 -8
  195. data/sig/types.rbs +6 -7
  196. data/sig/unit_test/spy.rbs +0 -8
  197. data/sig/unit_test/type_assertions.rbs +11 -0
  198. data/src/ast.c +410 -153
  199. data/src/lexer.c +1392 -1313
  200. data/src/lexer.re +3 -0
  201. data/src/lexstate.c +58 -37
  202. data/src/location.c +8 -48
  203. data/src/parser.c +977 -516
  204. data/src/string.c +0 -48
  205. data/src/util/rbs_allocator.c +89 -71
  206. data/src/util/rbs_assert.c +1 -1
  207. data/src/util/rbs_buffer.c +2 -2
  208. data/src/util/rbs_constant_pool.c +10 -14
  209. data/src/util/rbs_encoding.c +4 -8
  210. data/src/util/rbs_unescape.c +56 -20
  211. data/stdlib/bigdecimal/0/big_decimal.rbs +116 -98
  212. data/stdlib/bigdecimal-math/0/big_math.rbs +169 -8
  213. data/stdlib/cgi/0/core.rbs +9 -393
  214. data/stdlib/cgi/0/manifest.yaml +1 -0
  215. data/stdlib/cgi-escape/0/escape.rbs +171 -0
  216. data/stdlib/coverage/0/coverage.rbs +7 -4
  217. data/stdlib/date/0/date.rbs +92 -79
  218. data/stdlib/date/0/date_time.rbs +25 -24
  219. data/stdlib/delegate/0/delegator.rbs +10 -7
  220. data/stdlib/did_you_mean/0/did_you_mean.rbs +17 -16
  221. data/stdlib/digest/0/digest.rbs +110 -0
  222. data/stdlib/erb/0/erb.rbs +748 -347
  223. data/stdlib/etc/0/etc.rbs +55 -50
  224. data/stdlib/fileutils/0/fileutils.rbs +158 -139
  225. data/stdlib/forwardable/0/forwardable.rbs +13 -10
  226. data/stdlib/io-console/0/io-console.rbs +2 -2
  227. data/stdlib/json/0/json.rbs +217 -136
  228. data/stdlib/monitor/0/monitor.rbs +3 -3
  229. data/stdlib/net-http/0/net-http.rbs +162 -134
  230. data/stdlib/objspace/0/objspace.rbs +17 -34
  231. data/stdlib/open-uri/0/open-uri.rbs +48 -8
  232. data/stdlib/open3/0/open3.rbs +469 -10
  233. data/stdlib/openssl/0/openssl.rbs +475 -357
  234. data/stdlib/optparse/0/optparse.rbs +26 -17
  235. data/stdlib/pathname/0/pathname.rbs +11 -1381
  236. data/stdlib/pp/0/pp.rbs +9 -8
  237. data/stdlib/prettyprint/0/prettyprint.rbs +7 -7
  238. data/stdlib/pstore/0/pstore.rbs +35 -30
  239. data/stdlib/psych/0/psych.rbs +65 -12
  240. data/stdlib/psych/0/store.rbs +2 -4
  241. data/stdlib/pty/0/pty.rbs +9 -6
  242. data/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  243. data/stdlib/rdoc/0/code_object.rbs +2 -1
  244. data/stdlib/rdoc/0/parser.rbs +1 -1
  245. data/stdlib/rdoc/0/rdoc.rbs +1 -1
  246. data/stdlib/rdoc/0/store.rbs +1 -1
  247. data/stdlib/resolv/0/resolv.rbs +25 -68
  248. data/stdlib/ripper/0/ripper.rbs +22 -19
  249. data/stdlib/securerandom/0/manifest.yaml +2 -0
  250. data/stdlib/securerandom/0/securerandom.rbs +7 -20
  251. data/stdlib/shellwords/0/shellwords.rbs +2 -2
  252. data/stdlib/singleton/0/singleton.rbs +3 -0
  253. data/stdlib/socket/0/addrinfo.rbs +7 -7
  254. data/stdlib/socket/0/basic_socket.rbs +3 -3
  255. data/stdlib/socket/0/ip_socket.rbs +10 -8
  256. data/stdlib/socket/0/socket.rbs +23 -10
  257. data/stdlib/socket/0/tcp_server.rbs +1 -1
  258. data/stdlib/socket/0/tcp_socket.rbs +11 -3
  259. data/stdlib/socket/0/udp_socket.rbs +1 -1
  260. data/stdlib/socket/0/unix_server.rbs +1 -1
  261. data/stdlib/stringio/0/stringio.rbs +1177 -85
  262. data/stdlib/strscan/0/string_scanner.rbs +27 -25
  263. data/stdlib/tempfile/0/tempfile.rbs +25 -21
  264. data/stdlib/time/0/time.rbs +8 -6
  265. data/stdlib/timeout/0/timeout.rbs +63 -7
  266. data/stdlib/tsort/0/cyclic.rbs +3 -0
  267. data/stdlib/tsort/0/tsort.rbs +7 -6
  268. data/stdlib/uri/0/common.rbs +42 -20
  269. data/stdlib/uri/0/file.rbs +3 -3
  270. data/stdlib/uri/0/generic.rbs +26 -18
  271. data/stdlib/uri/0/http.rbs +2 -2
  272. data/stdlib/uri/0/ldap.rbs +2 -2
  273. data/stdlib/uri/0/mailto.rbs +3 -3
  274. data/stdlib/uri/0/rfc2396_parser.rbs +12 -12
  275. data/stdlib/zlib/0/deflate.rbs +4 -3
  276. data/stdlib/zlib/0/gzip_reader.rbs +6 -6
  277. data/stdlib/zlib/0/gzip_writer.rbs +14 -12
  278. data/stdlib/zlib/0/inflate.rbs +1 -1
  279. data/stdlib/zlib/0/need_dict.rbs +1 -1
  280. data/stdlib/zlib/0/zstream.rbs +1 -0
  281. metadata +50 -6
@@ -609,7 +609,7 @@ class BigDecimal < Numeric
609
609
  # The quotient q is (a/b).floor, and the modulus is the amount that must be
610
610
  # added to q * b to get a.
611
611
  #
612
- def divmod: (Numeric) -> [ BigDecimal, BigDecimal ]
612
+ def divmod: (Numeric) -> [ Integer, BigDecimal ]
613
613
 
614
614
  # <!--
615
615
  # rdoc-file=ext/bigdecimal/bigdecimal.c
@@ -783,20 +783,6 @@ class BigDecimal < Numeric
783
783
  #
784
784
  def power: (Numeric n, int prec) -> BigDecimal
785
785
 
786
- # <!--
787
- # rdoc-file=ext/bigdecimal/bigdecimal.c
788
- # - precs -> array
789
- # -->
790
- # Returns an Array of two Integer values that represent platform-dependent
791
- # internal storage properties.
792
- #
793
- # This method is deprecated and will be removed in the future. Instead, use
794
- # BigDecimal#n_significant_digits for obtaining the number of significant digits
795
- # in scientific notation, and BigDecimal#precision for obtaining the number of
796
- # digits in decimal notation.
797
- #
798
- def precs: () -> [ Integer, Integer ]
799
-
800
786
  # <!--
801
787
  # rdoc-file=ext/bigdecimal/bigdecimal.c
802
788
  # - quo(value) -> bigdecimal
@@ -1274,61 +1260,67 @@ class Integer
1274
1260
 
1275
1261
  # <!--
1276
1262
  # rdoc-file=numeric.c
1277
- # - self / numeric -> numeric_result
1263
+ # - self / other -> numeric
1278
1264
  # -->
1279
- # Performs division; for integer `numeric`, truncates the result to an integer:
1265
+ # Returns the quotient of `self` and `other`.
1266
+ #
1267
+ # For integer `other`, truncates the result to an integer:
1280
1268
  #
1281
- # 4 / 3 # => 1
1282
- # 4 / -3 # => -2
1283
- # -4 / 3 # => -2
1284
- # -4 / -3 # => 1
1269
+ # 4 / 3 # => 1
1270
+ # 4 / -3 # => -2
1271
+ # -4 / 3 # => -2
1272
+ # -4 / -3 # => 1
1285
1273
  #
1286
- # For other +numeric+, returns non-integer result:
1274
+ # For non-integer `other`, returns a non-integer result:
1287
1275
  #
1288
- # 4 / 3.0 # => 1.3333333333333333
1289
- # 4 / Rational(3, 1) # => (4/3)
1290
- # 4 / Complex(3, 0) # => ((4/3)+0i)
1276
+ # 4 / 3.0 # => 1.3333333333333333
1277
+ # 4 / Rational(3, 1) # => (4/3)
1278
+ # 4 / Complex(3, 0) # => ((4/3)+0i)
1291
1279
  #
1292
1280
  def /: (BigDecimal) -> BigDecimal
1293
- | ...
1281
+ | ...
1294
1282
 
1295
1283
  # <!--
1296
1284
  # rdoc-file=numeric.c
1297
- # - self * numeric -> numeric_result
1285
+ # - self * other -> numeric
1298
1286
  # -->
1299
- # Performs multiplication:
1287
+ # Returns the numeric product of `self` and `other`:
1300
1288
  #
1301
1289
  # 4 * 2 # => 8
1302
- # 4 * -2 # => -8
1303
1290
  # -4 * 2 # => -8
1291
+ # 4 * -2 # => -8
1304
1292
  # 4 * 2.0 # => 8.0
1305
1293
  # 4 * Rational(1, 3) # => (4/3)
1306
1294
  # 4 * Complex(2, 0) # => (8+0i)
1307
1295
  #
1308
1296
  def *: (BigDecimal) -> BigDecimal
1309
- | ...
1297
+ | ...
1310
1298
 
1311
1299
  # <!--
1312
1300
  # rdoc-file=numeric.c
1313
- # - self + numeric -> numeric_result
1301
+ # - self + other -> numeric
1314
1302
  # -->
1315
- # Performs addition:
1303
+ # Returns the sum of `self` and `other`:
1304
+ #
1305
+ # 1 + 1 # => 2
1306
+ # 1 + -1 # => 0
1307
+ # 1 + 0 # => 1
1308
+ # 1 + -2 # => -1
1309
+ # 1 + Complex(1, 0) # => (2+0i)
1310
+ # 1 + Rational(1, 1) # => (2/1)
1316
1311
  #
1317
- # 2 + 2 # => 4
1318
- # -2 + 2 # => 0
1319
- # -2 + -2 # => -4
1320
- # 2 + 2.0 # => 4.0
1321
- # 2 + Rational(2, 1) # => (4/1)
1322
- # 2 + Complex(2, 0) # => (4+0i)
1312
+ # For a computation involving Floats, the result may be inexact (see Float#+):
1313
+ #
1314
+ # 1 + 3.14 # => 4.140000000000001
1323
1315
  #
1324
1316
  def +: (BigDecimal) -> BigDecimal
1325
- | ...
1317
+ | ...
1326
1318
 
1327
1319
  # <!--
1328
1320
  # rdoc-file=numeric.c
1329
- # - self - numeric -> numeric_result
1321
+ # - self - other -> numeric
1330
1322
  # -->
1331
- # Performs subtraction:
1323
+ # Returns the difference of `self` and `other`:
1332
1324
  #
1333
1325
  # 4 - 2 # => 2
1334
1326
  # -4 - 2 # => -6
@@ -1338,7 +1330,7 @@ class Integer
1338
1330
  # 4 - Complex(2, 0) # => (2+0i)
1339
1331
  #
1340
1332
  def -: (BigDecimal) -> BigDecimal
1341
- | ...
1333
+ | ...
1342
1334
  end
1343
1335
 
1344
1336
  %a{annotate:rdoc:skip}
@@ -1368,7 +1360,7 @@ class Float
1368
1360
  # rdoc-file=numeric.c
1369
1361
  # - self / other -> numeric
1370
1362
  # -->
1371
- # Returns a new Float which is the result of dividing `self` by `other`:
1363
+ # Returns the quotient of `self` and `other`:
1372
1364
  #
1373
1365
  # f = 3.14
1374
1366
  # f / 2 # => 1.57
@@ -1377,13 +1369,13 @@ class Float
1377
1369
  # f / Complex(2, 0) # => (1.57+0.0i)
1378
1370
  #
1379
1371
  def /: (BigDecimal) -> BigDecimal
1380
- | ...
1372
+ | ...
1381
1373
 
1382
1374
  # <!--
1383
1375
  # rdoc-file=numeric.c
1384
1376
  # - self * other -> numeric
1385
1377
  # -->
1386
- # Returns a new Float which is the product of `self` and `other`:
1378
+ # Returns the numeric product of `self` and `other`:
1387
1379
  #
1388
1380
  # f = 3.14
1389
1381
  # f * 2 # => 6.28
@@ -1392,28 +1384,33 @@ class Float
1392
1384
  # f * Complex(2, 0) # => (6.28+0.0i)
1393
1385
  #
1394
1386
  def *: (BigDecimal) -> BigDecimal
1395
- | ...
1387
+ | ...
1396
1388
 
1397
1389
  # <!--
1398
1390
  # rdoc-file=numeric.c
1399
- # - self + other -> numeric
1391
+ # - self + other -> float or complex
1400
1392
  # -->
1401
- # Returns a new Float which is the sum of `self` and `other`:
1393
+ # Returns the sum of `self` and `other`; the result may be inexact (see Float):
1402
1394
  #
1403
- # f = 3.14
1404
- # f + 1 # => 4.140000000000001
1405
- # f + 1.0 # => 4.140000000000001
1406
- # f + Rational(1, 1) # => 4.140000000000001
1407
- # f + Complex(1, 0) # => (4.140000000000001+0i)
1395
+ # 3.14 + 0 # => 3.14
1396
+ # 3.14 + 1 # => 4.140000000000001
1397
+ # -3.14 + 0 # => -3.14
1398
+ # -3.14 + 1 # => -2.14
1399
+ #
1400
+ # 3.14 + -3.14 # => 0.0
1401
+ # -3.14 + -3.14 # => -6.28
1402
+ #
1403
+ # 3.14 + Complex(1, 0) # => (4.140000000000001+0i)
1404
+ # 3.14 + Rational(1, 1) # => 4.140000000000001
1408
1405
  #
1409
1406
  def +: (BigDecimal) -> BigDecimal
1410
- | ...
1407
+ | ...
1411
1408
 
1412
1409
  # <!--
1413
1410
  # rdoc-file=numeric.c
1414
1411
  # - self - other -> numeric
1415
1412
  # -->
1416
- # Returns a new Float which is the difference of `self` and `other`:
1413
+ # Returns the difference of `self` and `other`:
1417
1414
  #
1418
1415
  # f = 3.14
1419
1416
  # f - 1 # => 2.14
@@ -1422,7 +1419,7 @@ class Float
1422
1419
  # f - Complex(1, 0) # => (2.14+0i)
1423
1420
  #
1424
1421
  def -: (BigDecimal) -> BigDecimal
1425
- | ...
1422
+ | ...
1426
1423
  end
1427
1424
 
1428
1425
  %a{annotate:rdoc:skip}
@@ -1468,10 +1465,9 @@ class Rational
1468
1465
 
1469
1466
  # <!--
1470
1467
  # rdoc-file=rational.c
1471
- # - rat / numeric -> numeric
1472
- # - rat.quo(numeric) -> numeric
1468
+ # - self / other -> numeric
1473
1469
  # -->
1474
- # Performs division.
1470
+ # Returns the quotient of `self` and `other`:
1475
1471
  #
1476
1472
  # Rational(2, 3) / Rational(2, 3) #=> (1/1)
1477
1473
  # Rational(900) / Rational(1) #=> (900/1)
@@ -1480,43 +1476,54 @@ class Rational
1480
1476
  # Rational(20, 9) / 9.8 #=> 0.22675736961451246
1481
1477
  #
1482
1478
  def /: (BigDecimal) -> BigDecimal
1483
- | ...
1479
+ | ...
1484
1480
 
1485
1481
  # <!--
1486
1482
  # rdoc-file=rational.c
1487
- # - rat * numeric -> numeric
1483
+ # - self * other -> numeric
1488
1484
  # -->
1489
- # Performs multiplication.
1485
+ # Returns the numeric product of `self` and `other`:
1490
1486
  #
1491
- # Rational(2, 3) * Rational(2, 3) #=> (4/9)
1492
- # Rational(900) * Rational(1) #=> (900/1)
1493
- # Rational(-2, 9) * Rational(-9, 2) #=> (1/1)
1494
- # Rational(9, 8) * 4 #=> (9/2)
1495
- # Rational(20, 9) * 9.8 #=> 21.77777777777778
1487
+ # Rational(9, 8) * 4 #=> (9/2)
1488
+ # Rational(20, 9) * 9.8 #=> 21.77777777777778
1489
+ # Rational(9, 8) * Complex(1, 2) # => ((9/8)+(9/4)*i)
1490
+ # Rational(2, 3) * Rational(2, 3) #=> (4/9)
1491
+ # Rational(900) * Rational(1) #=> (900/1)
1492
+ # Rational(-2, 9) * Rational(-9, 2) #=> (1/1)
1496
1493
  #
1497
1494
  def *: (BigDecimal) -> BigDecimal
1498
- | ...
1495
+ | ...
1499
1496
 
1500
1497
  # <!--
1501
1498
  # rdoc-file=rational.c
1502
- # - rat + numeric -> numeric
1499
+ # - self + other -> numeric
1503
1500
  # -->
1504
- # Performs addition.
1501
+ # Returns the sum of `self` and `other`:
1502
+ #
1503
+ # Rational(2, 3) + 0 # => (2/3)
1504
+ # Rational(2, 3) + 1 # => (5/3)
1505
+ # Rational(2, 3) + -1 # => (-1/3)
1506
+ #
1507
+ # Rational(2, 3) + Complex(1, 0) # => ((5/3)+0i)
1505
1508
  #
1506
- # Rational(2, 3) + Rational(2, 3) #=> (4/3)
1507
- # Rational(900) + Rational(1) #=> (901/1)
1508
- # Rational(-2, 9) + Rational(-9, 2) #=> (-85/18)
1509
- # Rational(9, 8) + 4 #=> (41/8)
1510
- # Rational(20, 9) + 9.8 #=> 12.022222222222222
1509
+ # Rational(2, 3) + Rational(1, 1) # => (5/3)
1510
+ # Rational(2, 3) + Rational(3, 2) # => (13/6)
1511
+ # Rational(2, 3) + Rational(3.0, 2.0) # => (13/6)
1512
+ # Rational(2, 3) + Rational(3.1, 2.1) # => (30399297484750849/14186338826217063)
1513
+ #
1514
+ # For a computation involving Floats, the result may be inexact (see Float#+):
1515
+ #
1516
+ # Rational(2, 3) + 1.0 # => 1.6666666666666665
1517
+ # Rational(2, 3) + Complex(1.0, 0.0) # => (1.6666666666666665+0.0i)
1511
1518
  #
1512
1519
  def +: (BigDecimal) -> BigDecimal
1513
- | ...
1520
+ | ...
1514
1521
 
1515
1522
  # <!--
1516
1523
  # rdoc-file=rational.c
1517
- # - rat - numeric -> numeric
1524
+ # - self - other -> numeric
1518
1525
  # -->
1519
- # Performs subtraction.
1526
+ # Returns the difference of `self` and `other`:
1520
1527
  #
1521
1528
  # Rational(2, 3) - Rational(2, 3) #=> (0/1)
1522
1529
  # Rational(900) - Rational(1) #=> (899/1)
@@ -1525,7 +1532,7 @@ class Rational
1525
1532
  # Rational(20, 9) - 9.8 #=> -7.577777777777778
1526
1533
  #
1527
1534
  def -: (BigDecimal) -> BigDecimal
1528
- | ...
1535
+ | ...
1529
1536
  end
1530
1537
 
1531
1538
  %a{annotate:rdoc:skip}
@@ -1553,9 +1560,9 @@ class Complex
1553
1560
 
1554
1561
  # <!--
1555
1562
  # rdoc-file=complex.c
1556
- # - complex / numeric -> new_complex
1563
+ # - self / other -> complex
1557
1564
  # -->
1558
- # Returns the quotient of `self` and `numeric`:
1565
+ # Returns the quotient of `self` and `other`:
1559
1566
  #
1560
1567
  # Complex.rect(2, 3) / Complex.rect(2, 3) # => (1+0i)
1561
1568
  # Complex.rect(900) / Complex.rect(1) # => (900+0i)
@@ -1564,43 +1571,54 @@ class Complex
1564
1571
  # Complex.rect(20, 9) / 9.8 # => (2.0408163265306123+0.9183673469387754i)
1565
1572
  #
1566
1573
  def /: (BigDecimal) -> Complex
1567
- | ...
1574
+ | ...
1568
1575
 
1569
1576
  # <!--
1570
1577
  # rdoc-file=complex.c
1571
- # - complex * numeric -> new_complex
1578
+ # - self * other -> numeric
1572
1579
  # -->
1573
- # Returns the product of `self` and `numeric`:
1580
+ # Returns the numeric product of `self` and `other`:
1574
1581
  #
1582
+ # Complex.rect(9, 8) * 4 # => (36+32i)
1583
+ # Complex.rect(20, 9) * 9.8 # => (196.0+88.2i)
1575
1584
  # Complex.rect(2, 3) * Complex.rect(2, 3) # => (-5+12i)
1576
1585
  # Complex.rect(900) * Complex.rect(1) # => (900+0i)
1577
1586
  # Complex.rect(-2, 9) * Complex.rect(-9, 2) # => (0-85i)
1578
- # Complex.rect(9, 8) * 4 # => (36+32i)
1579
- # Complex.rect(20, 9) * 9.8 # => (196.0+88.2i)
1587
+ # Complex.rect(9, 8) * Rational(2, 3) # => ((6/1)+(16/3)*i)
1580
1588
  #
1581
1589
  def *: (BigDecimal) -> Complex
1582
- | ...
1590
+ | ...
1583
1591
 
1584
1592
  # <!--
1585
1593
  # rdoc-file=complex.c
1586
- # - complex + numeric -> new_complex
1594
+ # - self + other -> numeric
1587
1595
  # -->
1588
- # Returns the sum of `self` and `numeric`:
1596
+ # Returns the sum of `self` and `other`:
1597
+ #
1598
+ # Complex(1, 2) + 0 # => (1+2i)
1599
+ # Complex(1, 2) + 1 # => (2+2i)
1600
+ # Complex(1, 2) + -1 # => (0+2i)
1601
+ #
1602
+ # Complex(1, 2) + 1.0 # => (2.0+2i)
1603
+ #
1604
+ # Complex(1, 2) + Complex(2, 1) # => (3+3i)
1605
+ # Complex(1, 2) + Complex(2.0, 1.0) # => (3.0+3.0i)
1606
+ #
1607
+ # Complex(1, 2) + Rational(1, 1) # => ((2/1)+2i)
1608
+ # Complex(1, 2) + Rational(1, 2) # => ((3/2)+2i)
1609
+ #
1610
+ # For a computation involving Floats, the result may be inexact (see Float#+):
1589
1611
  #
1590
- # Complex.rect(2, 3) + Complex.rect(2, 3) # => (4+6i)
1591
- # Complex.rect(900) + Complex.rect(1) # => (901+0i)
1592
- # Complex.rect(-2, 9) + Complex.rect(-9, 2) # => (-11+11i)
1593
- # Complex.rect(9, 8) + 4 # => (13+8i)
1594
- # Complex.rect(20, 9) + 9.8 # => (29.8+9i)
1612
+ # Complex(1, 2) + 3.14 # => (4.140000000000001+2i)
1595
1613
  #
1596
1614
  def +: (BigDecimal) -> Complex
1597
- | ...
1615
+ | ...
1598
1616
 
1599
1617
  # <!--
1600
1618
  # rdoc-file=complex.c
1601
- # - complex - numeric -> new_complex
1619
+ # - self - other -> complex
1602
1620
  # -->
1603
- # Returns the difference of `self` and `numeric`:
1621
+ # Returns the difference of `self` and `other`:
1604
1622
  #
1605
1623
  # Complex.rect(2, 3) - Complex.rect(2, 3) # => (0+0i)
1606
1624
  # Complex.rect(900) - Complex.rect(1) # => (899+0i)
@@ -1609,7 +1627,7 @@ class Complex
1609
1627
  # Complex.rect(20, 9) - 9.8 # => (10.2+9i)
1610
1628
  #
1611
1629
  def -: (BigDecimal) -> Complex
1612
- | ...
1630
+ | ...
1613
1631
  end
1614
1632
 
1615
1633
  %a{annotate:rdoc:skip}
@@ -35,6 +35,46 @@ module BigMath
35
35
  #
36
36
  def self?.PI: (Numeric prec) -> BigDecimal
37
37
 
38
+ # Computes the arccosine of `decimal` to the specified number of digits of
39
+ # precision, `numeric`.
40
+ #
41
+ # If `decimal` is NaN, returns NaN.
42
+ #
43
+ # BigMath.acos(BigDecimal('0.5'), 32).to_s
44
+ # #=> "0.10471975511965977461542144610932e1"
45
+ #
46
+ def self?.acos: (BigDecimal, Numeric) -> BigDecimal
47
+
48
+ # Computes the inverse hyperbolic cosine of `decimal` to the specified number of
49
+ # digits of precision, `numeric`.
50
+ #
51
+ # If `decimal` is NaN, returns NaN.
52
+ #
53
+ # BigMath.acosh(BigDecimal('2'), 32).to_s
54
+ # #=> "0.1316957896924816708625046347308e1"
55
+ #
56
+ def self?.acosh: (BigDecimal, Numeric) -> BigDecimal
57
+
58
+ # Computes the arcsine of `decimal` to the specified number of digits of
59
+ # precision, `numeric`.
60
+ #
61
+ # If `decimal` is NaN, returns NaN.
62
+ #
63
+ # BigMath.asin(BigDecimal('0.5'), 32).to_s
64
+ # #=> "0.52359877559829887307710723054658e0"
65
+ #
66
+ def self?.asin: (BigDecimal, Numeric) -> BigDecimal
67
+
68
+ # Computes the inverse hyperbolic sine of `decimal` to the specified number of
69
+ # digits of precision, `numeric`.
70
+ #
71
+ # If `decimal` is NaN, returns NaN.
72
+ #
73
+ # BigMath.asinh(BigDecimal('1'), 32).to_s
74
+ # #=> "0.88137358701954302523260932497979e0"
75
+ #
76
+ def self?.asinh: (BigDecimal, Numeric) -> BigDecimal
77
+
38
78
  # <!--
39
79
  # rdoc-file=ext/bigdecimal/lib/bigdecimal/math.rb
40
80
  # - atan(decimal, numeric) -> BigDecimal
@@ -49,6 +89,32 @@ module BigMath
49
89
  #
50
90
  def self?.atan: (BigDecimal x, Numeric prec) -> BigDecimal
51
91
 
92
+ # Computes the arctangent of y and x to the specified number of digits of
93
+ # precision, `numeric`.
94
+ #
95
+ # BigMath.atan2(BigDecimal('-1'), BigDecimal('1'), 32).to_s
96
+ # #=> "-0.78539816339744830961566084581988e0"
97
+ #
98
+ def self?.atan2: (BigDecimal, BigDecimal, Numeric) -> BigDecimal
99
+
100
+ # Computes the inverse hyperbolic tangent of `decimal` to the specified number
101
+ # of digits of precision, `numeric`.
102
+ #
103
+ # If `decimal` is NaN, returns NaN.
104
+ #
105
+ # BigMath.atanh(BigDecimal('0.5'), 32).to_s
106
+ # #=> "0.54930614433405484569762261846126e0"
107
+ #
108
+ def self?.atanh: (BigDecimal, Numeric) -> BigDecimal
109
+
110
+ # Computes the cube root of `decimal` to the specified number of digits of
111
+ # precision, `numeric`.
112
+ #
113
+ # BigMath.cbrt(BigDecimal('2'), 32).to_s
114
+ # #=> "0.12599210498948731647672106072782e1"
115
+ #
116
+ def self?.cbrt: (BigDecimal, Numeric) -> BigDecimal
117
+
52
118
  # <!--
53
119
  # rdoc-file=ext/bigdecimal/lib/bigdecimal/math.rb
54
120
  # - cos(decimal, numeric) -> BigDecimal
@@ -63,10 +129,36 @@ module BigMath
63
129
  #
64
130
  def self?.cos: (BigDecimal x, Numeric prec) -> BigDecimal
65
131
 
66
- # <!--
67
- # rdoc-file=ext/bigdecimal/bigdecimal.c
68
- # - BigMath.exp(decimal, numeric) -> BigDecimal
69
- # -->
132
+ # Computes the hyperbolic cosine of `decimal` to the specified number of digits
133
+ # of precision, `numeric`.
134
+ #
135
+ # If `decimal` is NaN, returns NaN.
136
+ #
137
+ # BigMath.cosh(BigDecimal('1'), 32).to_s
138
+ # #=> "0.15430806348152437784779056207571e1"
139
+ #
140
+ def self?.cosh: (BigDecimal, Numeric) -> BigDecimal
141
+
142
+ # Computes the error function of +decimal+ to the specified number of digits of
143
+ # precision, +numeric+.
144
+ #
145
+ # If +decimal+ is NaN, returns NaN.
146
+ #
147
+ # BigMath.erf(BigDecimal('1'), 32).to_s
148
+ # #=> "0.84270079294971486934122063508261e0"
149
+ #
150
+ def self?.erf: (BigDecimal, Numeric) -> BigDecimal
151
+
152
+ # Computes the complementary error function of +decimal+ to the specified number of digits of
153
+ # precision, +numeric+.
154
+ #
155
+ # If +decimal+ is NaN, returns NaN.
156
+ #
157
+ # BigMath.erfc(BigDecimal('10'), 32).to_s
158
+ # #=> "0.20884875837625447570007862949578e-44"
159
+ #
160
+ def self?.erfc: (BigDecimal, Numeric) -> BigDecimal
161
+
70
162
  # Computes the value of e (the base of natural logarithms) raised to the power
71
163
  # of `decimal`, to the specified number of digits of precision.
72
164
  #
@@ -76,10 +168,45 @@ module BigMath
76
168
  #
77
169
  def self?.exp: (BigDecimal, Numeric prec) -> BigDecimal
78
170
 
79
- # <!--
80
- # rdoc-file=ext/bigdecimal/bigdecimal.c
81
- # - BigMath.log(decimal, numeric) -> BigDecimal
82
- # -->
171
+ # Decomposes +x+ into a normalized fraction and an integral power of ten.
172
+ #
173
+ # BigMath.frexp(BigDecimal(123.456))
174
+ # #=> [0.123456e0, 3]
175
+ #
176
+ def self?.frexp: (BigDecimal) -> [ BigDecimal, Integer ]
177
+
178
+ # Computes the gamma function of +decimal+ to the specified number of
179
+ # digits of precision, +numeric+.
180
+ #
181
+ # BigMath.gamma(BigDecimal('0.5'), 32).to_s
182
+ # #=> "0.17724538509055160272981674833411e1"
183
+ #
184
+ def self?.gamma: (BigDecimal, Numeric) -> BigDecimal
185
+
186
+ # Returns sqrt(x**2 + y**2) to the specified number of digits of precision,
187
+ # `numeric`.
188
+ #
189
+ # BigMath.hypot(BigDecimal('1'), BigDecimal('2'), 32).to_s
190
+ # #=> "0.22360679774997896964091736687313e1"
191
+ #
192
+ def self?.hypot: (BigDecimal, BigDecimal, Numeric) -> BigDecimal
193
+
194
+ # Inverse of +frexp+.
195
+ # Returns the value of fraction * 10**exponent.
196
+ #
197
+ # BigMath.ldexp(BigDecimal("0.123456e0"), 3)
198
+ # #=> 0.123456e3
199
+ #
200
+ def self?.ldexp: (BigDecimal, Integer) -> BigDecimal
201
+
202
+ # Computes the natural logarithm of the absolute value of the gamma function
203
+ # of +decimal+ to the specified number of digits of precision, +numeric+ and its sign.
204
+ #
205
+ # BigMath.lgamma(BigDecimal('0.5'), 32)
206
+ # #=> [0.57236494292470008707171367567653e0, 1]
207
+ #
208
+ def self?.lgamma: (BigDecimal, Numeric) -> [BigDecimal, Integer]
209
+
83
210
  # Computes the natural logarithm of `decimal` to the specified number of digits
84
211
  # of precision, `numeric`.
85
212
  #
@@ -91,6 +218,20 @@ module BigMath
91
218
  #
92
219
  def self?.log: (BigDecimal, Numeric prec) -> BigDecimal
93
220
 
221
+ # Computes the base 2 logarithm of `decimal` to the specified number of digits
222
+ # of precision, `numeric`.
223
+ #
224
+ # If `decimal` is zero or negative, raises Math::DomainError.
225
+ #
226
+ # If `decimal` is positive infinity, returns Infinity.
227
+ #
228
+ # If `decimal` is NaN, returns NaN.
229
+ #
230
+ # BigMath.log2(BigDecimal('3'), 32).to_s
231
+ # #=> "0.15849625007211561814537389439478e1"
232
+ #
233
+ def self?.log2: (BigDecimal, Numeric) -> BigDecimal
234
+
94
235
  # <!--
95
236
  # rdoc-file=ext/bigdecimal/lib/bigdecimal/math.rb
96
237
  # - sin(decimal, numeric) -> BigDecimal
@@ -105,6 +246,16 @@ module BigMath
105
246
  #
106
247
  def self?.sin: (BigDecimal x, Numeric prec) -> BigDecimal
107
248
 
249
+ # Computes the hyperbolic sine of `decimal` to the specified number of digits of
250
+ # precision, `numeric`.
251
+ #
252
+ # If `decimal` is NaN, returns NaN.
253
+ #
254
+ # BigMath.sinh(BigDecimal('1'), 32).to_s
255
+ # #=> "0.11752011936438014568823818505956e1"
256
+ #
257
+ def self?.sinh: (BigDecimal, Numeric) -> BigDecimal
258
+
108
259
  # <!--
109
260
  # rdoc-file=ext/bigdecimal/lib/bigdecimal/math.rb
110
261
  # - sqrt(decimal, numeric) -> BigDecimal
@@ -116,4 +267,14 @@ module BigMath
116
267
  # #=> "0.1414213562373095048801688724e1"
117
268
  #
118
269
  def self?.sqrt: (BigDecimal x, Numeric prec) -> BigDecimal
270
+
271
+ # Computes the hyperbolic tangent of `decimal` to the specified number of digits
272
+ # of precision, `numeric`.
273
+ #
274
+ # If `decimal` is NaN, returns NaN.
275
+ #
276
+ # BigMath.tanh(BigDecimal('1'), 32).to_s
277
+ # #=> "0.76159415595576488811945828260479e0"
278
+ #
279
+ def self?.tanh: (BigDecimal, Numeric) -> BigDecimal
119
280
  end