test_bench-random 2.2.0.2 → 3.0.0.0.pre.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
  SHA256:
3
- metadata.gz: 4ce90287bfe54cc070cda0b9a935639ea61db66e85bf5e8753fc08dde3fcf248
4
- data.tar.gz: 564e2ba5284334da22605a303c41d9fac27610bb6cdbb1e0498ba1ba08f2d83a
3
+ metadata.gz: 66584448169e76e41c6165d153013352e173513a6ccd518b87d47f665f51153d
4
+ data.tar.gz: 452cda9fdb837253f4c8ee938bda0e902a745b449394d46277939c10e2eb10be
5
5
  SHA512:
6
- metadata.gz: 55dff5c897757b5a2f061122990336b5ba56c2649cbabecbda7ed3605f820b2fb72947d3f400d5603e5415ce5bf597da3d6012a7baa4ddb761802549a704d98b
7
- data.tar.gz: d8ce7475f2710ab523c0231cc42c6cb64601b0446aece50d17173041d5a096357dc6683737ccda847188b4d202884b4184fb01ac3323f773930fcc22c467f14e
6
+ metadata.gz: d8777e0abafdd0dc6979f04269f1a6197799bcf2e35e01893d71b28948002dfbf7379438e523bdeef01a6449f2229e6dad7499425958a3f8519725b33456894b
7
+ data.tar.gz: a8dbaa30e4ef793112711a59b2f876019b8717cdcb3029372f0068a6d3fbdcf5e642becd2c6aac23aa8197e239ac767bab80817a4404eda47363086b0413e541
@@ -1,22 +1,20 @@
1
1
  module TestBench
2
- class Random
2
+ module Random
3
3
  module Controls
4
4
  module Seed
5
5
  def self.example
6
- 0x1111_1111_1111_1111
6
+ '1111111111111111'
7
7
  end
8
8
 
9
- def self.text
10
- example.to_s(36)
9
+ def self.other_example
10
+ '2222222222222222'
11
11
  end
12
12
 
13
- module Namespace
14
- def self.example
15
- 'some-seed-namespace'
16
- end
13
+ module Value
14
+ def self.example(seed=nil)
15
+ seed ||= Seed.example
17
16
 
18
- def self.other_example
19
- 'some-other-seed-namespace'
17
+ seed.to_i(36)
20
18
  end
21
19
  end
22
20
  end
@@ -0,0 +1,68 @@
1
+ module TestBench
2
+ module Random
3
+ module Controls
4
+ module Sequence
5
+ def self.example(count=nil, random_seed: nil)
6
+ count ||= self.count
7
+ random_seed ||= self.random_seed
8
+
9
+ random = ::Random.new(random_seed)
10
+
11
+ count.times.map do
12
+ random.bytes(8)
13
+ end
14
+ end
15
+
16
+ def self.count
17
+ 3
18
+ end
19
+
20
+ def self.random_seed
21
+ Seed::Value.example
22
+ end
23
+
24
+ module Integer
25
+ def self.example(count=nil, random_seed: nil)
26
+ sequence = Sequence.example(count, random_seed:)
27
+
28
+ sequence.map do |bytes|
29
+ bytes.unpack1('Q>')
30
+ end
31
+ end
32
+ end
33
+
34
+ module Decimal
35
+ def self.example(count=nil, random_seed: nil)
36
+ sequence = Sequence.example(count, random_seed:)
37
+
38
+ sequence.map do |bytes|
39
+ bytes.unpack1('D')
40
+ end
41
+ end
42
+ end
43
+
44
+ module String
45
+ def self.example(count=nil, random_seed: nil)
46
+ integer_sequence = Sequence::Integer.example(count, random_seed:)
47
+
48
+ integer_sequence.map do |integer|
49
+ integer.to_s(36)
50
+ end
51
+ end
52
+ end
53
+
54
+ module Boolean
55
+ def self.example(count=nil, random_seed: nil)
56
+ count ||= 10
57
+
58
+ integer_sequence = Sequence::Integer.example(count, random_seed:)
59
+
60
+ integer_sequence.map do |integer|
61
+ integer % 2 == 1
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -1 +1,2 @@
1
1
  require 'test_bench/random/controls/seed'
2
+ require 'test_bench/random/controls/sequence'
@@ -0,0 +1,11 @@
1
+ module TestBench
2
+ module Random
3
+ module Defaults
4
+ def self.seed
5
+ ENV.fetch('TEST_BENCH_SEED') do
6
+ @seed ||= ::Random.new_seed.to_s(36)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ module TestBench
2
+ module Random
3
+ class Generator
4
+ module Substitute
5
+ def self.build
6
+ Generator.build
7
+ end
8
+
9
+ class Generator < Generator
10
+ def self.build
11
+ new(seed)
12
+ end
13
+
14
+ def self.seed
15
+ '0'
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,62 @@
1
+ module TestBench
2
+ module Random
3
+ class Generator
4
+ def iterator
5
+ @iterator ||= Iterator.build(seed)
6
+ end
7
+ attr_writer :iterator
8
+
9
+ attr_accessor :seed
10
+ alias :set_seed :seed=
11
+
12
+ def initialize(seed)
13
+ @seed = seed
14
+ end
15
+
16
+ def self.build(seed=nil)
17
+ seed ||= Defaults.seed
18
+
19
+ new(seed)
20
+ end
21
+
22
+ def self.instance
23
+ @instance ||= build
24
+ end
25
+
26
+ def self.configure(receiver, attr_name: nil)
27
+ attr_name ||= :random_generator
28
+
29
+ instance = self.instance
30
+ receiver.public_send(:"#{attr_name}=", instance)
31
+ end
32
+
33
+ def string
34
+ self.integer.to_s(36)
35
+ end
36
+
37
+ def boolean
38
+ self.integer % 2 == 1
39
+ end
40
+
41
+ def integer
42
+ iterator.next.unpack1('Q>')
43
+ end
44
+
45
+ def decimal
46
+ iterator.next.unpack1('D')
47
+ end
48
+
49
+ def reset
50
+ self.iterator = Iterator.build(seed)
51
+ end
52
+
53
+ def reset?
54
+ if iterator.iterated?
55
+ false
56
+ else
57
+ true
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,52 @@
1
+ module TestBench
2
+ module Random
3
+ class Iterator
4
+ attr_accessor :seed
5
+
6
+ def iterations
7
+ @iterations ||= 0
8
+ end
9
+ attr_writer :iterations
10
+
11
+ attr_reader :random
12
+
13
+ def initialize(random)
14
+ @random = random
15
+ end
16
+
17
+ def self.build(seed)
18
+ random = self.random(seed)
19
+
20
+ instance = new(random)
21
+ instance.seed = seed
22
+ instance
23
+ end
24
+
25
+ def self.random(seed)
26
+ random_seed = seed.to_i(36)
27
+
28
+ ::Random.new(random_seed)
29
+ end
30
+
31
+ def next
32
+ self.iterations += 1
33
+
34
+ random.bytes(8)
35
+ end
36
+
37
+ def seed?(seed)
38
+ control_random = ::Random.new(random.seed)
39
+ compare_random = Iterator.random(seed)
40
+
41
+ control_value = control_random.rand
42
+ compare_value = compare_random.rand
43
+
44
+ control_value == compare_value
45
+ end
46
+
47
+ def iterated?
48
+ iterations > 0
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,168 +1,25 @@
1
1
  module TestBench
2
- class Random
3
- def generator
4
- @generator ||= self.class.generator(seed, namespace)
5
- end
6
- attr_writer :generator
7
-
8
- def seed
9
- @seed ||= Defaults.seed
10
- end
11
- attr_writer :seed
12
-
13
- def namespace
14
- @namespace ||= Defaults.namespace
15
- end
16
- attr_writer :namespace
17
-
18
- def sequence
19
- @sequence ||= 0
20
- end
21
- attr_writer :sequence
2
+ module Random
3
+ extend self
22
4
 
23
- def self.build(seed=nil, namespace: nil)
24
- instance = new
25
- instance.seed = seed
26
- instance.namespace = namespace
27
- instance
28
- end
29
-
30
- def self.instance
31
- @instance ||= build
32
- end
33
-
34
- def self.configure(receiver, attr_name: nil)
35
- attr_name ||= :random
36
-
37
- receiver.public_send(:"#{attr_name}=", instance)
5
+ def reset
6
+ Generator.instance.reset
38
7
  end
39
8
 
40
9
  def string
41
- integer.to_s(36)
42
- end
43
-
44
- def integer
45
- bytes = next_qword.bytes
46
-
47
- number = 0
48
-
49
- bytes.each_with_index do |byte, index|
50
- number += byte ** index
51
- end
52
-
53
- number
54
- end
55
-
56
- def fraction
57
- self.sequence += 1
58
-
59
- generator.rand
10
+ Generator.instance.string
60
11
  end
61
12
 
62
13
  def boolean
63
- byte = next_qword.bytes.first
64
-
65
- if byte % 2 == 1
66
- true
67
- else
68
- false
69
- end
70
- end
71
-
72
- def reset?(namespace=nil)
73
- namespace ||= self.namespace
74
-
75
- if namespace != self.namespace
76
- return false
77
- end
78
-
79
- sequence.zero?
14
+ Generator.instance.boolean
80
15
  end
81
16
 
82
- def next_qword
83
- self.sequence += 1
84
-
85
- generator.bytes(8)
86
- end
87
-
88
- def reset(namespace=nil)
89
- namespace ||= self.namespace
90
-
91
- generator = self.class.generator(seed, namespace)
92
-
93
- self.generator = generator
94
- self.namespace = namespace
95
-
96
- self.sequence = 0
97
-
98
- generator.seed
99
- end
100
-
101
- def self.generator(seed, namespace)
102
- namespace_digest = namespace_digest(namespace)
103
-
104
- seed ^= namespace_digest
105
-
106
- ::Random.new(seed)
107
- end
108
-
109
- def self.generator_seed(seed, namespace)
110
- generator = generator(seed, namespace)
111
- generator.seed
112
- end
113
-
114
- def self.namespace_digest(namespace)
115
- byte_width = 8
116
-
117
- sequence = namespace.bytes.each_slice(byte_width).map do |bytes|
118
- value = 0
119
-
120
- bytes.each_with_index do |byte, index|
121
- value <<= 8 if not index.zero?
122
-
123
- value += byte
124
- end
125
-
126
- value
127
- end
128
-
129
- digest_salt = (0x100 ** byte_width) - 1
130
- sequence.push(digest_salt)
131
-
132
- sequence.reduce do |checksum, value|
133
- checksum ^ value
134
- end
135
- end
136
-
137
- module Substitute
138
- def self.build
139
- Random.build
140
- end
141
-
142
- class Random < Random
143
- alias :set_seed :seed=
144
-
145
- def self.build
146
- instance = new
147
- instance.set_seed(0)
148
- instance
149
- end
150
- end
17
+ def integer
18
+ Generator.instance.integer
151
19
  end
152
20
 
153
- module Defaults
154
- def self.seed
155
- seed = ENV['TEST_BENCH_SEED']
156
- if not seed.nil?
157
- seed.to_i(36)
158
- else
159
- ::Random.new_seed
160
- end
161
- end
162
-
163
- def self.namespace
164
- $PROGRAM_NAME
165
- end
21
+ def decimal
22
+ Generator.instance.decimal
166
23
  end
167
24
  end
168
25
  end
@@ -1 +1,8 @@
1
+ require 'test_bench/random/defaults'
2
+
3
+ require 'test_bench/random/iterator'
4
+
5
+ require 'test_bench/random/generator'
6
+ require 'test_bench/random/generator/substitute'
7
+
1
8
  require 'test_bench/random/random'
metadata CHANGED
@@ -1,17 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test_bench-random
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0.2
4
+ version: 3.0.0.0.pre.1
5
5
  platform: ruby
6
6
  authors:
7
- - Nathan Ladd
8
- autorequire:
7
+ - Brightworks Digital
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date:
12
10
  dependencies:
13
11
  - !ruby/object:Gem::Dependency
14
- name: test_bench-isolated
12
+ name: test_bench_bootstrap
15
13
  requirement: !ruby/object:Gem::Requirement
16
14
  requirements:
17
15
  - - ">="
@@ -24,8 +22,9 @@ dependencies:
24
22
  - - ">="
25
23
  - !ruby/object:Gem::Version
26
24
  version: '0'
27
- description:
28
- email: nathanladd+github@gmail.com
25
+ description: 64-bit pseudorandom value generator for TestBench. Provides string, integer,
26
+ decimal, and boolean values.
27
+ email: development@bright.works
29
28
  executables: []
30
29
  extensions: []
31
30
  extra_rdoc_files: []
@@ -34,14 +33,23 @@ files:
34
33
  - lib/test_bench/random
35
34
  - lib/test_bench/random/controls
36
35
  - lib/test_bench/random/controls/seed.rb
36
+ - lib/test_bench/random/controls/sequence.rb
37
37
  - lib/test_bench/random/controls.rb
38
+ - lib/test_bench/random/defaults.rb
39
+ - lib/test_bench/random/generator
40
+ - lib/test_bench/random/generator/substitute.rb
41
+ - lib/test_bench/random/generator.rb
42
+ - lib/test_bench/random/iterator.rb
38
43
  - lib/test_bench/random/random.rb
39
44
  - lib/test_bench/random.rb
40
- homepage: https://github.com/test-bench/test-bench-random
45
+ homepage: http://test-bench.software
41
46
  licenses:
42
47
  - MIT
43
- metadata: {}
44
- post_install_message:
48
+ metadata:
49
+ homepage_uri: http://test-bench.software
50
+ source_code_uri: https://github.com/test-bench-demo/test-bench-random
51
+ allowed_push_host: https://rubygems.org
52
+ namespace: TestBench::Random
45
53
  rdoc_options: []
46
54
  require_paths:
47
55
  - lib
@@ -56,8 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
64
  - !ruby/object:Gem::Version
57
65
  version: '0'
58
66
  requirements: []
59
- rubygems_version: 3.4.10
60
- signing_key:
67
+ rubygems_version: 3.6.9
61
68
  specification_version: 4
62
- summary: Random value controls for TestBench
69
+ summary: 64-bit pseudorandom value generator for TestBench
63
70
  test_files: []