composite_rng 0.1.0 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CODE_OF_CONDUCT.md +49 -0
- data/README.md +58 -50
- data/composite_rng.gemspec +2 -3
- data/irbt.rb +0 -2
- data/lib/composite_rng/version.rb +1 -1
- data/tests/composite_rng_tests.rb +0 -4
- metadata +10 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8f212582253e788745139e57da549a2fe5e682a7117171a867d6e5b52e0a1f3a
|
4
|
+
data.tar.gz: 1994196919e99dd6da03bc3264307b4f15c6b9b530d3413dff16ba4d260dac9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f42e03369535712d75033f3f223726b8650917acf69cc5b4a02f314602af276d9a89a8b16acbd8f06d5dcfd7fed0ef8b9a5f131191afa0ce6d33780b1ec6f16a
|
7
|
+
data.tar.gz: 64d58b974b59f75059f0f448bdb9df0fac85128763aa6e717c14076d4477a0c693036b5b2f2ede4c475585f0226c5aeeb0125e4ad11b10979e5a6d1b17e29348
|
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Contributor Code of Conduct
|
2
|
+
|
3
|
+
As contributors and maintainers of this project, and in the interest of
|
4
|
+
fostering an open and welcoming community, we pledge to respect all people who
|
5
|
+
contribute through reporting issues, posting feature requests, updating
|
6
|
+
documentation, submitting pull requests or patches, and other activities.
|
7
|
+
|
8
|
+
We are committed to making participation in this project a harassment-free
|
9
|
+
experience for everyone, regardless of level of experience, gender, gender
|
10
|
+
identity and expression, sexual orientation, disability, personal appearance,
|
11
|
+
body size, race, ethnicity, age, religion, or nationality.
|
12
|
+
|
13
|
+
Examples of unacceptable behavior by participants include:
|
14
|
+
|
15
|
+
* The use of sexualized language or imagery
|
16
|
+
* Personal attacks
|
17
|
+
* Trolling or insulting/derogatory comments
|
18
|
+
* Public or private harassment
|
19
|
+
* Publishing other's private information, such as physical or electronic
|
20
|
+
addresses, without explicit permission
|
21
|
+
* Other unethical or unprofessional conduct
|
22
|
+
|
23
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
24
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
25
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
26
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
27
|
+
threatening, offensive, or harmful.
|
28
|
+
|
29
|
+
By adopting this Code of Conduct, project maintainers commit themselves to
|
30
|
+
fairly and consistently applying these principles to every aspect of managing
|
31
|
+
this project. Project maintainers who do not follow or enforce the Code of
|
32
|
+
Conduct may be permanently removed from the project team.
|
33
|
+
|
34
|
+
This code of conduct applies both within project spaces and in public spaces
|
35
|
+
when an individual is representing the project or its community.
|
36
|
+
|
37
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
38
|
+
reported by contacting a project maintainer at peter.c.camilleri@gmail.com. All
|
39
|
+
complaints will be reviewed and investigated and will result in a response that
|
40
|
+
is deemed necessary and appropriate to the circumstances. Maintainers are
|
41
|
+
obligated to maintain confidentiality with regard to the reporter of an
|
42
|
+
incident.
|
43
|
+
|
44
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
45
|
+
version 1.3.0, available at
|
46
|
+
[http://contributor-covenant.org/version/1/3/0/][version]
|
47
|
+
|
48
|
+
[homepage]: http://contributor-covenant.org
|
49
|
+
[version]: http://contributor-covenant.org/version/1/3/0/
|
data/README.md
CHANGED
@@ -1,53 +1,68 @@
|
|
1
1
|
# CompositeRng
|
2
2
|
|
3
3
|
The composite (psuedo) random number generator is a container for two other
|
4
|
-
(psuedo) random number generators. By working together, these
|
5
|
-
quality pseudo-random number streams than either could
|
4
|
+
(psuedo) random number generators. By working together, these generators
|
5
|
+
create higher quality pseudo-random number streams than either could create
|
6
|
+
by itself.
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
to be either the same instance, or the same type with the same seed, because
|
11
|
-
this negates the advantage of compositing generators.
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add this line to your application's Gemfile:
|
12
11
|
|
13
|
-
|
12
|
+
gem 'composite_rng'
|
14
13
|
|
15
|
-
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install composite_rng
|
21
|
+
|
22
|
+
The composite_rng gem itself is found at: ( https://rubygems.org/gems/composite_rng )
|
16
23
|
|
17
|
-
|
18
|
-
* The parent PRNG that is used to "educate" the child.
|
19
|
-
* The child PRNG that is the actual generator of data.
|
20
|
-
* The optional churn_limit factor that controls how much tutoring the child
|
21
|
-
can receive. This optional parameter defaults to 16. This value may be read
|
22
|
-
back with the churn_limit property. Valid values are 2..256
|
23
|
-
* The optional init factor that controls the amount of initial tutoring the
|
24
|
-
child receives initially. This defaults to 0 for none. Valid values are 0..256
|
24
|
+
##Usage
|
25
25
|
|
26
|
-
The following shows how this could work:
|
27
26
|
```ruby
|
28
|
-
|
29
|
-
child = Random.new
|
30
|
-
composite = CompositeRng.new(parent, child, 42, 11)
|
31
|
-
# ...
|
32
|
-
dice_roll = 1 + composite.rand(6)
|
33
|
-
# ...
|
27
|
+
require 'composite_rng'
|
34
28
|
```
|
35
29
|
|
36
|
-
|
30
|
+
Then in an appropriate place in the code:
|
31
|
+
|
37
32
|
```ruby
|
38
|
-
|
33
|
+
@my_rng = CompositeRng.new(parent, child, churn, init)
|
34
|
+
```
|
35
|
+
Where:
|
36
|
+
* parent is a random number generator used to educate the child.
|
37
|
+
* child is the random number generator used to generate the output.
|
38
|
+
* churn is the limit on the education process. Default 16, Range 2..256
|
39
|
+
* init is the number of initial churns done during initialization. Default 0, Range 0..256
|
40
|
+
|
41
|
+
The parent and child generators do not need to be the same type. In fact it
|
42
|
+
helps to reduce any possible correlation between the parent and the child
|
43
|
+
if they are completely different sorts of generators. It is a really bad
|
44
|
+
idea for them to be either the same instance, or the same type with the same
|
45
|
+
seed, because this negates the advantage of compositing generators.
|
46
|
+
|
47
|
+
To be used in a composite generator, both generators used must implement the
|
48
|
+
following method:
|
49
|
+
|
50
|
+
rand(max)
|
51
|
+
|
52
|
+
which method must return a pseudo-random integer in 0...max.
|
53
|
+
|
54
|
+
The following are examples of this class in action.
|
55
|
+
```ruby
|
56
|
+
parent = Random.new #Get the built in Mersenne Twister MT19937 PRNG
|
39
57
|
child = Random.new
|
40
|
-
composite = CompositeRng.new(parent, child)
|
58
|
+
composite = CompositeRng.new(parent, child, 42, 11)
|
41
59
|
# ...
|
42
60
|
dice_roll = 1 + composite.rand(6)
|
43
61
|
# ...
|
44
62
|
```
|
45
|
-
This is because the default PRNG exists as methods of Object. Note that (as
|
46
|
-
far as I can tell) only one instance of that PRNG exists, so it should only
|
47
|
-
be used as parent or child but never both!.
|
48
63
|
|
49
|
-
The composite generator also works with custom
|
50
|
-
|
64
|
+
The composite generator also works with custom generators that support rand(n).
|
65
|
+
For example my own Fibonacci generator:
|
51
66
|
|
52
67
|
```ruby
|
53
68
|
parent = Random.new
|
@@ -77,24 +92,6 @@ more thorough job:
|
|
77
92
|
crazy_string = 22.times.inject("") { |s| s << composite.churn.bytes(1) }
|
78
93
|
```
|
79
94
|
|
80
|
-
## Installation
|
81
|
-
|
82
|
-
Add this line to your application's Gemfile:
|
83
|
-
|
84
|
-
gem 'composite_rng'
|
85
|
-
|
86
|
-
And then execute:
|
87
|
-
|
88
|
-
$ bundle
|
89
|
-
|
90
|
-
Or install it yourself as:
|
91
|
-
|
92
|
-
$ gem install composite_rng
|
93
|
-
|
94
|
-
The composite_rng gem itself is found at: ( https://rubygems.org/gems/composite_rng )
|
95
|
-
|
96
|
-
The fibonacci_rng code lives at: ( https://github.com/PeterCamilleri/fibonacci_rng )
|
97
|
-
|
98
95
|
## Contributing
|
99
96
|
|
100
97
|
#### Plan A
|
@@ -109,3 +106,14 @@ The fibonacci_rng code lives at: ( https://github.com/PeterCamilleri/fibonacci_r
|
|
109
106
|
|
110
107
|
Go to the GitHub repository and raise an issue calling attention to some
|
111
108
|
aspect that could use some TLC or a suggestion or an idea.
|
109
|
+
|
110
|
+
## License
|
111
|
+
|
112
|
+
The gem is available as open source under the terms of the
|
113
|
+
[MIT License](./LICENSE.txt).
|
114
|
+
|
115
|
+
## Code of Conduct
|
116
|
+
|
117
|
+
Everyone interacting in the fully_freeze project’s codebases, issue trackers,
|
118
|
+
chat rooms and mailing lists is expected to follow the
|
119
|
+
[code of conduct](./CODE_OF_CONDUCT.md).
|
data/composite_rng.gemspec
CHANGED
@@ -23,10 +23,9 @@ Gem::Specification.new do |spec|
|
|
23
23
|
|
24
24
|
spec.required_ruby_version = '>= 1.9.3'
|
25
25
|
|
26
|
-
spec.add_development_dependency "bundler", "
|
27
|
-
spec.add_development_dependency "rake"
|
26
|
+
spec.add_development_dependency "bundler", ">= 2.1.0"
|
27
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
28
28
|
spec.add_development_dependency 'reek', "~> 1.3.8"
|
29
29
|
spec.add_development_dependency 'minitest', "~> 5.8"
|
30
30
|
spec.add_development_dependency 'rdoc', "~> 4.0.1"
|
31
|
-
spec.add_development_dependency 'minitest_visible', ">= 0.1.0"
|
32
31
|
end
|
data/irbt.rb
CHANGED
@@ -3,14 +3,10 @@
|
|
3
3
|
require_relative '../lib/composite_rng'
|
4
4
|
gem 'minitest'
|
5
5
|
require 'minitest/autorun'
|
6
|
-
require 'minitest_visible'
|
7
6
|
|
8
7
|
#Test the monkey patches applied to the Object class.
|
9
8
|
class CompositeRngTester < Minitest::Test
|
10
9
|
|
11
|
-
#Track mini-test progress.
|
12
|
-
include MinitestVisible
|
13
|
-
|
14
10
|
def test_that_it_checks_parms
|
15
11
|
assert_raises { CompositeRng.new(Random.new, Random.new, -1, 0) }
|
16
12
|
assert_raises { CompositeRng.new(Random.new, Random.new, 300, 0) }
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: composite_rng
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Camilleri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.1.0
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 12.3.3
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 12.3.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: reek
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +80,6 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 4.0.1
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: minitest_visible
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 0.1.0
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 0.1.0
|
97
83
|
description: A composable random number generator.
|
98
84
|
email:
|
99
85
|
- peter.c.camilleri@gmail.com
|
@@ -102,6 +88,7 @@ extensions: []
|
|
102
88
|
extra_rdoc_files: []
|
103
89
|
files:
|
104
90
|
- ".gitignore"
|
91
|
+
- CODE_OF_CONDUCT.md
|
105
92
|
- Gemfile
|
106
93
|
- LICENSE.txt
|
107
94
|
- README.md
|
@@ -131,10 +118,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
118
|
- !ruby/object:Gem::Version
|
132
119
|
version: '0'
|
133
120
|
requirements: []
|
134
|
-
|
135
|
-
rubygems_version: 2.2.2
|
121
|
+
rubygems_version: 3.2.17
|
136
122
|
signing_key:
|
137
123
|
specification_version: 4
|
138
124
|
summary: A composable random number generation class.
|
139
125
|
test_files: []
|
140
|
-
has_rdoc:
|