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 +4 -4
- data/lib/test_bench/random/controls/seed.rb +8 -10
- data/lib/test_bench/random/controls/sequence.rb +68 -0
- data/lib/test_bench/random/controls.rb +1 -0
- data/lib/test_bench/random/defaults.rb +11 -0
- data/lib/test_bench/random/generator/substitute.rb +21 -0
- data/lib/test_bench/random/generator.rb +62 -0
- data/lib/test_bench/random/iterator.rb +52 -0
- data/lib/test_bench/random/random.rb +10 -153
- data/lib/test_bench/random.rb +7 -0
- metadata +20 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66584448169e76e41c6165d153013352e173513a6ccd518b87d47f665f51153d
|
4
|
+
data.tar.gz: 452cda9fdb837253f4c8ee938bda0e902a745b449394d46277939c10e2eb10be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8777e0abafdd0dc6979f04269f1a6197799bcf2e35e01893d71b28948002dfbf7379438e523bdeef01a6449f2229e6dad7499425958a3f8519725b33456894b
|
7
|
+
data.tar.gz: a8dbaa30e4ef793112711a59b2f876019b8717cdcb3029372f0068a6d3fbdcf5e642becd2c6aac23aa8197e239ac767bab80817a4404eda47363086b0413e541
|
@@ -1,22 +1,20 @@
|
|
1
1
|
module TestBench
|
2
|
-
|
2
|
+
module Random
|
3
3
|
module Controls
|
4
4
|
module Seed
|
5
5
|
def self.example
|
6
|
-
|
6
|
+
'1111111111111111'
|
7
7
|
end
|
8
8
|
|
9
|
-
def self.
|
10
|
-
|
9
|
+
def self.other_example
|
10
|
+
'2222222222222222'
|
11
11
|
end
|
12
12
|
|
13
|
-
module
|
14
|
-
def self.example
|
15
|
-
|
16
|
-
end
|
13
|
+
module Value
|
14
|
+
def self.example(seed=nil)
|
15
|
+
seed ||= Seed.example
|
17
16
|
|
18
|
-
|
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
|
@@ -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
|
-
|
3
|
-
|
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
|
24
|
-
instance
|
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
|
-
|
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
|
-
|
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
|
83
|
-
|
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
|
-
|
154
|
-
|
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
|
data/lib/test_bench/random.rb
CHANGED
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:
|
4
|
+
version: 3.0.0.0.pre.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
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:
|
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
|
-
|
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:
|
45
|
+
homepage: http://test-bench.software
|
41
46
|
licenses:
|
42
47
|
- MIT
|
43
|
-
metadata:
|
44
|
-
|
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.
|
60
|
-
signing_key:
|
67
|
+
rubygems_version: 3.6.9
|
61
68
|
specification_version: 4
|
62
|
-
summary:
|
69
|
+
summary: 64-bit pseudorandom value generator for TestBench
|
63
70
|
test_files: []
|