Skip to content

Commit 9c228a2

Browse files
OmarMesqqcertik
authored andcommitted
Implement random.seed()
1 parent 9b5f52f commit 9c228a2

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

integration_tests/test_random.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@ def test_weibullvariate():
5252
r = random.weibullvariate(-5.6, 1.2)
5353
print(r)
5454

55+
def test_seed():
56+
random.seed(123)
57+
t1: f64
58+
t1 = random.random()
59+
random.seed(321)
60+
t2: f64
61+
t2 = random.random()
62+
assert t1 != t2
63+
5564
def check():
5665
test_random()
5766
test_randrange()
@@ -60,5 +69,6 @@ def check():
6069
test_paretovariate()
6170
test_expovariate()
6271
test_weibullvariate()
72+
test_seed()
6373

6474
check()

src/libasr/runtime/lfortran_intrinsics.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,15 @@ LFORTRAN_API void _lfortran_random_number(int n, double *v)
9696
}
9797
}
9898

99+
LFORTRAN_API void _lfortran_init_random(unsigned seed)
100+
{
101+
if (seed == 0) {
102+
srand((unsigned int)clock());
103+
} else {
104+
srand(seed);
105+
}
106+
}
107+
99108
LFORTRAN_API double _lfortran_random()
100109
{
101110
return (rand() / (double) RAND_MAX);

src/libasr/runtime/lfortran_intrinsics.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ typedef double _Complex double_complex_t;
6767

6868
LFORTRAN_API double _lfortran_sum(int n, double *v);
6969
LFORTRAN_API void _lfortran_random_number(int n, double *v);
70+
LFORTRAN_API void _lfortran_init_random(unsigned seed);
7071
LFORTRAN_API double _lfortran_random();
7172
LFORTRAN_API int _lfortran_randrange(int lower, int upper);
7273
LFORTRAN_API int _lfortran_random_int(int lower, int upper);

src/runtime/random.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ def random() -> f64:
3232
def _lfortran_random() -> f64:
3333
pass
3434

35+
def seed(seed: i32) -> None:
36+
"""
37+
Initializes the random number generator.
38+
"""
39+
_lfortran_init_random(seed)
40+
return
41+
42+
@ccall
43+
def _lfortran_init_random(seed: i32) -> None:
44+
pass
45+
3546
def randrange(lower: i32, upper: i32) -> i32:
3647
"""
3748
Return a random integer N such that `lower <= N < upper`.

0 commit comments

Comments
 (0)