mirror of
https://github.com/mwisnowski/mtg_python_deckbuilder.git
synced 2026-04-04 12:17:17 +02:00
Some checks are pending
CI / build (push) Waiting to run
* test-cleanup: fix 21 failures, prune stale tests, consolidate fragmented files * test-cleanup: remove permanently-skipped M4/perf tests, fix pydantic ConfigDict warning * docs: update changelog and release notes for test-cleanup changes * ci: fix editorial governance workflow stale test file reference
61 lines
2 KiB
Python
61 lines
2 KiB
Python
from __future__ import annotations
|
|
|
|
from random_util import derive_seed_from_string, set_seed, get_random, generate_seed
|
|
|
|
|
|
def test_derive_seed_from_string_stable():
|
|
# Known value derived from SHA-256('test-seed') first 8 bytes masked to 63 bits
|
|
assert derive_seed_from_string('test-seed') == 6214070892065607348
|
|
# Int passthrough-like behavior (normalized to positive 63-bit)
|
|
assert derive_seed_from_string(42) == 42
|
|
assert derive_seed_from_string(-42) == 42
|
|
|
|
|
|
def test_set_seed_deterministic_stream():
|
|
r1 = set_seed('alpha')
|
|
r2 = set_seed('alpha')
|
|
seq1 = [r1.random() for _ in range(5)]
|
|
seq2 = [r2.random() for _ in range(5)]
|
|
assert seq1 == seq2
|
|
|
|
|
|
def test_get_random_unseeded_independent():
|
|
a = get_random()
|
|
b = get_random()
|
|
# Advance a few steps
|
|
_ = [a.random() for _ in range(3)]
|
|
_ = [b.random() for _ in range(3)]
|
|
# They should not be the same object and streams should diverge vs seeded
|
|
assert a is not b
|
|
|
|
|
|
def test_generate_seed_range():
|
|
s = generate_seed()
|
|
assert isinstance(s, int)
|
|
assert s >= 0
|
|
# Ensure it's within 63-bit range
|
|
assert s < (1 << 63)
|
|
|
|
|
|
def test_weighted_sample_deterministic_same_seed():
|
|
from deck_builder import builder_utils as bu
|
|
pool = [("a", 1), ("b", 2), ("c", 3), ("d", 4)]
|
|
k = 3
|
|
rng1 = set_seed(12345)
|
|
sel1 = bu.weighted_sample_without_replacement(pool, k, rng=rng1)
|
|
rng2 = set_seed(12345)
|
|
sel2 = bu.weighted_sample_without_replacement(pool, k, rng=rng2)
|
|
assert sel1 == sel2
|
|
|
|
|
|
def test_compute_adjusted_target_deterministic_same_seed():
|
|
from deck_builder import builder_utils as bu
|
|
msgs: list[str] = []
|
|
out = msgs.append
|
|
original_cfg = 10
|
|
existing = 4
|
|
rng1 = set_seed(999)
|
|
to_add1, bonus1 = bu.compute_adjusted_target("Ramp", original_cfg, existing, out, plural_word="ramp spells", rng=rng1)
|
|
rng2 = set_seed(999)
|
|
to_add2, bonus2 = bu.compute_adjusted_target("Ramp", original_cfg, existing, out, plural_word="ramp spells", rng=rng2)
|
|
assert (to_add1, bonus1) == (to_add2, bonus2)
|