about summary refs log tree commit diff stats
path: root/test/test_sparse_memory.py
blob: 87b445663024fc3b98ca93e31991e76da290537f (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
import unittest

from snapshot import SparseMemory, MemoryAccessError

class TestSparseMemory(unittest.TestCase):
    def test_oob_read(self):
        mem = SparseMemory()
        for addr in range(mem.page_size):
            self.assertRaises(MemoryAccessError, mem.read, addr, 1)
            self.assertRaises(MemoryAccessError, mem.read, addr, 30)
            self.assertRaises(MemoryAccessError, mem.read, addr + 0x10, 30)
            self.assertRaises(MemoryAccessError, mem.read, addr, mem.page_size)
            self.assertRaises(MemoryAccessError, mem.read, addr, mem.page_size - 1)
            self.assertRaises(MemoryAccessError, mem.read, addr, mem.page_size + 1)

    def test_basic_read_write(self):
        mem = SparseMemory()

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

        mem.write(0x321, b'Hello World!')
        self.assertEqual(mem.read(0x321, 12), b'Hello World!')

        self.assertRaises(MemoryAccessError, mem.read, 0x300, mem.page_size * 3)

if __name__ == '__main__':
    unittest.main()