ruby-mpfr 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
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