1require_relative '../../spec_helper'
2require_relative 'fixtures/classes'
3
4describe "Kernel.srand" do
5  it "is a private method" do
6    Kernel.should have_private_instance_method(:srand)
7  end
8
9  it "returns the previous seed value" do
10    srand(10)
11    srand(20).should == 10
12  end
13
14  it "seeds the RNG correctly and repeatably" do
15    srand(10)
16    x = rand
17    srand(10)
18    rand.should == x
19  end
20
21  it "defaults number to a random value" do
22    lambda { srand }.should_not raise_error
23    srand.should_not == 0
24  end
25
26  it "accepts and uses a seed of 0" do
27    srand(0)
28    srand.should == 0
29  end
30
31  it "accepts a negative seed" do
32    srand(-17)
33    srand.should == -17
34  end
35
36  it "accepts a Bignum as a seed" do
37    srand(0x12345678901234567890)
38    srand.should == 0x12345678901234567890
39  end
40
41  it "calls #to_int on seed" do
42    srand(3.8)
43    srand.should == 3
44
45    s = mock('seed')
46    s.should_receive(:to_int).and_return 0
47    srand(s)
48  end
49
50  it "raises a TypeError when passed nil" do
51    lambda { srand(nil) }.should raise_error(TypeError)
52  end
53
54  it "raises a TypeError when passed a String" do
55    lambda { srand("7") }.should raise_error(TypeError)
56  end
57end
58
59describe "Kernel#srand" do
60  it "needs to be reviewed for spec completeness"
61end
62