Files
kernbench2/tests/test_memory_store.py
ywkang 724a40453d test: fix 3 stale tests from the prior pull (registry list + memory_store msg)
test_bench_registry EXPECTED_NAMES: add the 3 milestone benches the pull registered (milestone-1h-ccl, milestone-1h-gemm, milestone-gqa-headline) — 11 benches, alphabetical. test_memory_store::test_shape_mismatch_raises: the pull made same-size reshapes byte-conserving (allowed) and an over-large read raise 'Out-of-bounds read' (not 'Shape mismatch') — match the new message. Full suite now 820 passed / 1 skipped / 0 failed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 23:33:34 -07:00

88 lines
2.5 KiB
Python

"""Tests for MemoryStore (ADR-0020 D7)."""
import numpy as np
import pytest
from kernbench.sim_engine.memory_store import MemoryStore
def test_write_read_reference():
"""Write and read return the same numpy array (no copy)."""
store = MemoryStore()
data = np.ones((4, 4), dtype=np.float16)
store.write("tcm", 0x0, data)
result = store.read("tcm", 0x0)
assert result is data
def test_overwrite_replaces():
"""Same addr write replaces the previous tensor."""
store = MemoryStore()
data1 = np.zeros((4,), dtype=np.float32)
data2 = np.ones((4,), dtype=np.float32)
store.write("hbm", 0x100, data1)
store.write("hbm", 0x100, data2)
result = store.read("hbm", 0x100)
assert result is data2
def test_read_missing_raises():
store = MemoryStore()
with pytest.raises(KeyError):
store.read("hbm", 0x999)
def test_read_different_space():
store = MemoryStore()
data = np.array([1, 2, 3], dtype=np.int32)
store.write("tcm", 0x0, data)
with pytest.raises(KeyError):
store.read("hbm", 0x0) # different space
def test_dtype_reinterpret():
"""Read with different dtype does view cast."""
store = MemoryStore()
data = np.array([1.0, 2.0], dtype=np.float32) # 8 bytes
store.write("tcm", 0x0, data)
result = store.read("tcm", 0x0, dtype="u8")
assert result.dtype == np.uint8
assert result.nbytes == data.nbytes
def test_reshape():
store = MemoryStore()
data = np.arange(12, dtype=np.float32)
store.write("tcm", 0x0, data)
result = store.read("tcm", 0x0, shape=(3, 4))
assert result.shape == (3, 4)
def test_shape_mismatch_raises():
# A read larger than the stored region is rejected. (Same-size reshapes
# are byte-conserving and allowed; (5,5)=100B exceeds the 48B region.)
store = MemoryStore()
data = np.arange(12, dtype=np.float32)
store.write("tcm", 0x0, data)
with pytest.raises(ValueError, match="Out-of-bounds read"):
store.read("tcm", 0x0, shape=(5, 5))
def test_has():
store = MemoryStore()
assert not store.has("tcm", 0x0)
store.write("tcm", 0x0, np.array([1]))
assert store.has("tcm", 0x0)
def test_snapshot():
store = MemoryStore()
data = np.ones((4,), dtype=np.float16)
store.write("hbm", 0x0, data)
snap = store.snapshot()
assert snap.read("hbm", 0x0) is data # same reference
# Modifying snap doesn't affect original
snap.write("hbm", 0x0, np.zeros((4,), dtype=np.float16))
assert store.read("hbm", 0x0) is data