Skip to content

Commit a8ed90a

Browse files
authored
Merge pull request #50 from InfiniTensor/make-tests-more-reproducible-by-seeding-based-on-test-paths
Make tests more reproducible by seeding based on test paths
2 parents 55cd48c + 86114e8 commit a8ed90a

1 file changed

Lines changed: 27 additions & 2 deletions

File tree

tests/conftest.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,37 @@
1+
import hashlib
12
import random
23

4+
import pytest
35
import torch
46

57

6-
def pytest_configure():
7-
_set_random_seed(42)
8+
def pytest_collectstart(collector):
9+
if isinstance(collector, pytest.Module):
10+
_set_random_seed(_hash(collector.name))
11+
12+
13+
@pytest.fixture(scope="module", autouse=True)
14+
def set_seed_per_module(request):
15+
_set_random_seed(_hash(_module_path_from_request(request)))
16+
17+
18+
@pytest.fixture(autouse=True)
19+
def set_seed_per_test(request):
20+
_set_random_seed(_hash(_test_case_path_from_request(request)))
821

922

1023
def _set_random_seed(seed):
1124
random.seed(seed)
1225
torch.manual_seed(seed)
26+
27+
28+
def _test_case_path_from_request(request):
29+
return f"{_module_path_from_request(request)}::{request.node.name}"
30+
31+
32+
def _module_path_from_request(request):
33+
return f"{request.module.__name__.replace('.', '/')}.py"
34+
35+
36+
def _hash(string):
37+
return int(hashlib.sha256(string.encode("utf-8")).hexdigest(), 16) % 2**32

0 commit comments

Comments
 (0)