ruby-mpfr 0.0.10 → 0.0.11

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.
data/.gemtest ADDED
File without changes
@@ -1,5 +1,19 @@
1
1
  require 'mkmf'
2
2
 
3
+ i = 0
4
+ while i < ARGV.size
5
+ case ARGV[i]
6
+ when '--ldflags'
7
+ if args = ARGV[i+1]
8
+ i += 1
9
+ $LDFLAGS += " #{args}"
10
+ end
11
+ else
12
+ raise "Invalid option: #{ARGV[i]}"
13
+ end
14
+ i += 1
15
+ end
16
+
3
17
  $CFLAGS += " -Wall"
4
18
 
5
19
  REQUIRE_VERSION = 3
data/ext/mpfr/extconf.rb CHANGED
@@ -1,5 +1,19 @@
1
1
  require 'mkmf'
2
2
 
3
+ i = 0
4
+ while i < ARGV.size
5
+ case ARGV[i]
6
+ when '--ldflags'
7
+ if args = ARGV[i+1]
8
+ i += 1
9
+ $LDFLAGS += " #{args}"
10
+ end
11
+ else
12
+ raise "Invalid option: #{ARGV[i]}"
13
+ end
14
+ i += 1
15
+ end
16
+
3
17
  $CFLAGS += " -Wall"
4
18
 
5
19
  REQUIRE_VERSION = 3
data/ext/mpfr/ruby_mpfr.c CHANGED
@@ -34,8 +34,7 @@ mp_rnd_t r_mpfr_rnd_from_value(VALUE rnd)
34
34
  } else if (rnd_id == id_rnda) {
35
35
  return MPFR_RNDA;
36
36
  }
37
- rb_raise(rb_eArgError, "Argument must be Rounding Mode.");
38
- /* rb_raise(rb_eArgError, "Argument must be Rounding Mode: %s", rb_class2name(rnd)); */
37
+ rb_raise(rb_eArgError, "Argument must be a constant meaning rounding mode, but the objects is %s.", rb_obj_classname(rnd));
39
38
  }
40
39
 
41
40
  /* If argc equals max, convert last argument to rounding mode number. */
@@ -407,7 +406,7 @@ void r_mpfr_set_robj(MPFR *ptr, VALUE obj, mp_rnd_t rnd)
407
406
  r_mpfr_get_struct(ptr_obj, tmp);
408
407
  mpfr_set(ptr, ptr_obj, rnd);
409
408
  } else {
410
- rb_raise(rb_eArgError, "Invalid class %s for making MPFR.", rb_class2name(obj));
409
+ rb_raise(rb_eArgError, "Invalid class %s for making MPFR.", rb_obj_classname(obj));
411
410
  }
412
411
  break;
413
412
  }
@@ -419,7 +418,7 @@ VALUE r_mpfr_robj_to_mpfr(VALUE obj, int argc, VALUE *argv)
419
418
  if (rb_respond_to(obj, to_fr)) {
420
419
  return rb_funcall2(obj, to_fr, argc, argv);
421
420
  }
422
- rb_raise(rb_eArgError, "The object of %s can not been converted to MPFR.", rb_class2name(obj));
421
+ rb_raise(rb_eArgError, "The object of %s can not been converted to MPFR.", rb_obj_classname(obj));
423
422
  }
424
423
 
425
424
  /* If obj is MPFR instance, then this method returns obj. */
@@ -721,7 +720,9 @@ static VALUE r_mpfr_to_strf(VALUE self, VALUE format_str)
721
720
  r_mpfr_get_struct(ptr_self, self);
722
721
  char *format = StringValuePtr(format_str);
723
722
  char *ret_str;
724
- mpfr_asprintf(&ret_str, format, ptr_self);
723
+ if (!mpfr_asprintf(&ret_str, format, ptr_self)) {
724
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
725
+ }
725
726
  VALUE ret_val = rb_str_new2(ret_str);
726
727
  mpfr_free_str(ret_str);
727
728
  return ret_val;
@@ -733,7 +734,9 @@ static VALUE r_mpfr_to_s(VALUE self)
733
734
  MPFR *ptr_self;
734
735
  r_mpfr_get_struct(ptr_self, self);
735
736
  char *ret_str;
736
- mpfr_asprintf(&ret_str, "%.Re", ptr_self);
737
+ if (!mpfr_asprintf(&ret_str, "%.Re", ptr_self)) {
738
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
739
+ }
737
740
  VALUE ret_val = rb_str_new2(ret_str);
738
741
  mpfr_free_str(ret_str);
739
742
  return ret_val;
@@ -745,7 +748,10 @@ static VALUE r_mpfr_inspect(VALUE self)
745
748
  MPFR *ptr_s;
746
749
  r_mpfr_get_struct(ptr_s, self);
747
750
  char *ret_str;
748
- mpfr_asprintf(&ret_str, "#<MPFR:%lx,'%0.Re',%d>", NUM2LONG(rb_funcall(self, object_id, 0)), ptr_s, mpfr_get_prec(ptr_s));
751
+ if (!mpfr_asprintf(&ret_str, "#<MPFR:%lx,'%0.Re',%d>", NUM2LONG(rb_funcall(self, object_id, 0)),
752
+ ptr_s, mpfr_get_prec(ptr_s))) {
753
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
754
+ }
749
755
  VALUE ret_val = rb_str_new2(ret_str);
750
756
  mpfr_free_str(ret_str);
751
757
  return ret_val;
@@ -2761,17 +2767,17 @@ static VALUE r_mpfr_buildopt_decimal_p(VALUE self)
2761
2767
  return mpfr_buildopt_decimal_p() == 0 ? Qnil : Qtrue;
2762
2768
  }
2763
2769
 
2764
- static VALUE r_mpfr_marshal_dump(VALUE self)
2770
+ char *r_mpfr_dump_to_string(MPFR *ptr_s)
2765
2771
  {
2766
- MPFR *ptr_s;
2767
- r_mpfr_get_struct(ptr_s, self);
2768
2772
  char *ret_str;
2769
2773
  if (mpfr_regular_p(ptr_s)) {
2770
2774
  mpz_t m;
2771
2775
  mp_exp_t e;
2772
2776
  mpz_init(m);
2773
2777
  e = mpfr_get_z_2exp(m, ptr_s);
2774
- mpfr_asprintf(&ret_str, "%c%ld\t%ld\t%Zd", MPFR_DUMP_NUMBER, mpfr_get_prec(ptr_s), (long int)e, m);
2778
+ if (!mpfr_asprintf(&ret_str, "%c%ld\t%ld\t%Zd", MPFR_DUMP_NUMBER, mpfr_get_prec(ptr_s), (long int)e, m)) {
2779
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
2780
+ }
2775
2781
  mpz_clear(m);
2776
2782
  } else {
2777
2783
  char type;
@@ -2788,21 +2794,27 @@ static VALUE r_mpfr_marshal_dump(VALUE self)
2788
2794
  } else {
2789
2795
  type = MPFR_DUMP_MINF;
2790
2796
  }
2791
- mpfr_asprintf(&ret_str, "%c%ld", type, mpfr_get_prec(ptr_s));
2797
+ if (!mpfr_asprintf(&ret_str, "%c%ld", type, mpfr_get_prec(ptr_s))) {
2798
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
2799
+ }
2792
2800
  }
2801
+ return ret_str;
2802
+ }
2803
+
2804
+ static VALUE r_mpfr_marshal_dump(VALUE self)
2805
+ {
2806
+ MPFR *ptr_s;
2807
+ r_mpfr_get_struct(ptr_s, self);
2808
+ char *ret_str = r_mpfr_dump_to_string(ptr_s);
2793
2809
  VALUE ret_val = rb_str_new2(ret_str);
2794
2810
  mpfr_free_str(ret_str);
2795
2811
  return ret_val;
2796
2812
  }
2797
2813
 
2798
- static VALUE r_mpfr_marshal_load(VALUE self, VALUE dump_string)
2814
+ void r_mpfr_load_string(MPFR *ptr_s, const char *dump)
2799
2815
  {
2800
2816
  long int prec;
2801
- MPFR *ptr_s;
2802
- r_mpfr_get_struct(ptr_s, self);
2803
- Check_Type(dump_string, T_STRING);
2804
- char *dump, type;
2805
- dump = RSTRING_PTR(dump_string);
2817
+ char type;
2806
2818
  type = dump[0];
2807
2819
  dump++;
2808
2820
  if (type == MPFR_DUMP_NUMBER) {
@@ -2839,6 +2851,14 @@ static VALUE r_mpfr_marshal_load(VALUE self, VALUE dump_string)
2839
2851
  rb_raise(rb_eArgError, "Invalid dumped data for marshal_load.");
2840
2852
  }
2841
2853
  }
2854
+ }
2855
+
2856
+ static VALUE r_mpfr_marshal_load(VALUE self, VALUE dump_string)
2857
+ {
2858
+ MPFR *ptr_s;
2859
+ r_mpfr_get_struct(ptr_s, self);
2860
+ Check_Type(dump_string, T_STRING);
2861
+ r_mpfr_load_string(ptr_s, RSTRING_PTR(dump_string));
2842
2862
  return self;
2843
2863
  }
2844
2864
 
data/ext/mpfr/ruby_mpfr.h CHANGED
@@ -37,5 +37,8 @@ mp_rnd_t r_mpfr_rnd_from_optional_argument(int min, int max, int argc, VALUE *ar
37
37
  mp_rnd_t r_mpfr_prec_from_optional_argument(int min, int max, int argc, VALUE *argv);
38
38
  void r_mpfr_get_rnd_prec_from_optional_arguments(mp_rnd_t *rnd, mp_prec_t *prec, int min, int max, int argc, VALUE *argv);
39
39
 
40
+ char *r_mpfr_dump_to_string(MPFR *ptr_s);
41
+ void r_mpfr_load_string(MPFR *ptr_s, const char *dump);
42
+
40
43
  #endif /* _RUBY_MPFR_H_ */
41
44
 
@@ -1,5 +1,19 @@
1
1
  require 'mkmf'
2
2
 
3
+ i = 0
4
+ while i < ARGV.size
5
+ case ARGV[i]
6
+ when '--ldflags'
7
+ if args = ARGV[i+1]
8
+ i += 1
9
+ $LDFLAGS += " #{args}"
10
+ end
11
+ else
12
+ raise "Invalid option: #{ARGV[i]}"
13
+ end
14
+ i += 1
15
+ end
16
+
3
17
  $CFLAGS += " -Wall"
4
18
 
5
19
  REQUIRE_VERSION = 3
@@ -30,11 +30,15 @@ VALUE r_mpfr_make_new_fr_obj(MPFR *ptr);
30
30
  VALUE r_mpfr_make_new_fr_obj2(MPFR *ptr, int prec);
31
31
  VALUE r_mpfr_new_fr_obj(VALUE obj);
32
32
  void r_mpfr_set_robj(MPFR *ptr, VALUE obj, mp_rnd_t rnd);
33
+ VALUE r_mpfr_robj_to_mpfr(VALUE obj, int argc, VALUE *argv);
33
34
 
34
35
  mp_rnd_t r_mpfr_rnd_from_value(VALUE rnd);
35
36
  mp_rnd_t r_mpfr_rnd_from_optional_argument(int min, int max, int argc, VALUE *argv);
36
37
  mp_rnd_t r_mpfr_prec_from_optional_argument(int min, int max, int argc, VALUE *argv);
37
38
  void r_mpfr_get_rnd_prec_from_optional_arguments(mp_rnd_t *rnd, mp_prec_t *prec, int min, int max, int argc, VALUE *argv);
38
39
 
40
+ char *r_mpfr_dump_to_string(MPFR *ptr_s);
41
+ void r_mpfr_load_string(MPFR *ptr_s, const char *dump);
42
+
39
43
  #endif /* _RUBY_MPFR_H_ */
40
44
 
@@ -196,43 +196,19 @@ static VALUE r_mpfr_matrix_marshal_dump(VALUE self)
196
196
  {
197
197
  MPFRMatrix *ptr;
198
198
  r_mpfr_get_matrix_struct(ptr, self);
199
- mpz_t m;
200
- mp_exp_t e;
201
- mpz_init(m);
202
199
  int i;
203
- MPFR *ptr_el;
204
- char *tmp_str, type;
200
+ char *tmp_str;
205
201
  VALUE ret_ary;
206
202
  ret_ary = rb_ary_new();
207
203
  rb_ary_push(ret_ary, INT2FIX(ptr->row));
208
204
  rb_ary_push(ret_ary, INT2FIX(ptr->column));
209
205
 
210
206
  for (i = 0; i < ptr->size; i++) {
211
- ptr_el = ptr->data + i;
212
- if (mpfr_regular_p(ptr_el)) {
213
- e = mpfr_get_z_2exp(m, ptr_el);
214
- mpfr_asprintf(&tmp_str, "%c%ld\t%ld\t%Zd", MPFR_DUMP_NUMBER, mpfr_get_prec(ptr_el), (long int)e, m);
215
- } else {
216
- if (mpfr_zero_p(ptr_el)) {
217
- if (mpfr_sgn(ptr_el) >= 0) {
218
- type = MPFR_DUMP_PZERO;
219
- } else {
220
- type = MPFR_DUMP_MZERO;
221
- }
222
- } else if (mpfr_nan_p(ptr_el)) {
223
- type = MPFR_DUMP_NAN;
224
- } else if (mpfr_sgn(ptr_el) >= 0) {
225
- type = MPFR_DUMP_PINF;
226
- } else {
227
- type = MPFR_DUMP_MINF;
228
- }
229
- mpfr_asprintf(&tmp_str, "%c%ld", type, mpfr_get_prec(ptr_el));
230
- }
207
+ tmp_str = r_mpfr_dump_to_string(ptr->data + i);
231
208
  rb_ary_push(ret_ary, rb_str_new2(tmp_str));
232
209
  mpfr_free_str(tmp_str);
233
210
  }
234
211
 
235
- mpz_clear(m);
236
212
  return ret_ary;
237
213
  }
238
214
 
@@ -245,51 +221,15 @@ static VALUE r_mpfr_matrix_marshal_load(VALUE self, VALUE dump_ary)
245
221
  ptr->column = NUM2INT(rb_ary_entry(dump_ary, 1));
246
222
  ptr->size = ptr->row * ptr->column;
247
223
  ptr->data = ALLOC_N(MPFR, ptr->size);
248
- int i, j;
249
- long int prec, e;
250
- MPFR *ptr_el;
251
- char *dump, type;
224
+ int i;
225
+ char *dump;
252
226
  VALUE dump_element;
253
- mpz_t m;
254
227
 
255
228
  for(i = 0; i < ptr->size; i++){
256
229
  dump_element = rb_ary_entry(dump_ary, i + 2);
257
- ptr_el = ptr->data + i;
258
230
  Check_Type(dump_element, T_STRING);
259
231
  dump = RSTRING_PTR(dump_element);
260
- type = dump[0];
261
- dump++;
262
- if (type == MPFR_DUMP_NUMBER) {
263
- mpz_init(m);
264
- sscanf(dump, "%ld\t%ld\t", &prec, &e);
265
- j = 0;
266
- while (j < 2) {
267
- if (dump[0] == '\t') {
268
- j++;
269
- }
270
- dump++;
271
- }
272
- mpz_set_str(m, dump, 10);
273
- mpfr_init2(ptr_el, prec);
274
- mpfr_set_z_2exp(ptr_el, m, e, MPFR_RNDN);
275
- mpz_clear(m);
276
- } else {
277
- sscanf(dump, "%ld", &prec);
278
- mpfr_init2(ptr_el, prec);
279
- if (type == MPFR_DUMP_PZERO) {
280
- mpfr_set_zero(ptr_el, +1);
281
- } else if (type == MPFR_DUMP_MZERO){
282
- mpfr_set_zero(ptr_el, -1);
283
- } else if (type == MPFR_DUMP_NAN) {
284
- mpfr_set_nan(ptr_el);
285
- } else if (type == MPFR_DUMP_PINF) {
286
- mpfr_set_inf(ptr_el, +1);
287
- } else if (type == MPFR_DUMP_MINF) {
288
- mpfr_set_inf(ptr_el, -1);
289
- } else {
290
- rb_raise(rb_eArgError, "Invalid dumped data for marshal_load.");
291
- }
292
- }
232
+ r_mpfr_load_string(ptr->data + i, dump);
293
233
  }
294
234
  return self;
295
235
  }
@@ -521,7 +461,9 @@ static VALUE r_mpfr_matrix_str_ary(VALUE self, VALUE format_str)
521
461
  VALUE ret_val[ptr_self->size];
522
462
  int i;
523
463
  for (i = 0; i < ptr_self->size; i++) {
524
- mpfr_asprintf(&tmp_str, format, ptr_self->data + i);
464
+ if (!mpfr_asprintf(&tmp_str, format, ptr_self->data + i)) {
465
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
466
+ }
525
467
  ret_val[i] = rb_str_new2(tmp_str);
526
468
  mpfr_free_str(tmp_str);
527
469
  }
@@ -541,7 +483,9 @@ static VALUE r_mpfr_matrix_str_ary2(VALUE self, VALUE format_str)
541
483
  }
542
484
  for (i = 0; i < ptr_self->size; i += ptr_self->row) {
543
485
  for (j = 0; j < ptr_self->row; j++) {
544
- mpfr_asprintf(&tmp_str, format, ptr_self->data + i + j);
486
+ if (!mpfr_asprintf(&tmp_str, format, ptr_self->data + i + j)) {
487
+ rb_raise(rb_eFatal, "Can not allocate a string by mpfr_asprintf.");
488
+ }
545
489
  rb_ary_push(ary[j], rb_str_new2(tmp_str));
546
490
  mpfr_free_str(tmp_str);
547
491
  }
data/lib/mpfr/version.rb CHANGED
@@ -1 +1 @@
1
- RUBY_MPFR_VERSION = '0.0.10'
1
+ RUBY_MPFR_VERSION = '0.0.11'
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__)) + '/spec_helper.rb'
2
2
 
3
- describe MPFR, 'when allocating objects from integer' do
3
+ describe MPFR, 'when allocating objects from numbers' do
4
4
  it "should equal bignum" do
5
5
  MPFR.set_default_prec(100)
6
6
  num = 1
@@ -23,6 +23,17 @@ describe MPFR, 'when allocating objects from integer' do
23
23
 
24
24
  end
25
25
 
26
+ it "should equal float" do
27
+ MPFR.set_default_prec(256)
28
+ error = MPFR.new('1.0e-10')
29
+ GenerateNumber.float(100) do |f|
30
+ MPFR.new(f).should == f
31
+ end
32
+ end
33
+
34
+ end
35
+
36
+ describe MPFR, 'when allocating from objects that is not numbers' do
26
37
  it "should allocate from string" do
27
38
  MPFR.set_default_prec(53)
28
39
  for i in 0..1000
@@ -30,14 +41,15 @@ describe MPFR, 'when allocating objects from integer' do
30
41
  end
31
42
  end
32
43
 
33
- it "should equal float" do
34
- MPFR.set_default_prec(256)
35
- error = MPFR.new('1.0e-10')
36
- GenerateNumber.float(100) do |f|
37
- MPFR.new(f).should == f
38
- end
44
+ it "should raise error" do
45
+ lambda { MPFR.new(nil) }.should raise_error
46
+ lambda { MPFR.new(false) }.should raise_error
47
+ lambda { MPFR.new([]) }.should raise_error
48
+ lambda { MPFR.new(:sym) }.should raise_error
39
49
  end
50
+ end
40
51
 
52
+ describe MPFR, 'when creating new objects' do
41
53
  it "should duplicate" do
42
54
  MPFR.set_default_prec(141)
43
55
  for i in 0..1000
@@ -68,6 +80,4 @@ describe MPFR, 'when allocating objects from integer' do
68
80
  b.should == c
69
81
  end
70
82
  end
71
-
72
83
  end
73
-
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-mpfr
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 10
9
- version: 0.0.10
4
+ prerelease:
5
+ version: 0.0.11
10
6
  platform: ruby
11
7
  authors:
12
8
  - Takayuki YAMAGUCHI
@@ -14,39 +10,20 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-11-21 00:00:00 +09:00
13
+ date: 2011-02-26 00:00:00 +09:00
18
14
  default_executable:
19
15
  dependencies:
20
16
  - !ruby/object:Gem::Dependency
21
- name: rubyforge
17
+ name: hoe
22
18
  prerelease: false
23
19
  requirement: &id001 !ruby/object:Gem::Requirement
24
20
  none: false
25
21
  requirements:
26
22
  - - ">="
27
23
  - !ruby/object:Gem::Version
28
- segments:
29
- - 2
30
- - 0
31
- - 4
32
- version: 2.0.4
24
+ version: 2.9.1
33
25
  type: :development
34
26
  version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: hoe
37
- prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- segments:
44
- - 2
45
- - 7
46
- - 0
47
- version: 2.7.0
48
- type: :development
49
- version_requirements: *id002
50
27
  description: |-
51
28
  ruby-mpfr is a library to use MPFR[http://www.mpfr.org/] which is a C library for
52
29
  multiple-precision floating-point computations.
@@ -127,6 +104,7 @@ files:
127
104
  - spec/mpfr_matrix/mpfr_square_matrix_spec.rb
128
105
  - spec/mpfr_matrix/spec_helper.rb
129
106
  - tasks/extconf.rake
107
+ - .gemtest
130
108
  has_rdoc: true
131
109
  homepage: http://rubyforge.org/projects/ruby-mpfr/
132
110
  licenses: []
@@ -142,21 +120,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
120
  requirements:
143
121
  - - ">="
144
122
  - !ruby/object:Gem::Version
145
- segments:
146
- - 0
147
123
  version: "0"
148
124
  required_rubygems_version: !ruby/object:Gem::Requirement
149
125
  none: false
150
126
  requirements:
151
127
  - - ">="
152
128
  - !ruby/object:Gem::Version
153
- segments:
154
- - 0
155
129
  version: "0"
156
130
  requirements: []
157
131
 
158
132
  rubyforge_project: ruby-mpfr
159
- rubygems_version: 1.3.7
133
+ rubygems_version: 1.5.2
160
134
  signing_key:
161
135
  specification_version: 3
162
136
  summary: ruby-mpfr is a library to use MPFR[http://www.mpfr.org/] which is a C library for multiple-precision floating-point computations