various DB flags, etc.
"""
-import os
-import sys
-import errno
-import shutil
-import string
-import tempfile
-from pprint import pprint
import unittest
import rpm
-import mpz
from test_all import verbose
DASH = '-'
+Methods = ( '__add__', '__sub__', '__mul__', '__div__', '__mod__', '__lshift__', '__rshift__', '__and__', '__xor__', '__or__')
+
+class Factory(object):
+ def __init__(self, false_self, method_name):
+ self.false_self = false_self
+ self.method_name = method_name
+
+ def __call__(self, val):
+ xself = long(self.false_self)
+ yself = int(self.false_self)
+ xm = long.__getattribute__(xself, self.method_name)
+ ym = rpm.mpw.__getattribute__(yself, self.method_name)
+ xa = xm(long(val))
+ ya = ym(int(val))
+ print " Comparing", xa, ya
+ assert xa == ya
+ return xa
+
+class Long(long):
+ def __getattribute__(self, name):
+ print "__getattribute__ ~%s~" % name
+ if name not in ('__add__', '__sub__'):
+ return long.getattr(self, name)
+ return Factory(self, name)
+
+#a1 = Bar(1)
+#a2 = Bar(2)
+#print a1.__add__(a2)
+#print "Done"
+#print a1 + a2
+
#----------------------------------------------------------------------
class BasicTestCase(unittest.TestCase):
wa = rpm.mpw(self.a)
wb = rpm.mpw(self.b)
wc = rpm.mpw(self.c)
+# xa - Long(self.a)
+# xb = Long(self.b)
+# xc = Long(self.c)
za = long(self.a)
zb = long(self.b)
zc = long(self.c)
print '\n', '-=' * 30
print "Running %s.test03_Signs..." % \
self.__class__.__name__
- a = 9876543210
- wa = -rpm.mpw(a);
- za = -long(a);
- print "-9876543210:\t", wa, "\t", za
+ wp = rpm.mpw(10)
+ wm = -wp
+ wpp = wp + 1
+ wmm = -wpp
+ zp = long(10)
+ zm = -zp
+ zpp = zp + 1
+ zmm = -zpp
+ print "add --:\t", (wm+wm), "\t", (zm+zm)
+ print "add -+:\t", (wm+wp), "\t", (zm+zp)
+ print "add +-:\t", (wp+wm), "\t", (zp+zm)
+ print "add ++:\t", (wp+wp), "\t", (zp+zp)
+ print "sub --:\t", (wm-wm), "\t", (zm-zm)
+ print "sub -+:\t", (wm-wp), "\t", (zm-zp)
+ print "sub +-:\t", (wp-wm), "\t", (zp-zm)
+ print "sub ++:\t", (wp-wp), "\t", (zp-zp)
+ print "mul --:\t", (wm*wm), "\t", (zm*zm)
+ print "mul -+:\t", (wm*wp), "\t", (zm*zp)
+ print "mul +-:\t", (wp*wm), "\t", (zp*zm)
+ print "mul ++:\t", (wp*wp), "\t", (zp*zp)
+ print "div --:\t", (wm/wm), "\t", (zm/zm)
+ print "div -+:\t", (wm/wp), "\t", (zm/zp)
+ print "div +-:\t", (wp/wm), "\t", (zp/zm)
+ print "div ++:\t", (wp/wp), "\t", (zp/zp)
+ print "pow --:\t", (wm**wm), "\t", (zm**zm)
+ print "pow -+:\t", (wm**wp), "\t", (zm**zp)
+ print "pow +-:\t", (wp**wm), "\t", (zp**zm)
+ print "pow ++:\t", (wp**wp), "\t", (zp**zp)
+
+ wpa = rpm.mpw(13)
+ wma = -wpa
+ wpb = wpa - 3
+ wmb = -wpb
+ zpa = long(13)
+ zma = -zpa
+ zpb = zpa - 3
+ zmb = -zpb
+ print "mod --:\t", (wma%wmb), "\t", (zma%zmb)
+ print "mod -+:\t", (wma%wpb), "\t", (zma%zpb)
+ print "mod +-:\t", (wpa%wmb), "\t", (zpa%zmb)
+ print "mod ++:\t", (wpa%wpb), "\t", (zpa%zpb)
+
+ print "rem --:\t", divmod(wma, wmb), "\t", divmod(zma, zmb)
+ print "rem -+:\t", divmod(wma, wpb), "\t", divmod(zma, zpb)
+ print "rem +-:\t", divmod(wpa, wmb), "\t", divmod(zpa, zmb)
+ print "rem ++:\t", divmod(wpa, wpb), "\t", divmod(zpa, zpb)
pass
#----------------------------------------
case '*':
zsize = xsize + msize;
zdata = alloca(zsize * sizeof(*zdata));
+ zsign = x->ob_size * m->ob_size;
mpmul(zdata, xsize, xdata, msize, mdata);
z = mpw_FromMPW(zsize, zdata, 1);
- if (zsign)
+ if (zsign < 0)
z->ob_size = -z->ob_size;
break;
case '/':
zsize = asize + 1;
zdata = alloca(zsize * sizeof(*zdata));
+ zsign = x->ob_size * m->ob_size;
wksp = alloca((bsize+1) * sizeof(*wksp));
shift = mpnorm(bsize, bdata);
zsize -= bsize;
z = mpw_FromMPW(zsize, zdata, 1);
- if (zsign)
+ if (zsign < 0)
z->ob_size = -z->ob_size;
break;
case '%':
zsize = asize;
zdata = alloca(zsize * sizeof(*zdata));
+ zsign = x->ob_size * m->ob_size;
wksp = alloca((bsize+1) * sizeof(*wksp));
mpnmod(zdata, asize, adata, bsize, bdata, wksp);
+ if (zsign < 0) {
+ if (m->ob_size < 0) {
+ (void) mpsubx(zsize, zdata, bsize, bdata);
+ mpneg(zsize, zdata);
+ } else {
+ zsign = 0;
+ mpneg(zsize, zdata);
+ (void) mpaddx(zsize, zdata, bsize, bdata);
+ }
+ }
z = mpw_FromMPW(zsize, zdata, 1);
- if (zsign)
+ if (zsign < 0) {
z->ob_size = -z->ob_size;
+ } else if (zsign > 0) {
+ if (x->ob_size < 0)
+ z->ob_size = -z->ob_size;
+ }
break;
case '<':
/* XXX FIXME: enlarge? negative count? sign?. */
{ mpnumber zn;
mpnzero(&zn);
- mpnpow_w(&zn, xsize, xdata, msize, mdata);
+ if (msize == 0 || (msize == 1 && *mdata == 0))
+ mpnsetw(&zn, 1);
+ else if (m->ob_size < 0)
+ mpnsetw(&zn, 0);
+ else
+ mpnpow_w(&zn, xsize, xdata, msize, mdata);
z = mpw_FromMPW(zn.size, zn.data, 1);
mpnfree(&zn);
- if (zsign)
+ if (zsign < 0)
z->ob_size = -z->ob_size;
} break;
case 'G':
size_t zsize;
mpw* zdata;
mpw* wksp;
+ int qsign = 0;
if (a == NULL || b == NULL)
goto exit;
bsize -= bnorm;
bdata += bnorm;
}
+ qsign = a->ob_size * b->ob_size;
wksp = alloca((bsize+1) * sizeof(*wksp));
mpndivmod(zdata, asize, adata, bsize, bdata, wksp);
r = mpw_FromMPW(bsize, zdata+zsize, 1);
if (r == NULL)
goto exit;
+ if (qsign < 0) {
+ if (b->ob_size < 0) {
+ (void) mpsubx(MPW_SIZE(r), MPW_DATA(r), bsize, bdata);
+ mpneg(MPW_SIZE(r), MPW_DATA(r));
+ } else {
+ mpneg(MPW_SIZE(r), MPW_DATA(r));
+ (void) mpaddx(MPW_SIZE(r), MPW_DATA(r), bsize, bdata);
+ }
+ (void) mpaddw(zsize, zdata, (mpw)1);
+ }
+ if (b->ob_size < 0)
+ r->ob_size = -r->ob_size;
q = mpw_FromMPW(zsize, zdata, 1);
if (q == NULL) {
Py_DECREF(r);
goto exit;
}
+ if (qsign < 0)
+ q->ob_size = -q->ob_size;
if (_mpw_debug) {
prtmpw("q", q);
+import rpm
+
+rpm.mpw().Debug(1)
+
+Methods = ( '__neg__', '__pos__', '__abs__', '__invert__', '__add__', '__sub__', '__mul__', '__div__', '__mod__', '__divmod__', '__pow__', '__lshift__', '__rshift__', '__and__', '__xor__', '__or__')
+
class Factory(object):
def __init__(self, false_self, method_name):
self.false_self = false_self
self.method_name = method_name
def __call__(self, val):
- lself = long(self.false_self)
- iself = int(self.false_self)
- lm = long.__getattribute__(lself, self.method_name)
- im = int.__getattribute__(iself, self.method_name)
- la = lm(long(val))
- ia = im(int(val))
- print " Comparing", la, ia
- assert la == ia
- return la
-
-class Bar(long):
+ xself = long(self.false_self)
+ yself = rpm.mpw(self.false_self)
+ xm = long.__getattribute__(xself, self.method_name)
+ ym = rpm.mpw.__getattribute__(yself, self.method_name)
+ xa = xm(long(val))
+ ya = ym(rpm.mpw(val))
+ print " Comparing", self.method_name, type(xa), xa, type(ya), ya
+ assert xa == ya
+ return xa
+
+class Long(long):
def __getattribute__(self, name):
print "__getattribute__ ~%s~" % name
- if name not in ('__add__', '__sub__', ):
+ if name not in Methods:
return long.getattr(self, name)
return Factory(self, name)
-a1 = Bar(1)
-a2 = Bar(2)
+a1 = Long(0x987654321)
+a2 = Long(0x10)
+a3 = Long(0x0fedcba000000000)
+
+#print a1.__neg__()
+#print a1.__pos__()
+#print a1.__abs__()
+#print a1.__invert__()
+
print a1.__add__(a2)
-print "Done"
-print a1 + a2
+print a1.__sub__(a2)
+print a1.__mul__(a2)
+print a1.__div__(a2)
+print a1.__mod__(a2)
+
+#print a1.__divmod(a2)
+
+print a1.__pow__(a2)
+
+print a1.__lshift__(a2)
+print a1.__rshift__(a2)
+print a1.__and__(a3)
+print a1.__xor__(a3)
+print a1.__or__(a3)