Closed
Description
With #2318 we can now set the seed. The following program:
import random
def test_seed():
random.seed()
t1: f64 = random.random()
print(t1)
test_seed()
prints:
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.61927579977515883e-02
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.59736196584876720e-02
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.56996967344077767e-02
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.55901275647758169e-02
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.55040375029221345e-02
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.54570792873655813e-02
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.55588220877381153e-02
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.63258062751618256e-02
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.54414265488467296e-02
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.55353429799598378e-02
(lp) repos/lpython(feat/improve-random-seed-entropy) $ lpython a.py
1.64823336603503352e-02
Those are not random numbers. The implementation is:
LFORTRAN_API double _lfortran_random()
{
return (rand() / (double) RAND_MAX);
}
Which seems correct at first sight, but something somehow gets screwed up.
We should add a test for some statistics about random numbers, with high enough tolerance to always pass (say probability of failing 10e-10, or something like that), but fail on obvious cases like the above.
It looks like we should implement a Kolmogorov-Smirnov test, and we can use SciPy's kstest to check that we implemented it correctly.