bigdecimal 3.1.6 → 3.1.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f5b29096324f4d5c2effbe82e606b7c4d15dcfc51d447f387389fd2a30a0a399
4
- data.tar.gz: 7430f646c26f19d709da049de86dc3befe2226900d7eb246ae6aa74fa40be284
3
+ metadata.gz: 2090d7c93ccb0ee94f4e31b443f01a4a996c7f0a12f0684ac21bcdea56813fda
4
+ data.tar.gz: de18780d3080b0251e6f9cb8a0b6b31ea77d38d92874b57eb37efb40cec83997
5
5
  SHA512:
6
- metadata.gz: c6eb24b2bdde0a88af4df1fd80eaa5553a4dfbba55351c8f9b4c9b4124e7c77d7ac1ea0579d5c2b4a30ecd23ebf0e9bdb436624888cd4e02f87e0a295391a9c3
7
- data.tar.gz: 7c4f70bfdc422a0188c8f99aeaaf5002475457859bbe0a7d2bed95d06c61b47fa89deec2bb5f3e633858f3abe18d4ca374f22b2779a256a50e110370e067e0e1
6
+ metadata.gz: 5a2c8d3e0c57a6bd6e63ffcb5c0a125b9edcb85a4528db302d95bce276e9fadc513727a7a7b9f3bb22a10c305e2b5533c53e60612ed68843456b5d43c4aabd9e
7
+ data.tar.gz: 3b93bfadda8ce3963d2aa61ce1342be2664ea216d029ec24588869a14b12ffb0171538f088490cf8da25fe836361be2d3ff630d514790a0d152bb988c952431e
data/bigdecimal.gemspec CHANGED
@@ -52,4 +52,6 @@ Gem::Specification.new do |s|
52
52
  end
53
53
 
54
54
  s.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
55
+
56
+ s.metadata["changelog_uri"] = s.homepage + "/blob/master/CHANGES.md"
55
57
  end
@@ -31,7 +31,7 @@
31
31
  #include "bits.h"
32
32
  #include "static_assert.h"
33
33
 
34
- #define BIGDECIMAL_VERSION "3.1.6"
34
+ #define BIGDECIMAL_VERSION "3.1.8"
35
35
 
36
36
  /* #define ENABLE_NUMERIC_STRING */
37
37
 
@@ -1780,6 +1780,17 @@ BigDecimal_neg(VALUE self)
1780
1780
  return VpCheckGetValue(c);
1781
1781
  }
1782
1782
 
1783
+ /*
1784
+ * call-seq:
1785
+ * a * b -> bigdecimal
1786
+ *
1787
+ * Multiply by the specified value.
1788
+ *
1789
+ * The result precision will be the precision of the sum of each precision.
1790
+ *
1791
+ * See BigDecimal#mult.
1792
+ */
1793
+
1783
1794
  static VALUE
1784
1795
  BigDecimal_mult(VALUE self, VALUE r)
1785
1796
  {
@@ -3257,10 +3268,11 @@ BigDecimal_initialize_copy(VALUE self, VALUE other)
3257
3268
  return self;
3258
3269
  }
3259
3270
 
3271
+ /* :nodoc: */
3260
3272
  static VALUE
3261
3273
  BigDecimal_clone(VALUE self)
3262
3274
  {
3263
- return self;
3275
+ return self;
3264
3276
  }
3265
3277
 
3266
3278
  #ifdef HAVE_RB_OPTS_EXCEPTION_P
@@ -3758,6 +3770,12 @@ f_BigDecimal(int argc, VALUE *argv, VALUE self)
3758
3770
  return rb_convert_to_BigDecimal(val, digs, exception);
3759
3771
  }
3760
3772
 
3773
+ /* call-seq:
3774
+ * BigDecimal.interpret_loosely(string) -> bigdecimal
3775
+ *
3776
+ * Returns the +BigDecimal+ converted loosely from +string+.
3777
+ */
3778
+
3761
3779
  static VALUE
3762
3780
  BigDecimal_s_interpret_loosely(VALUE klass, VALUE str)
3763
3781
  {
@@ -4238,6 +4256,17 @@ BigDecimal_negative_zero(void)
4238
4256
  return BIGDECIMAL_NEGATIVE_ZERO;
4239
4257
  }
4240
4258
 
4259
+ static inline VALUE
4260
+ BigDecimal_literal(const char *str)
4261
+ {
4262
+ VALUE arg = rb_str_new_cstr(str);
4263
+ VALUE val = f_BigDecimal(1, &arg, rb_cBigDecimal);
4264
+ rb_gc_register_mark_object(val);
4265
+ return val;
4266
+ }
4267
+
4268
+ #define BIGDECIMAL_LITERAL(var, val) (BIGDECIMAL_ ## var = BigDecimal_literal(#val))
4269
+
4241
4270
  /* Document-class: BigDecimal
4242
4271
  * BigDecimal provides arbitrary-precision floating point decimal arithmetic.
4243
4272
  *
@@ -4394,7 +4423,6 @@ Init_bigdecimal(void)
4394
4423
  #ifdef HAVE_RB_EXT_RACTOR_SAFE
4395
4424
  rb_ext_ractor_safe(true);
4396
4425
  #endif
4397
- VALUE arg;
4398
4426
 
4399
4427
  id_BigDecimal_exception_mode = rb_intern_const("BigDecimal.exception_mode");
4400
4428
  id_BigDecimal_rounding_mode = rb_intern_const("BigDecimal.rounding_mode");
@@ -4532,33 +4560,19 @@ Init_bigdecimal(void)
4532
4560
  rb_define_const(rb_cBigDecimal, "SIGN_NEGATIVE_INFINITE", INT2FIX(VP_SIGN_NEGATIVE_INFINITE));
4533
4561
 
4534
4562
  /* Positive zero value. */
4535
- arg = rb_str_new2("+0");
4536
- BIGDECIMAL_POSITIVE_ZERO = f_BigDecimal(1, &arg, rb_cBigDecimal);
4537
- rb_gc_register_mark_object(BIGDECIMAL_POSITIVE_ZERO);
4563
+ BIGDECIMAL_LITERAL(POSITIVE_ZERO, +0);
4538
4564
 
4539
4565
  /* Negative zero value. */
4540
- arg = rb_str_new2("-0");
4541
- BIGDECIMAL_NEGATIVE_ZERO = f_BigDecimal(1, &arg, rb_cBigDecimal);
4542
- rb_gc_register_mark_object(BIGDECIMAL_NEGATIVE_ZERO);
4566
+ BIGDECIMAL_LITERAL(NEGATIVE_ZERO, -0);
4543
4567
 
4544
- /* Positive infinity value. */
4545
- arg = rb_str_new2("+Infinity");
4546
- BIGDECIMAL_POSITIVE_INFINITY = f_BigDecimal(1, &arg, rb_cBigDecimal);
4547
- rb_gc_register_mark_object(BIGDECIMAL_POSITIVE_INFINITY);
4568
+ /* Positive infinity[rdoc-ref:BigDecimal@Infinity] value. */
4569
+ rb_define_const(rb_cBigDecimal, "INFINITY", BIGDECIMAL_LITERAL(POSITIVE_INFINITY, +Infinity));
4548
4570
 
4549
4571
  /* Negative infinity value. */
4550
- arg = rb_str_new2("-Infinity");
4551
- BIGDECIMAL_NEGATIVE_INFINITY = f_BigDecimal(1, &arg, rb_cBigDecimal);
4552
- rb_gc_register_mark_object(BIGDECIMAL_NEGATIVE_INFINITY);
4572
+ BIGDECIMAL_LITERAL(NEGATIVE_INFINITY, -Infinity);
4553
4573
 
4554
- /* 'Not a Number' value. */
4555
- arg = rb_str_new2("NaN");
4556
- BIGDECIMAL_NAN = f_BigDecimal(1, &arg, rb_cBigDecimal);
4557
- rb_gc_register_mark_object(BIGDECIMAL_NAN);
4558
-
4559
- /* Special value constants */
4560
- rb_define_const(rb_cBigDecimal, "INFINITY", BIGDECIMAL_POSITIVE_INFINITY);
4561
- rb_define_const(rb_cBigDecimal, "NAN", BIGDECIMAL_NAN);
4574
+ /* '{Not a Number}[rdoc-ref:BigDecimal@Not+a+Number]' value. */
4575
+ rb_define_const(rb_cBigDecimal, "NAN", BIGDECIMAL_LITERAL(NAN, NaN));
4562
4576
 
4563
4577
  /* instance methods */
4564
4578
  rb_define_method(rb_cBigDecimal, "precs", BigDecimal_prec, 0);
@@ -5203,6 +5217,48 @@ bigdecimal_parse_special_string(const char *str)
5203
5217
  return NULL;
5204
5218
  }
5205
5219
 
5220
+ struct VpCtoV_args {
5221
+ Real *a;
5222
+ const char *int_chr;
5223
+ size_t ni;
5224
+ const char *frac;
5225
+ size_t nf;
5226
+ const char *exp_chr;
5227
+ size_t ne;
5228
+ };
5229
+
5230
+ static VALUE
5231
+ call_VpCtoV(VALUE arg)
5232
+ {
5233
+ struct VpCtoV_args *x = (struct VpCtoV_args *)arg;
5234
+ return (VALUE)VpCtoV(x->a, x->int_chr, x->ni, x->frac, x->nf, x->exp_chr, x->ne);
5235
+ }
5236
+
5237
+ static int
5238
+ protected_VpCtoV(Real *a, const char *int_chr, size_t ni, const char *frac, size_t nf, const char *exp_chr, size_t ne, int free_on_error)
5239
+ {
5240
+ struct VpCtoV_args args;
5241
+ int state = 0;
5242
+
5243
+ args.a = a;
5244
+ args.int_chr = int_chr;
5245
+ args.ni = ni;
5246
+ args.frac = frac;
5247
+ args.nf = nf;
5248
+ args.exp_chr = exp_chr;
5249
+ args.ne = ne;
5250
+
5251
+ VALUE result = rb_protect(call_VpCtoV, (VALUE)&args, &state);
5252
+ if (state) {
5253
+ if (free_on_error) {
5254
+ rbd_free_struct(a);
5255
+ }
5256
+ rb_jump_tag(state);
5257
+ }
5258
+
5259
+ return (int)result;
5260
+ }
5261
+
5206
5262
  /*
5207
5263
  * Allocates variable.
5208
5264
  * [Input]
@@ -5422,7 +5478,7 @@ VpAlloc(size_t mx, const char *szVal, int strict_p, int exc)
5422
5478
  vp = rbd_allocate_struct(len);
5423
5479
  vp->MaxPrec = len; /* set max precision */
5424
5480
  VpSetZero(vp, sign);
5425
- VpCtoV(vp, psz, ni, psz + ipf, nf, psz + ipe, ne);
5481
+ protected_VpCtoV(vp, psz, ni, psz + ipf, nf, psz + ipe, ne, true);
5426
5482
  rb_str_resize(buf, 0);
5427
5483
  return vp;
5428
5484
  }
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bigdecimal
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.6
4
+ version: 3.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenta Murata
8
8
  - Zachary Scott
9
9
  - Shigeo Kobayashi
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-01-18 00:00:00.000000000 Z
13
+ date: 2024-05-07 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: This library provides arbitrary-precision decimal floating-point number
16
16
  class.
@@ -45,8 +45,9 @@ homepage: https://github.com/ruby/bigdecimal
45
45
  licenses:
46
46
  - Ruby
47
47
  - BSD-2-Clause
48
- metadata: {}
49
- post_install_message:
48
+ metadata:
49
+ changelog_uri: https://github.com/ruby/bigdecimal/blob/master/CHANGES.md
50
+ post_install_message:
50
51
  rdoc_options: []
51
52
  require_paths:
52
53
  - lib
@@ -61,8 +62,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
62
  - !ruby/object:Gem::Version
62
63
  version: '0'
63
64
  requirements: []
64
- rubygems_version: 3.6.0.dev
65
- signing_key:
65
+ rubygems_version: 3.5.9
66
+ signing_key:
66
67
  specification_version: 4
67
68
  summary: Arbitrary-precision decimal floating-point number library.
68
69
  test_files: []