fibonacci_rng 1.0.1 → 1.1.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.
- checksums.yaml +4 -4
- data/README.md +33 -10
- data/irbt.rb +20 -0
- data/lib/fibonacci_rng.rb +15 -3
- data/lib/fibonacci_rng/seeder.rb +1 -1
- data/lib/fibonacci_rng/version.rb +1 -1
- data/rakefile.rb +5 -0
- data/tests/fibinacci_rng_tests.rb +4 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5fdabb723bc231c0172f6fa824c8fa6cd6948a78
|
4
|
+
data.tar.gz: 2de8db50e6075474582a78e6475e01b5b591ef14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89eecfb7a41a6e24ce0b1cd9d583f720ff4ff74a12438fa5b4b557bf23de911fe96cf054e63435a72328a57342122b7751afe4bb97181117f258bc0a9ded250f
|
7
|
+
data.tar.gz: 3c2164cb23b043b1be8ed21dbdcc4c129bd3f5da818564c3d658c9944bf9a7dfd4a51918427fc6df8a7f592c2384aa5ee68b81b62d08d4d64aa45554a27a6eb7
|
data/README.md
CHANGED
@@ -29,6 +29,12 @@ Or install it yourself as:
|
|
29
29
|
|
30
30
|
$ gem install fibonacci_rng
|
31
31
|
|
32
|
+
The fibonacci_rng gem itself is found at: ( https://rubygems.org/gems/fibonacci_rng )
|
33
|
+
|
34
|
+
A C++ version of this generator also exists and may be found at
|
35
|
+
( https://github.com/PeterCamilleri/Fibonacci_CPP )
|
36
|
+
|
37
|
+
|
32
38
|
## Usage
|
33
39
|
|
34
40
|
```ruby
|
@@ -38,23 +44,26 @@ require 'fibonacci_rng'
|
|
38
44
|
Then in an appropriate place in the code:
|
39
45
|
|
40
46
|
```ruby
|
41
|
-
@my_rng = FibonacciRng.new(depth,
|
47
|
+
@my_rng = FibonacciRng.new(depth, seed)
|
42
48
|
```
|
43
49
|
|
44
|
-
Where
|
45
|
-
is
|
46
|
-
|
47
|
-
|
50
|
+
Where:
|
51
|
+
* depth is an optional integer value between 2 and 256. Defaults to 8.
|
52
|
+
* seed is an optional number or string or other object that has a repeatable
|
53
|
+
value and responds to the to_s method. Defaults to a value derived from system
|
54
|
+
entropy.
|
55
|
+
|
56
|
+
Here is an overview of the available options.
|
48
57
|
|
49
58
|
```ruby
|
50
59
|
#Method #1
|
51
60
|
@my_rng = FibonacciRng.new # Random seed, depth = 8
|
52
61
|
|
53
62
|
#Method #2
|
54
|
-
@my_rng = FibonacciRng.new(seed)
|
63
|
+
@my_rng = FibonacciRng.new('seed') # Specified seed = 'seed', depth = 8
|
55
64
|
|
56
65
|
#Method #3
|
57
|
-
@my_rng = FibonacciRng.new(seed, 12)
|
66
|
+
@my_rng = FibonacciRng.new('seed', 12) # Specified seed = 'seed', depth = 12
|
58
67
|
|
59
68
|
#Method #4
|
60
69
|
@my_rng = FibonacciRng.new(FibonacciRng.new_seed, 12) # Random seed, depth = 12
|
@@ -63,17 +72,31 @@ seed. Here is an overview of the available options.
|
|
63
72
|
In addition, keyword arguments are emulated (as of Version 0.4.0) so these
|
64
73
|
additional options also are available:
|
65
74
|
|
75
|
+
* depth: value -- an integer value between 2 and 256. Defaults to 8.
|
76
|
+
* seed: value -- a number or string or other object that has a repeatable value and
|
77
|
+
responds to the to_s method. Defaults to a value derived from system entropy.
|
78
|
+
* init: value -- the number of initial training cycles used to seed the
|
79
|
+
generator. The allowed range is 1 to 1,000,000. By default the init value is
|
80
|
+
32*depth+768. This setting is only available with keyword arguments.
|
81
|
+
|
82
|
+
The following are examples of constructors with keyword arguments.
|
83
|
+
|
66
84
|
```ruby
|
67
85
|
#Method #5
|
68
|
-
@my_rng = FibonacciRng.new(seed: seed)
|
86
|
+
@my_rng = FibonacciRng.new(seed: 'seed') # Specified seed = 'seed', depth = 8
|
69
87
|
|
70
88
|
#Method #6
|
71
|
-
@my_rng = FibonacciRng.new(seed: seed, depth: 12)
|
89
|
+
@my_rng = FibonacciRng.new(seed: 'seed', depth: 12) # Specified seed = 'seed', depth = 12
|
72
90
|
|
73
91
|
#Method #7
|
74
92
|
@my_rng = FibonacciRng.new(depth: 12) # Random seed, depth = 12
|
93
|
+
|
94
|
+
#Method #8
|
95
|
+
@my_rng = FibonacciRng.new(seed: 'seed', init: 2048) # Specified seed = 'seed' with 2048 passes.
|
96
|
+
|
75
97
|
```
|
76
|
-
Note: Mixing positional and keyword arguments will not, in general, work.
|
98
|
+
Note: Mixing positional and keyword arguments will not, in general, work. So
|
99
|
+
don't do it!
|
77
100
|
|
78
101
|
#### Generating Pseudo Random Data
|
79
102
|
|
data/irbt.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# An IRB + fibonacci_rng Test bed
|
3
|
+
|
4
|
+
require 'irb'
|
5
|
+
$force_alias_read_line_module = true
|
6
|
+
require 'mini_readline'
|
7
|
+
|
8
|
+
puts "Starting an IRB console with fibonacci_rng loaded."
|
9
|
+
|
10
|
+
if ARGV[0] == 'local'
|
11
|
+
require_relative 'lib/fibonacci_rng'
|
12
|
+
puts "fibonacci_rng loaded locally: #{FibonacciRng::VERSION}"
|
13
|
+
|
14
|
+
ARGV.shift
|
15
|
+
else
|
16
|
+
require 'fibonacci_rng'
|
17
|
+
puts "fibonacci_rng loaded from gem: #{FibonacciRng::VERSION}"
|
18
|
+
end
|
19
|
+
|
20
|
+
IRB.start
|
data/lib/fibonacci_rng.rb
CHANGED
@@ -14,7 +14,8 @@ class FibonacciRng
|
|
14
14
|
BYTE = 0xFF
|
15
15
|
WORD = 0xFFFF
|
16
16
|
BASE = (CHOP+1).to_f
|
17
|
-
DEPTHS = 2..
|
17
|
+
DEPTHS = 2..256
|
18
|
+
INITS = 1..1_000_000
|
18
19
|
|
19
20
|
#The depth of the Fibonacci array.
|
20
21
|
attr_reader :depth
|
@@ -22,12 +23,16 @@ class FibonacciRng
|
|
22
23
|
#The seed value used by this generator.
|
23
24
|
attr_reader :seed
|
24
25
|
|
26
|
+
#The init value used by this generator.
|
27
|
+
attr_reader :init
|
28
|
+
|
25
29
|
#Initialize the PRN generator
|
26
30
|
def initialize(arg_a=nil, arg_b=nil)
|
27
31
|
#Extract the parameters.
|
28
32
|
if arg_a.is_a?(Hash)
|
29
33
|
seed = arg_a[:seed]
|
30
34
|
@depth = arg_a[:depth]
|
35
|
+
@init = arg_a[:init]
|
31
36
|
else
|
32
37
|
seed = arg_a
|
33
38
|
@depth = arg_b
|
@@ -38,8 +43,15 @@ class FibonacciRng
|
|
38
43
|
@depth ||= 8
|
39
44
|
|
40
45
|
#Validate the depth.
|
41
|
-
unless DEPTHS === depth
|
42
|
-
fail "Invalid depth value #{depth}. Allowed values are #{DEPTHS}"
|
46
|
+
unless DEPTHS === @depth
|
47
|
+
fail "Invalid depth value #{@depth}. Allowed values are #{DEPTHS}"
|
48
|
+
end
|
49
|
+
|
50
|
+
@init ||= 32 * @depth + 768
|
51
|
+
|
52
|
+
#Validate the depth.
|
53
|
+
unless INITS === @init
|
54
|
+
fail "Invalid init value #{@init}. Allowed values are #{INITS}"
|
43
55
|
end
|
44
56
|
|
45
57
|
#Build the generator.
|
data/lib/fibonacci_rng/seeder.rb
CHANGED
data/rakefile.rb
CHANGED
@@ -16,6 +16,11 @@ task :reek do |t|
|
|
16
16
|
`reek --no-color lib > reek.txt`
|
17
17
|
end
|
18
18
|
|
19
|
+
desc "Run an IRB Session with fibonacci_rng loaded."
|
20
|
+
task :console do
|
21
|
+
system "ruby irbt.rb local"
|
22
|
+
end
|
23
|
+
|
19
24
|
desc "What version of the Fibonacci is this?"
|
20
25
|
task :vers do |t|
|
21
26
|
puts
|
@@ -41,6 +41,10 @@ class FibonacciRngTester < Minitest::Test
|
|
41
41
|
gen = FibonacciRng.new(depth: 12, seed: 'seed')
|
42
42
|
assert_equal(12, gen.depth)
|
43
43
|
assert_equal('seed', gen.seed)
|
44
|
+
|
45
|
+
gen = FibonacciRng.new(seed: 'seed', init: 2048)
|
46
|
+
assert_equal('seed', gen.seed)
|
47
|
+
assert_equal(2048, gen.init)
|
44
48
|
end
|
45
49
|
|
46
50
|
def test_that_rejects_bad_parms
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fibonacci_rng
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Camilleri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest_visible
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- README.md
|
109
109
|
- fibonacci.reek
|
110
110
|
- fibonacci_rng.gemspec
|
111
|
+
- irbt.rb
|
111
112
|
- lib/fibonacci_rng.rb
|
112
113
|
- lib/fibonacci_rng/generator.rb
|
113
114
|
- lib/fibonacci_rng/hasher.rb
|