コード例 #1
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)
コード例 #2
0
ファイル: numberstest.py プロジェクト: nathanwblair/ironclad
 def testStoreComplex(self, mapper, _):
     for value in (0 + 0j, 1 + 3.3e33j, -3.3e-33 - 1j):
         ptr = mapper.Store(value)
         self.assertEquals(mapper.Retrieve(ptr), value,
                           "stored/retrieved wrong")
         self.assertEquals(
             CPyMarshal.ReadIntField(ptr, PyComplexObject, "ob_refcnt"), 1)
         self.assertEquals(
             CPyMarshal.ReadPtrField(ptr, PyComplexObject, "ob_type"),
             mapper.PyComplex_Type)
         cpxptr = CPyMarshal.GetField(ptr, PyComplexObject, "cval")
         self.assertEquals(
             CPyMarshal.ReadDoubleField(cpxptr, Py_complex, "real"),
             value.real)
         self.assertEquals(
             CPyMarshal.ReadDoubleField(cpxptr, Py_complex, "imag"),
             value.imag)
         mapper.DecRef(ptr)