Sha256: 737266b8c8676a792aff3783ce069177fa80008334c6e387cb7604567e97fb7d
Contents?: true
Size: 1.77 KB
Versions: 3
Compression:
Stored size: 1.77 KB
Contents
# helpers: falsy class Random attr_reader :seed, :state def self._verify_count(count) %x{ if ($falsy(count)) count = 16; if (typeof count !== "number") count = #{`count`.to_int}; if (count < 0) #{raise ArgumentError, 'negative string size (or size too big)'}; count = Math.floor(count); return count; } end def initialize(seed = Random.new_seed) seed = Opal.coerce_to!(seed, Integer, :to_int) @state = seed reseed(seed) end def reseed(seed) @seed = seed `self.$rng = Opal.$$rand.reseed(seed)` end def self.new_seed `Opal.$$rand.new_seed()` end def self.rand(limit = undefined) DEFAULT.rand(limit) end def self.srand(n = Random.new_seed) n = Opal.coerce_to!(n, Integer, :to_int) previous_seed = DEFAULT.seed DEFAULT.reseed(n) previous_seed end def self.urandom(size) ::SecureRandom.bytes(size) end def ==(other) return false unless Random === other seed == other.seed && state == other.state end def bytes(length) length = Random._verify_count(length) Array.new(length) { rand(255).chr }.join.encode('ASCII-8BIT') end def self.bytes(length) DEFAULT.bytes(length) end def rand(limit = undefined) random_number(limit) end # Not part of the Ruby interface (use #random_number for portability), but # used by Random::Formatter as a shortcut, as for Random interface the float # RNG is primary. def random_float %x{ self.state++; return Opal.$$rand.rand(self.$rng); } end def self.random_float DEFAULT.random_float end def self.generator=(generator) `Opal.$$rand = #{generator}` if const_defined? :DEFAULT DEFAULT.reseed else const_set :DEFAULT, new(new_seed) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
opal-1.3.0.alpha1 | opal/corelib/random.rb |
opal-1.2.0 | opal/corelib/random.rb |
opal-1.2.0.beta1 | opal/corelib/random.rb |