fibonacci_rng 0.0.1 → 0.0.2

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MGYzYmYyMDAxMTMwNTczYmI0MmMwZjc5OTk1YTJmZTg1YTJhZTlhYQ==
4
+ MTc4YTlhNTQ0NDhjZWIxNDAyNzQzYjU1NDY0MzMzNWM0YzdkYmMyNg==
5
5
  data.tar.gz: !binary |-
6
- YTU5ZTUxYjMxNmFiN2RhOTZmYTdjYWY1OWQ5YWQyOWVkMTk4NTBjOQ==
6
+ YWM4ODA4ZjQzZmNlYmYxYWQ0M2VmNDM5NzZlMDJkNzI3YmFmODA0MA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OTE5OTkzZGE3M2I3MzI3NjU0NjExMjlmNDNkYTBmZWZlNDJiMmNmNzM1NWZk
10
- NzNiNWE3NTI3OTY3ZGJlZDAyYTFhNDUzMWJjMjRjMjFjZmFmNGM4MGMzOWI2
11
- ZjVhMTk5OGVmMWYzYTUyZjYzNjEwNzMwMzI3ZWQ0YmM1ZDUxMmI=
9
+ MTQ1ZjNmODYxNTc5ZDE0ZDc2YzNkZWY4ZGZmOTM2MzFjYTViNGE1NWI3ZWJl
10
+ NTM0NjViZTIzOWNhN2Q3MDI3NmNhODI0OTEwMDA2OTYyNjAyMTJhMTIxYTlm
11
+ MTY5ZTAyYzUwZjRjZWI3N2MxY2IyMDUwZmI3MDhjNWE4NTU5YWE=
12
12
  data.tar.gz: !binary |-
13
- ZTFhMWVlYjczNDkxNGE5YzhhNzQ2ZDliYmY0Y2VmOTAyZjc0OGVmNGFkN2Rh
14
- YzlhMTU0YWZiNGZmNzJlZWI2MWY2MmViNzM2OWM2ZTAzYTVkYzNiY2I1MDRm
15
- NjU5ZGVkMTdiNGNhOTY0ZWFiYzVmOGU2NzAyNmM0YWEyMzFlN2I=
13
+ ZmIyNjMzODVkMDNjNTZiNzk1ZTA4MTRhZDhlZTE1ZTcxMTZjYzZkMGVjZjQy
14
+ NDUwZjUxN2I3NGQ1Mjg4ZmVjMjQ2N2IzN2U0MTdmYzAzMWY1YzdjYmUxZjQ1
15
+ ODNlNTMyNDFkNjc2OTgyNjIxM2NmYzMwZTIyMDk4YmU4YzFmM2U=
data/Rakefile CHANGED
@@ -1 +1,17 @@
1
+ #!/usr/bin/env rake
2
+ # coding: utf-8
3
+
1
4
  require "bundler/gem_tasks"
5
+ require 'rake/testtask'
6
+
7
+ #Run the fOOrth unit test suite.
8
+ Rake::TestTask.new do |t|
9
+ #List out all the test files.
10
+ t.test_files = FileList['tests/**/*.rb']
11
+ t.verbose = false
12
+ end
13
+
14
+ desc "Run a scan for smelly code!"
15
+ task :reek do |t|
16
+ `reek --no-color lib > reek.txt`
17
+ end
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = FibonacciRng::VERSION
9
9
  spec.authors = ["Peter Camilleri"]
10
10
  spec.email = ["peter.c.camilleri@gmail.com"]
11
- spec.description = "A Fibonacci inspired pseudo random number generator. Just try and prove that is sucks! ;-)"
11
+ spec.description = "A Fibonacci inspired pseudo random number generator. Just try and prove that it sucks! ;-)"
12
12
  spec.summary = "A Fibonacci inspired pseudo random number generator."
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
@@ -20,4 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
+ spec.add_development_dependency 'reek', "~> 1.3.8"
24
+ spec.add_development_dependency 'minitest', "~> 4.7.5"
25
+
23
26
  end
data/lib/fibonacci_rng.rb CHANGED
@@ -1,6 +1,18 @@
1
+ # coding: utf-8
2
+
1
3
  require "fibonacci_rng/version"
2
4
 
5
+ #The class of Fibonacci inspired random number generators.
3
6
  class FibonacciRng
7
+
8
+ #A class instance variable to hold the tickle value.
9
+ @tickle = '0'
10
+
11
+ #Create the default seed string.
12
+ def self.seed
13
+ Time.now.to_s + @tickle.succ!
14
+ end
15
+
4
16
  CHOP = 0x3FFFFFFF
5
17
  BYTE = 0xFF
6
18
  WORD = 0xFFFF
@@ -10,22 +22,18 @@ class FibonacciRng
10
22
  attr_reader :depth
11
23
 
12
24
  #Initialize the PRN generator
13
- def initialize(depth=8, seed=Time.now.to_s)
25
+ def initialize(depth=8, seed=FibonacciRng.seed)
14
26
  fail "Invalid depth value (3..30)." unless (3..30) === depth
15
27
  @depth = depth
16
28
  reseed(seed)
17
29
  end
18
30
 
19
31
  #Set up a new seed value
20
- def reseed(seed=Time.now.to_s)
32
+ def reseed(seed=FibonacciRng.seed)
21
33
  @buffer = Array.new(@depth+2, 0)
22
34
  seedsrc = (seed.to_s + seed.class.to_s + 'Leonardo Pisano').each_byte.cycle
23
35
  indxsrc = (0...depth).cycle
24
-
25
- 1024.times do
26
- @buffer[indxsrc.next] += seedsrc.next
27
- do_spin
28
- end
36
+ do_reseed(indxsrc, seedsrc)
29
37
  end
30
38
 
31
39
  #Roll a dice.
@@ -41,13 +49,13 @@ class FibonacciRng
41
49
  end
42
50
 
43
51
  #Get a pseudo random word
44
- def byte
52
+ def word
45
53
  do_spin
46
54
  @buffer[0] & WORD
47
55
  end
48
56
 
49
57
  #Get a pseudo random float
50
- def byte
58
+ def float
51
59
  do_spin
52
60
  @buffer[0].to_f / BASE
53
61
  end
@@ -60,13 +68,21 @@ class FibonacciRng
60
68
  end
61
69
 
62
70
  private
71
+ #Do the work of reseeding the PRNG
72
+ def do_reseed(indxsrc, seedsrc)
73
+ 1024.times do
74
+ @buffer[indxsrc.next] += seedsrc.next
75
+ do_spin
76
+ end
77
+ end
78
+
63
79
  #Cycle through the PRNG once.
64
80
  def do_spin
65
- buffer[-2] = buffer[0]
66
- buffer[-1] = buffer[1]
81
+ @buffer[-2] = @buffer[0]
82
+ @buffer[-1] = @buffer[1]
67
83
 
68
- 0...depth do |i|
69
- buffer[i] = (buffer[i+1] + (buffer[i+2] >> 1)) & CHOP
84
+ 0...depth do |idx|
85
+ @buffer[idx] = (@buffer[idx+1] + (@buffer[idx+2] >> 1)) & CHOP
70
86
  end
71
87
  end
72
88
 
@@ -1,3 +1,6 @@
1
+ # coding: utf-8
2
+
3
+ #The class of Fibonacci inspired random number generators.
1
4
  class FibonacciRng
2
- VERSION = "0.0.1"
5
+ VERSION = "0.0.2"
3
6
  end
data/reek.txt ADDED
@@ -0,0 +1,2 @@
1
+
2
+ 0 total warnings
@@ -0,0 +1,81 @@
1
+ # coding: utf-8
2
+
3
+ require_relative '../lib/fibonacci_rng'
4
+ require 'minitest/autorun'
5
+
6
+ #Test the monkey patches applied to the Object class.
7
+ class CoreTester < MiniTest::Unit::TestCase
8
+
9
+ #Special initialize to track rake progress.
10
+ def initialize(*all)
11
+ $do_this_only_one_time = "" unless defined? $do_this_only_one_time
12
+
13
+ if $do_this_only_one_time != __FILE__
14
+ puts
15
+ puts "Running test file: #{File.split(__FILE__)[1]}"
16
+ $do_this_only_one_time = __FILE__
17
+ end
18
+
19
+ super(*all)
20
+ end
21
+
22
+ def test_that_it_creates_dice_rolls
23
+ prng = FibonacciRng.new
24
+
25
+ 100.times do
26
+ assert((0...6) === prng.dice(6))
27
+ end
28
+
29
+ end
30
+
31
+ def test_that_it_creates_bytes
32
+ prng = FibonacciRng.new
33
+
34
+ 100.times do
35
+ assert((0...256) === prng.byte)
36
+ end
37
+
38
+ end
39
+
40
+ def test_that_it_creates_words
41
+ prng = FibonacciRng.new
42
+
43
+ 100.times do
44
+ assert((0...65536) === prng.word)
45
+ end
46
+
47
+ end
48
+
49
+ def test_that_it_makes_unique_sequnces
50
+ prnga = FibonacciRng.new
51
+ prngb = FibonacciRng.new
52
+
53
+ buffa = []
54
+ buffb = []
55
+
56
+ 100.times do
57
+ buffa << prnga.dice(6)
58
+ buffb << prngb.dice(6)
59
+ end
60
+
61
+ assert(buffa != buffb)
62
+
63
+ end
64
+
65
+ def test_that_it_makes_repeatable_sequnces
66
+ prnga = FibonacciRng.new(8, 0)
67
+ prngb = FibonacciRng.new(8, 0)
68
+
69
+ buffa = []
70
+ buffb = []
71
+
72
+ 100.times do
73
+ buffa << prnga.dice(6)
74
+ buffb << prngb.dice(6)
75
+ end
76
+
77
+ assert(buffa == buffb)
78
+
79
+ end
80
+
81
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fibonacci_rng
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Camilleri
@@ -38,8 +38,36 @@ dependencies:
38
38
  - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: reek
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 1.3.8
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.3.8
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 4.7.5
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 4.7.5
41
69
  description: A Fibonacci inspired pseudo random number generator. Just try and prove
42
- that is sucks! ;-)
70
+ that it sucks! ;-)
43
71
  email:
44
72
  - peter.c.camilleri@gmail.com
45
73
  executables: []
@@ -54,6 +82,8 @@ files:
54
82
  - fibonacci_rng.gemspec
55
83
  - lib/fibonacci_rng.rb
56
84
  - lib/fibonacci_rng/version.rb
85
+ - reek.txt
86
+ - tests/fibinacci_rng_tests.rb
57
87
  homepage: ''
58
88
  licenses:
59
89
  - MIT