about summary refs log tree commit diff stats
path: root/tests/test_sparse_memory.py
blob: 7dda8f04fe243efb282561727092b1d28bc2a499 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import pytest

from focaccia.snapshot import SparseMemory, MemoryAccessError

@pytest.fixture
def mem():
    return SparseMemory()

def test_oob_read(mem):
    for addr in range(mem.page_size):
        with pytest.raises(MemoryAccessError):
            mem.read(addr, 1)
        with pytest.raises(MemoryAccessError): 
            mem.read(addr, 30)
        with pytest.raises(MemoryAccessError): 
            mem.read(addr + 0x10, 30)
        with pytest.raises(MemoryAccessError): 
            mem.read(addr, mem.page_size)
        with pytest.raises(MemoryAccessError): 
            mem.read(addr, mem.page_size - 1)
        with pytest.raises(MemoryAccessError): 
            mem.read(addr, mem.page_size + 1)

def test_basic_read_write(mem):
    data = b'a' * mem.page_size * 2
    mem.write(0x300, data)
    assert mem.read(0x300, len(data)) == data
    assert mem.read(0x300, 1) == b'a'
    assert mem.read(0x400, 1) == b'a'
    assert mem.read(0x299 + mem.page_size * 2, 1) == b'a'
    assert mem.read(0x321, 12) == b'aaaaaaaaaaaa'

    mem.write(0x321, b'Hello World!')
    assert mem.read(0x321, 12) == b'Hello World!'

    with pytest.raises(MemoryAccessError): 
        mem.read(0x300, mem.page_size * 3)