require "spec" require "random/secure" describe "Random::Secure" do it "returns random number from a secure system source" do Random::Secure.next_u.should be_a(Int::Unsigned) x = Random::Secure.rand(123456...654321) x.should be >= 123456 x.should be < 654321 Random::Secure.rand(Int64::MAX // 2).should be <= (Int64::MAX // 2) end it "fully fills a large buffer" do # mostly testing the linux getrandom calls bytes = Random::Secure.random_bytes(10000) bytes[9990, 10].should_not eq(Bytes.new(10)) end it "returns a random integer in range (#8219)" do {% for type in %w(Int8 UInt8 Int16 UInt16 Int32 UInt32 Int64 UInt64 Int128 UInt128).map(&.id) %} value = Random::Secure.rand({{type}}::MIN..{{type}}::MAX) typeof(value).should eq({{type}}) {% end %} end end