File: test_memfunctions.py

package info (click to toggle)
python2.5 2.5-5
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 52,392 kB
  • ctags: 96,908
  • sloc: ansic: 352,790; python: 317,047; sh: 16,886; asm: 6,564; makefile: 4,292; lisp: 3,678; perl: 3,674; xml: 894; objc: 756; sed: 2
file content (59 lines) | stat: -rw-r--r-- 2,207 bytes parent folder | download | duplicates (3)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import sys
import unittest
from ctypes import *

class MemFunctionsTest(unittest.TestCase):
    def test_memmove(self):
        # large buffers apparently increase the chance that the memory
        # is allocated in high address space.
        a = create_string_buffer(1000000)
        p = "Hello, World"
        result = memmove(a, p, len(p))
        self.failUnlessEqual(a.value, "Hello, World")

        self.failUnlessEqual(string_at(result), "Hello, World")
        self.failUnlessEqual(string_at(result, 5), "Hello")
        self.failUnlessEqual(string_at(result, 16), "Hello, World\0\0\0\0")

    def test_memset(self):
        a = create_string_buffer(1000000)
        result = memset(a, ord('x'), 16)
        self.failUnlessEqual(a.value, "xxxxxxxxxxxxxxxx")

        self.failUnlessEqual(string_at(result), "xxxxxxxxxxxxxxxx")
        self.failUnlessEqual(string_at(a), "xxxxxxxxxxxxxxxx")
        self.failUnlessEqual(string_at(a, 20), "xxxxxxxxxxxxxxxx\0\0\0\0")

    def test_cast(self):
        a = (c_ubyte * 32)(*map(ord, "abcdef"))
        self.failUnlessEqual(cast(a, c_char_p).value, "abcdef")
        self.failUnlessEqual(cast(a, POINTER(c_byte))[:7],
                             [97, 98, 99, 100, 101, 102, 0])

    def test_string_at(self):
        s = string_at("foo bar")
        # XXX The following may be wrong, depending on how Python
        # manages string instances
        self.failUnlessEqual(2, sys.getrefcount(s))
        self.failUnless(s, "foo bar")

        self.failUnlessEqual(string_at("foo bar", 8), "foo bar\0")
        self.failUnlessEqual(string_at("foo bar", 3), "foo")

    try:
        create_unicode_buffer
    except NameError:
        pass
    else:
        def test_wstring_at(self):
            p = create_unicode_buffer("Hello, World")
            a = create_unicode_buffer(1000000)
            result = memmove(a, p, len(p) * sizeof(c_wchar))
            self.failUnlessEqual(a.value, "Hello, World")

            self.failUnlessEqual(wstring_at(a), "Hello, World")
            self.failUnlessEqual(wstring_at(a, 5), "Hello")
            self.failUnlessEqual(wstring_at(a, 16), "Hello, World\0\0\0\0")

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