Class: TestBench::Random
- Inherits:
-
Object
show all
- Defined in:
- lib/test_bench/random/random.rb,
lib/test_bench/random/controls/seed.rb
Defined Under Namespace
Modules: Controls, Defaults
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Instance Attribute Details
#generator ⇒ Object
3
4
5
|
# File 'lib/test_bench/random/random.rb', line 3
def generator
@generator ||= self.class.generator(seed, namespace)
end
|
#namespace ⇒ Object
13
14
15
|
# File 'lib/test_bench/random/random.rb', line 13
def namespace
@namespace ||= Defaults.namespace
end
|
#seed ⇒ Object
8
9
10
|
# File 'lib/test_bench/random/random.rb', line 8
def seed
@seed ||= Defaults.seed
end
|
Class Method Details
.build(seed = nil, namespace: nil) ⇒ Object
18
19
20
21
22
23
|
# File 'lib/test_bench/random/random.rb', line 18
def self.build(seed=nil, namespace: nil)
instance = new
instance.seed = seed
instance.namespace = namespace
instance
end
|
.generator(seed, namespace) ⇒ Object
66
67
68
69
70
71
72
|
# File 'lib/test_bench/random/random.rb', line 66
def self.generator(seed, namespace)
namespace_digest = namespace_digest(namespace)
seed ^= namespace_digest
::Random.new(seed)
end
|
.generator_seed(seed, namespace) ⇒ Object
74
75
76
77
|
# File 'lib/test_bench/random/random.rb', line 74
def self.generator_seed(seed, namespace)
generator = generator(seed, namespace)
generator.seed
end
|
.namespace_digest(namespace) ⇒ Object
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/test_bench/random/random.rb', line 79
def self.namespace_digest(namespace)
byte_width = 8
sequence = namespace.bytes.each_slice(byte_width).map do |bytes|
value = 0
bytes.each_with_index do |byte, index|
value <<= 8 if not index.zero?
value += byte
end
value
end
digest_salt = (0x100 ** byte_width) - 1
sequence.push(digest_salt)
sequence.reduce do |checksum, value|
checksum ^ value
end
end
|
Instance Method Details
#boolean ⇒ Object
45
46
47
48
49
50
51
52
53
|
# File 'lib/test_bench/random/random.rb', line 45
def boolean
byte = generator.bytes(1).bytes.first
if byte % 2 == 1
true
else
false
end
end
|
#fraction ⇒ Object
41
42
43
|
# File 'lib/test_bench/random/random.rb', line 41
def fraction
generator.rand
end
|
#integer ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/test_bench/random/random.rb', line 29
def integer
bytes = generator.bytes(8).bytes
number = 0
bytes.each_with_index do |byte, index|
number += byte ** index
end
number
end
|
#reset(namespace = nil) ⇒ Object
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/test_bench/random/random.rb', line 55
def reset(namespace=nil)
namespace ||= self.namespace
generator = self.class.generator(seed, namespace)
self.generator = generator
self.namespace = namespace
generator.seed
end
|
#string ⇒ Object
25
26
27
|
# File 'lib/test_bench/random/random.rb', line 25
def string
integer.to_s(36)
end
|