ruby-numtheory 0.0.8.1 → 0.0.9.1

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
  SHA1:
3
- metadata.gz: 62440c109267fe60df37f71029cc783cd89d19c6
4
- data.tar.gz: d2c8f0e70eaa6829be286dc0fada901b15587304
3
+ metadata.gz: 5664624f001011ac200885754788be11cf9d987e
4
+ data.tar.gz: 677ca9f6744e113bbf8fee3e651adb55dabd37ff
5
5
  SHA512:
6
- metadata.gz: b09f5e85f78eb7059ac2940c0b316bcf10019463c30583f6ea2af662e3649f3e6ae85a85ee1766ae68b4bb229ff047a560b0e1e8c19afde7c6f2ec96eda4276b
7
- data.tar.gz: 416e6551a17fae866e69b44477baf2627f0220c56cdfd32e01b32469b58de1d7d5ce266bda8eaf0c2e22d407bd9a0a4e012de6922f1426de5edf2e612b72a048
6
+ metadata.gz: 039d5fb674c11e4b2f43f55801b1c0922ab542a4a4a3b8454488a7f536ec4f64264f0190a3cfb329ff19e171b17b5db84a460ae1134f714bb6c220f621c0bf83
7
+ data.tar.gz: 52d719becb03e7531fe445206e47681a0dead1e26a8f084a9f317a9526658cdbb09c8a9fbfbe742190915d3e36aa461feee7be722f5391cf1e3aca238b787701
data/.travis.yml CHANGED
@@ -1,4 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
3
+ # - 1.9.3 - prime? test fails for unknown reason;
4
4
  - 2.0.0
5
+ - 2.1.0
6
+ - 2.2.0
@@ -0,0 +1,96 @@
1
+ #ifndef NUMTHEORY_BIGNUM_H
2
+ #define NUMTHEORY_BIGNUM_H
3
+
4
+ #ifndef BDIGIT
5
+ # if SIZEOF_INT*2 <= SIZEOF_LONG_LONG
6
+ # define BDIGIT unsigned int
7
+ # define SIZEOF_BDIGIT SIZEOF_INT
8
+ # define BDIGIT_DBL unsigned LONG_LONG
9
+ # define BDIGIT_DBL_SIGNED LONG_LONG
10
+ # define PRI_BDIGIT_PREFIX ""
11
+ # define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX
12
+ # elif SIZEOF_INT*2 <= SIZEOF_LONG
13
+ # define BDIGIT unsigned int
14
+ # define SIZEOF_BDIGIT SIZEOF_INT
15
+ # define BDIGIT_DBL unsigned long
16
+ # define BDIGIT_DBL_SIGNED long
17
+ # define PRI_BDIGIT_PREFIX ""
18
+ # define PRI_BDIGIT_DBL_PREFIX "l"
19
+ # elif SIZEOF_SHORT*2 <= SIZEOF_LONG
20
+ # define BDIGIT unsigned short
21
+ # define SIZEOF_BDIGIT SIZEOF_SHORT
22
+ # define BDIGIT_DBL unsigned long
23
+ # define BDIGIT_DBL_SIGNED long
24
+ # define PRI_BDIGIT_PREFIX "h"
25
+ # define PRI_BDIGIT_DBL_PREFIX "l"
26
+ # else
27
+ # define BDIGIT unsigned short
28
+ # define SIZEOF_BDIGIT (SIZEOF_LONG/2)
29
+ # define SIZEOF_ACTUAL_BDIGIT SIZEOF_LONG
30
+ # define BDIGIT_DBL unsigned long
31
+ # define BDIGIT_DBL_SIGNED long
32
+ # define PRI_BDIGIT_PREFIX "h"
33
+ # define PRI_BDIGIT_DBL_PREFIX "l"
34
+ # endif
35
+ #endif
36
+ #ifndef SIZEOF_ACTUAL_BDIGIT
37
+ # define SIZEOF_ACTUAL_BDIGIT SIZEOF_BDIGIT
38
+ #endif
39
+ #ifdef PRI_BDIGIT_PREFIX
40
+ # define PRIdBDIGIT PRI_BDIGIT_PREFIX"d"
41
+ # define PRIiBDIGIT PRI_BDIGIT_PREFIX"i"
42
+ # define PRIoBDIGIT PRI_BDIGIT_PREFIX"o"
43
+ # define PRIuBDIGIT PRI_BDIGIT_PREFIX"u"
44
+ # define PRIxBDIGIT PRI_BDIGIT_PREFIX"x"
45
+ # define PRIXBDIGIT PRI_BDIGIT_PREFIX"X"
46
+ #endif
47
+ #ifdef PRI_BDIGIT_DBL_PREFIX
48
+ # define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d"
49
+ # define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i"
50
+ # define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o"
51
+ # define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u"
52
+ # define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x"
53
+ # define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X"
54
+ #endif
55
+ #define BIGNUM_EMBED_LEN_NUMBITS 3
56
+ #ifndef BIGNUM_EMBED_LEN_MAX
57
+ # if (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT) < (1 << BIGNUM_EMBED_LEN_NUMBITS)-1
58
+ # define BIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT)
59
+ # else
60
+ # define BIGNUM_EMBED_LEN_MAX ((1 << BIGNUM_EMBED_LEN_NUMBITS)-1)
61
+ # endif
62
+ #endif
63
+
64
+ #define SIZEOF_BDIGITS SIZEOF_BDIGIT
65
+
66
+ struct RBignum {
67
+ struct RBasic basic;
68
+ union {
69
+ struct {
70
+ size_t len;
71
+ BDIGIT *digits;
72
+ } heap;
73
+ BDIGIT ary[BIGNUM_EMBED_LEN_MAX];
74
+ } as;
75
+ };
76
+
77
+ #define RBIGNUM(obj) (R_CAST(RBignum)(obj))
78
+ #define BIGNUM_SIGN_BIT FL_USER1
79
+ #define RBIGNUM_SET_SIGN(b,sign) \
80
+ ((sign) ? (RBASIC(b)->flags |= BIGNUM_SIGN_BIT) \
81
+ : (RBASIC(b)->flags &= ~BIGNUM_SIGN_BIT))
82
+ #define RBIGNUM_EMBED_FLAG FL_USER2
83
+ #define RBIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3)
84
+ #define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+BIGNUM_EMBED_LEN_NUMBITS)
85
+ #define RBIGNUM_LEN(b) \
86
+ ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
87
+ (long)((RBASIC(b)->flags >> RBIGNUM_EMBED_LEN_SHIFT) & \
88
+ (RBIGNUM_EMBED_LEN_MASK >> RBIGNUM_EMBED_LEN_SHIFT)) : \
89
+ RBIGNUM(b)->as.heap.len)
90
+ /* LSB:BIGNUM_DIGITS(b)[0], MSB:BIGNUM_DIGITS(b)[BIGNUM_LEN(b)-1] */
91
+ #define RBIGNUM_DIGITS(b) \
92
+ ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
93
+ RBIGNUM(b)->as.ary : \
94
+ RBIGNUM(b)->as.heap.digits)
95
+
96
+ #endif
@@ -69,6 +69,8 @@ Init_numtheory()
69
69
  numtheory_fibonacci, -1);
70
70
  rb_define_module_function(rb_mNumTheory, "precompute_primes_upto",
71
71
  numtheory_precompute_primes_upto, 1);
72
+ rb_define_module_function(rb_mNumTheory, "primes_precomputed",
73
+ numtheory_primes_precomputed, 0);
72
74
  rb_define_module_function(rb_mNumTheory, "prime",
73
75
  numtheory_prime, 1);
74
76
  rb_define_module_function(rb_mNumTheory, "primepi",
@@ -121,10 +123,12 @@ Init_numtheory()
121
123
  numtheory_perfect_square_p, 0);
122
124
 
123
125
  NUM_OF_PRIMES = init_sieve(PRIMES_UPPER_LIMIT);
124
- /* PRECOMPUTED_PRIMES: the number of precomputed primes. */
125
- rb_define_const(rb_mNumTheory, "PRECOMPUTED_PRIMES",
126
- INT2NUM(NUM_OF_PRIMES));
127
-
126
+ }
127
+
128
+ VALUE
129
+ numtheory_primes_precomputed(VALUE obj)
130
+ {
131
+ return INT2FIX(NUM_OF_PRIMES);
128
132
  }
129
133
 
130
134
  /*
@@ -152,8 +156,6 @@ numtheory_precompute_primes_upto(VALUE obj, VALUE n)
152
156
  free(numtheory_primes);
153
157
 
154
158
  NUM_OF_PRIMES = init_sieve(PRIMES_UPPER_LIMIT);
155
- rb_const_set(mNumTheory, rb_intern("PRECOMPUTED_PRIMES"),
156
- INT2NUM(NUM_OF_PRIMES));
157
159
  }
158
160
  else
159
161
  {
@@ -10,10 +10,16 @@
10
10
  #include <ruby/version.h>
11
11
  #endif
12
12
 
13
+ #if RUBY_VERSION_MAJOR == 1
13
14
  #if RUBY_VERSION_MINOR == 8
14
15
  #include <intern.h>
15
16
  #include <defines.h>
16
17
  #endif
18
+ #elif RUBY_API_VERSION_MAJOR == 2
19
+ #if RUBY_API_VERSION_MINOR >= 2
20
+ #include "bignum.h"
21
+ #endif
22
+ #endif
17
23
 
18
24
  #ifdef DEBUG
19
25
  #include <stdio.h>
@@ -32,6 +38,7 @@ VALUE numtheory_powermod(int argc, VALUE *argv);
32
38
  VALUE numtheory_miller_rabin_pseudoprime_p(VALUE n);
33
39
  VALUE numtheory_nextprime(VALUE n);
34
40
  VALUE numtheory_precompute_primes_upto(VALUE obj, VALUE n);
41
+ VALUE numtheory_primes_precomputed(VALUE obj);
35
42
  VALUE numtheory_prime(VALUE obj, VALUE i);
36
43
  VALUE numtheory_primepi(VALUE obj, VALUE n);
37
44
  VALUE numtheory_fibonacci(int argc, VALUE *argv);
@@ -3,7 +3,7 @@ Gem::Specification.new do |gem|
3
3
  gem.homepage = "http://github.com/lomereiter/ruby-numtheory"
4
4
  gem.license = "MIT"
5
5
  gem.summary = "Ruby number theory library"
6
- gem.version = "0.0.8.1"
6
+ gem.version = "0.0.9.1"
7
7
  gem.platform = Gem::Platform::RUBY
8
8
 
9
9
  gem.description = <<-EOF
@@ -1,5 +1,11 @@
1
1
  require 'numtheory'
2
2
 
3
+ RSpec.configure do |config|
4
+ config.expect_with :rspec do |c|
5
+ c.syntax = [:should]
6
+ end
7
+ end
8
+
3
9
  describe "primality tests" do
4
10
 
5
11
  describe "prime? method" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-numtheory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8.1
4
+ version: 0.0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Tarasov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-24 00:00:00.000000000 Z
11
+ date: 2015-09-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  The library is written as C extension and aims to provide
@@ -22,11 +22,12 @@ extra_rdoc_files:
22
22
  - ext/numtheory/numtheory.c
23
23
  - LICENSE.txt
24
24
  files:
25
- - .travis.yml
25
+ - ".travis.yml"
26
26
  - Gemfile
27
27
  - LICENSE.txt
28
28
  - README.md
29
29
  - Rakefile
30
+ - ext/numtheory/bignum.h
30
31
  - ext/numtheory/constants.h
31
32
  - ext/numtheory/extconf.rb
32
33
  - ext/numtheory/numtheory.c
@@ -53,17 +54,17 @@ require_paths:
53
54
  - ext
54
55
  required_ruby_version: !ruby/object:Gem::Requirement
55
56
  requirements:
56
- - - '>='
57
+ - - ">="
57
58
  - !ruby/object:Gem::Version
58
59
  version: '0'
59
60
  required_rubygems_version: !ruby/object:Gem::Requirement
60
61
  requirements:
61
- - - '>='
62
+ - - ">="
62
63
  - !ruby/object:Gem::Version
63
64
  version: '0'
64
65
  requirements: []
65
66
  rubyforge_project:
66
- rubygems_version: 2.0.3
67
+ rubygems_version: 2.4.5
67
68
  signing_key:
68
69
  specification_version: 4
69
70
  summary: Ruby number theory library