Esempio n. 1
0
    def testReadInt(self):
        data = Marshal.AllocHGlobal(CPyMarshal.IntSize)

        Marshal.WriteInt32(data, 0)
        self.assertEquals(CPyMarshal.ReadInt(data), 0, "wrong")

        Marshal.WriteInt32(data, -1)
        self.assertEquals(CPyMarshal.ReadInt(data), -1, "wrong")

        Marshal.FreeHGlobal(data)
Esempio n. 2
0
    def testBufferProtocol(self, mapper, later):
        # should all be implemented in C really, but weaving cpy string type into
        # our code feels too much like hard work for now
        strPtr = mapper.PyString_Type

        bufPtr = CPyMarshal.ReadPtrField(strPtr, PyTypeObject, 'tp_as_buffer')
        self.assertNotEquals(bufPtr, IntPtr.Zero)
        getreadbuffer = CPyMarshal.ReadFunctionPtrField(
            bufPtr, PyBufferProcs, 'bf_getreadbuffer', dgt_int_ptrintptr)
        getwritebuffer = CPyMarshal.ReadFunctionPtrField(
            bufPtr, PyBufferProcs, 'bf_getwritebuffer', dgt_int_ptrintptr)
        getcharbuffer = CPyMarshal.ReadFunctionPtrField(
            bufPtr, PyBufferProcs, 'bf_getcharbuffer', dgt_int_ptrintptr)
        getsegcount = CPyMarshal.ReadFunctionPtrField(bufPtr, PyBufferProcs,
                                                      'bf_getsegcount',
                                                      dgt_int_ptrptr)

        ptrptr = Marshal.AllocHGlobal(Marshal.SizeOf(IntPtr))
        later(lambda: Marshal.FreeHGlobal(ptrptr))

        strptr = mapper.Store("hullo")
        for getter in (getreadbuffer, getcharbuffer):
            self.assertEquals(getter(strptr, 0, ptrptr), 5)
            self.assertEquals(
                CPyMarshal.ReadPtr(ptrptr),
                CPyMarshal.GetField(strptr, PyStringObject, 'ob_sval'))
            self.assertEquals(getter(strptr, 1, ptrptr), -1)
            self.assertMapperHasError(mapper, SystemError)

        self.assertEquals(getwritebuffer(strptr, 0, ptrptr), -1)
        self.assertMapperHasError(mapper, SystemError)

        self.assertEquals(getsegcount(strptr, ptrptr), 1)
        self.assertEquals(CPyMarshal.ReadInt(ptrptr), 5)
        self.assertEquals(getsegcount(strptr, IntPtr.Zero), 1)
    def testFills(self, mapper, addToCleanUp):
        # TODO: if we set a lower value, numpy will crash inside arr_add_docstring
        # I consider docstrings to be low-priority-enough that it's OK to fudge this
        # for now. also, fixing it would be hard ;).
        flagPtr = Marshal.AllocHGlobal(Marshal.SizeOf(Int32))
        addToCleanUp(lambda: Marshal.FreeHGlobal(flagPtr))
        mapper.RegisterData("Py_OptimizeFlag", flagPtr)

        self.assertEquals(CPyMarshal.ReadInt(flagPtr), 2)
Esempio n. 4
0
    def testCallsAppropriatelyNamedInitFunctionAndUnloadsWhenDone(self):
        l = Unmanaged.LoadLibrary("tests\\data\\setvalue.pyd")
        try:
            pValue = Unmanaged.GetProcAddress(l, "value")
            value = CPyMarshal.ReadInt(pValue)
            self.assertEquals(value, 1, "bad setup")

            pi = PydImporter()
            pi.Load("tests\\data\\setvalue.pyd")
        finally:
            # lose test reference to setvalue.pyd
            # only the PydImporter should still have a reference to it
            Unmanaged.FreeLibrary(l)

        value = CPyMarshal.ReadInt(pValue)
        self.assertEquals(value, 2, "PydImporter didn't call correct function")

        pi.Dispose()
        self.assertEquals(Unmanaged.GetModuleHandle("setvalue.pyd"), IntPtr.Zero,
                          "failed to unload on dispose")

        pi.Dispose()
Esempio n. 5
0
    def testWorksWithEmbeddedNulls(self, mapper, addDealloc):
        dataPtrPtr = Marshal.AllocHGlobal(CPyMarshal.PtrSize * 2)
        sizePtr = CPyMarshal.Offset(dataPtrPtr, CPyMarshal.PtrSize)
        addDealloc(lambda: Marshal.FreeHGlobal(dataPtrPtr))

        testStr = "You're fighting a saber-toothed ferret." + self.getStringWithValues(
            0, 256)
        strPtr = mapper.Store(testStr)
        dataPtr = self.dataPtrFromStrPtr(strPtr)
        self.assertEquals(
            mapper.PyString_AsStringAndSize(strPtr, dataPtrPtr, sizePtr), 0)
        self.assertEquals(CPyMarshal.ReadPtr(dataPtrPtr), dataPtr)
        self.assertEquals(CPyMarshal.ReadInt(sizePtr), len(testStr))
        self.assertMapperHasError(mapper, None)

        self.assertEquals(
            mapper.PyString_AsStringAndSize(strPtr, dataPtrPtr, IntPtr.Zero),
            -1)
        self.assertMapperHasError(mapper, TypeError)