All Downloads are FREE. Search and download functionalities are using the official Maven repository.

lib-python.2.7.ctypes.test.test_memfunctions.py Maven / Gradle / Ivy

Go to download

Jython is an implementation of the high-level, dynamic, object-oriented language Python written in 100% Pure Java, and seamlessly integrated with the Java platform. It thus allows you to run Python on any Java platform.

There is a newer version: 2.7.4
Show newest version
import sys
import unittest
from ctypes import *

class MemFunctionsTest(unittest.TestCase):
##    def test_overflow(self):
##        # string_at and wstring_at must use the Python calling
##        # convention (which acquires the GIL and checks the Python
##        # error flag).  Provoke an error and catch it; see also issue
##        # #3554: 
##        self.assertRaises((OverflowError, MemoryError, SystemError),
##                          lambda: wstring_at(u"foo", sys.maxint - 1))
##        self.assertRaises((OverflowError, MemoryError, SystemError),
##                          lambda: string_at("foo", sys.maxint - 1))

    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.assertEqual(a.value, "Hello, World")

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

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

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

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

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

        self.assertEqual(string_at("foo bar", 8), "foo bar\0")
        self.assertEqual(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.assertEqual(a.value, "Hello, World")

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

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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy