[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rpm-cvs
Subject:    [CVS] RPM: rpm/js/ rpmmpw-js.c rpm/js/tscripts/ Mpw.js
From:       "Jeff Johnson" <jbj () rpm5 ! org>
Date:       2009-07-30 0:28:05
Message-ID: 20090730002805.A0A86994B () rpm5 ! org
[Download RAW message or body]

  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  jbj@rpm5.org
  Module: rpm                              Date:   30-Jul-2009 02:28:05
  Branch: HEAD                             Handle: 2009073000280500

  Modified files:
    rpm/js                  rpmmpw-js.c
    rpm/js/tscripts         Mpw.js

  Log:
    - js: rework the Mpw class methods as variable args to a RPN
    calculator call.

  Summary:
    Revision    Changes     Path
    1.4         +95 -215    rpm/js/rpmmpw-js.c
    1.4         +92 -200    rpm/js/tscripts/Mpw.js
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/js/rpmmpw-js.c
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 rpmmpw-js.c
  --- rpm/js/rpmmpw-js.c	29 Jul 2009 16:28:38 -0000	1.3
  +++ rpm/js/rpmmpw-js.c	30 Jul 2009 00:28:05 -0000	1.4
  @@ -1114,7 +1114,7 @@
   
   /** Compute 2 argument operations. */
   static mpwObject *
  -mpw_ops2(const char *fname, char op, mpwObject *x, mpwObject *m)
  +mpw_ops2(char op, mpwObject *x, mpwObject *m)
           /*@*/
   {
       mpwObject * z = NULL;
  @@ -1415,7 +1415,7 @@
       }
   
   if (_debug)
  -fprintf(stderr, "<== mpw_%s %p[%d]\t", fname, MPW_DATA(z), MPW_SIZE(z)), \
mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));  +fprintf(stderr, "<== %s(%c) \
%p[%d]\t", __FUNCTION__, op, MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, \
MPW_SIZE(z), MPW_DATA(z));  
   exit:
       mpbfree(&b);
  @@ -1424,8 +1424,7 @@
   
   /** Compute 3 argument operations. */
   static mpwObject *
  -mpw_ops3(const char *fname, char op,
  -		mpwObject *x, mpwObject *y, mpwObject *m)
  +mpw_ops3(char op, mpwObject *x, mpwObject *y, mpwObject *m)
           /*@*/
   {
       mpwObject * z = NULL;
  @@ -1470,19 +1469,15 @@
   	goto exit;
   	/*@notreached@*/ break;
       case '+':
  -	fname = "Addm";
   	mpbaddmod_w(&b, xsize, xdata, ysize, ydata, zdata, wksp);
   	break;
       case '-':
  -	fname = "Subm";
   	mpbsubmod_w(&b, xsize, xdata, ysize, ydata, zdata, wksp);
   	break;
       case '*':
  -	fname = "Mulm";
   	mpbmulmod_w(&b, xsize, xdata, ysize, ydata, zdata, wksp);
   	break;
       case 'P':
  -	fname = "Powm";
   	mpbpowmod_w(&b, xsize, xdata, ysize, ydata, zdata, wksp);
   	break;
       }
  @@ -1490,7 +1485,7 @@
       z = mpw_FromMPW(zsize, zdata, 1);
   
   if (_debug < 0)
  -fprintf(stderr, "<== mpw_%s %p[%d]\t", fname, MPW_DATA(z), MPW_SIZE(z)), \
mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));  +fprintf(stderr, "<== %s(%c) \
%p[%d]\t", __FUNCTION__, op, MPW_DATA(z), MPW_SIZE(z)), mpfprintln(stderr, \
MPW_SIZE(z), MPW_DATA(z));  
   exit:
       mpbfree(&b);
  @@ -1572,7 +1567,7 @@
   _METHOD_DEBUG_ENTRY(_debug);
       if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
   	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("Gcd", 'G', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  +		mpw_ops2('G', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
       return ok;
   }
   
  @@ -1589,7 +1584,7 @@
   _debug = -1;
       if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &mo)))
   	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("Invm", 'I', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)));
  +		mpw_ops2('I', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)));
   _debug = 0;
       return ok;
   }
  @@ -1606,7 +1601,7 @@
   _METHOD_DEBUG_ENTRY(_debug);
       if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &mo)))
   	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("Sqrm", 'S', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)));
  +		mpw_ops2('S', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)));
       return ok;
   }
   
  @@ -1623,7 +1618,7 @@
   _METHOD_DEBUG_ENTRY(_debug);
       if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo)))
   	ok = mpw_wrap(cx, rval,
  -	    mpw_ops3("Addm", '+',
  +	    mpw_ops3('+',
   		mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)));
       return ok;
   }
  @@ -1641,7 +1636,7 @@
   _METHOD_DEBUG_ENTRY(_debug);
       if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo)))
   	ok = mpw_wrap(cx, rval,
  -	    mpw_ops3("Subm", '-',
  +	    mpw_ops3('-',
   		mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)));
       return ok;
   }
  @@ -1659,7 +1654,7 @@
   _METHOD_DEBUG_ENTRY(_debug);
       if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo)))
   	ok = mpw_wrap(cx, rval,
  -	    mpw_ops3("Mulm", '*',
  +	    mpw_ops3('*',
   		mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)));
       return ok;
   }
  @@ -1677,7 +1672,7 @@
   _METHOD_DEBUG_ENTRY(_debug);
       if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo)))
   	ok = mpw_wrap(cx, rval,
  -	    mpw_ops3("Powm", 'P',
  +	    mpw_ops3('P',
   		mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)));
       return ok;
   }
  @@ -1697,188 +1692,11 @@
   _METHOD_DEBUG_ENTRY(_debug);
       if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &mo, &xo)))
   	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("Rndm", 'R', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)));
  +		mpw_ops2('R', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)));
       return ok;
   }
   #endif
   
  -/** Compute x+y. */
  -static JSBool
  -mpw_add(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("add", '+', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
  -/** Compute x-y. */
  -static JSBool
  -mpw_sub(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("sub", '-', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
  -/** Compute x*y. */
  -static JSBool
  -mpw_mul(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("mul", '*', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
  -/** Compute x/y. */
  -static JSBool
  -mpw_div(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    /* XXX check for divide-by-zero */
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("div", '/', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
  -/** Compute x%y. */
  -static JSBool
  -mpw_mod(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("rem", '%', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
  -/** Compute x**y. */
  -static JSBool
  -mpw_pow(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("pow", 'P', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
  -/** Compute x<<y. */
  -static JSBool
  -mpw_lshift(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("lshift", '<', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
  -/** Compute x>>y. */
  -static JSBool
  -mpw_rshift(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("rshift", '>', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
  -/** Compute x&y. */
  -static JSBool
  -mpw_and(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("and", '&', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
  -/** Compute x^y. */
  -static JSBool
  -mpw_xor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("xor", '^', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
  -/** Compute x|y. */
  -static JSBool
  -mpw_or(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
  -{
  -    void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL);
  -    JSObject * xo;
  -    JSObject * yo;
  -    JSBool ok;
  -
  -_METHOD_DEBUG_ENTRY(_debug);
  -    if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo)))
  -	ok = mpw_wrap(cx, rval,
  -		mpw_ops2("or", '|', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)));
  -    return ok;
  -}
  -
   static JSBool
   mpw_neg(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
   {
  @@ -1983,18 +1801,6 @@
       JS_FS("mulm",	mpw_Mulm,		0,0,0),
       JS_FS("powm",	mpw_Powm,		0,0,0),
   
  -    JS_FS("__add__",	mpw_add,		0,0,0),
  -    JS_FS("__sub__",	mpw_sub,		0,0,0),
  -    JS_FS("__mul__",	mpw_mul,		0,0,0),
  -    JS_FS("__div__",	mpw_div,		0,0,0),
  -    JS_FS("__mod__",	mpw_mod,		0,0,0),
  -    JS_FS("__pow__",	mpw_pow,		0,0,0),
  -    JS_FS("__lshift__",	mpw_lshift,		0,0,0),
  -    JS_FS("__rshift__",	mpw_rshift,		0,0,0),
  -    JS_FS("__and__",	mpw_and,		0,0,0),
  -    JS_FS("__xor__",	mpw_xor,		0,0,0),
  -    JS_FS("__or__",	mpw_or,			0,0,0),
  -
       JS_FS("__neg__",	mpw_neg,		0,0,0),
       JS_FS("__pos__",	mpw_pos,		0,0,0),
       JS_FS("__abs__",	mpw_abs,		0,0,0),
  @@ -2174,19 +1980,93 @@
       JSObject * o = NULL;
       void * ptr = NULL;
       mpwObject * z = ptr;
  -    JSBool ok = JS_FALSE;
  +    JSBool ok = JS_TRUE;
       jsval v = JSVAL_NULL;
  +    const char * s;
  +    size_t ns;
  +    int c;
  +    void ** stack = memset(alloca(argc*sizeof(*stack)), 0, (argc*sizeof(*stack)));
  +    int ix = -1;
  +    uintN i;
       
  -    if (!(ok = JS_ConvertArguments(cx, argc, argv, "/v", &v)))
  -        goto exit;
  +    switch (argc) {
  +    case 1:
  +	v = argv[0];
  +	/*@fallthrough@*/
  +    case 0:
  +	/* Return a new Mpw object. */
  +	if ((o = rpmjs_NewMpwObject(cx, v)) != NULL)
  +	    ptr = z = JS_GetInstancePrivate(cx, o, &rpmmpwClass, NULL);
  +	*rval = OBJECT_TO_JSVAL(o);
  +	ok = JS_TRUE;
  +	break;
  +    default:
  +	*rval = JSVAL_NULL;
  +	for (i = 0; i < argc; i++) {
  +	    v = argv[i];
  +
  +	    if (JSVAL_IS_OBJECT(v)) {
  +		/* XXX verify mpwClass */
  +assert(++ix < (int)argc);
  +		stack[ix] = mpw_i2mpw(cx, JSVAL_TO_OBJECT(v));
  +		continue;
  +	    } 
  +
  +	    if (JSVAL_IS_STRING(v)) {
  +		s = JS_GetStringBytes(JSVAL_TO_STRING(v));
  +		ns = strlen(s);
  +		if (ns == 0)
  +		    continue;
  +
  +		if (ns > 2) {
  +assert(++ix < (int)argc);
  +		    stack[ix] = mpw_i2mpw(cx, JSVAL_TO_OBJECT(v));
  +		    continue;
  +		}
   
  -    /* Return a new Mpw object. */
  -    if ((o = rpmjs_NewMpwObject(cx, v)) != NULL)
  -	ptr = z = JS_GetInstancePrivate(cx, o, &rpmmpwClass, NULL);
  -    *rval = OBJECT_TO_JSVAL(o);
  -    ok = JS_TRUE;
  +		c = *s;
  +		if (ns == 2) {
  +		    if (!strcmp(s, "**")) c = (int)'P';
  +		    if (!strcmp(s, "<<")) c = (int)'<';
  +		    if (!strcmp(s, ">>")) c = (int)'>';
  +		}
  +
  +		switch (c) {
  +		case '%':
  +		case '/':
  +		    /* XXX divide-by-zero check. */
  +		case '+':
  +		case '-':
  +		case '*':
  +		case 'P':
  +		case '<':
  +		case '>':
  +		case '&':
  +		case '^':
  +		case '|':
  +assert(--ix >= 0);
  +		    stack[ix] = mpw_ops2(c, stack[ix], stack[ix+1]);
  +		    break;
  +		default:
  +		    /* XXX FIXME */
  +		    break;
  +		}
  +		continue;
  +	    }
  +	}
  +	if (ix < 0) {
  +	    ok = JS_TRUE;
  +	    *rval = JSVAL_NULL;
  +	    o = NULL;
  +	    ptr = z = NULL;
  +	} else {
  +	    ok = mpw_wrap(cx, rval, stack[ix]);
  +	    o = JSVAL_TO_OBJECT(*rval);
  +	    ptr = z = JS_GetInstancePrivate(cx, o, &rpmmpwClass, NULL);
  +	}
  +	break;
  +    }
   
  -exit:
   if (_debug)
   fprintf(stderr, "<== %s(%p,%p,%p[%u],%p) o %p ptr %p\t", __FUNCTION__, cx, obj, \
argv, (unsigned)argc, rval, o, ptr), mpfprintln(stderr, MPW_SIZE(z), MPW_DATA(z));  
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/js/tscripts/Mpw.js
  ============================================================================
  $ cvs diff -u -r1.3 -r1.4 Mpw.js
  --- rpm/js/tscripts/Mpw.js	29 Jul 2009 16:28:39 -0000	1.3
  +++ rpm/js/tscripts/Mpw.js	30 Jul 2009 00:28:05 -0000	1.4
  @@ -23,28 +23,18 @@
   var zb = 0x0000000000000010;
   var wb = mpw(zb);
   var zc = 0;
  -zc = za + zb;
  -ack('mpw.__add__(wa, wb).toString(10)', zc.toString(10));
  -zc = za - zb;
  -ack('mpw.__sub__(wa, wb).toString(10)', zc.toString(10));
  -zc = za * zb;
  -ack('mpw.__mul__(wa, wb).toString(10)', zc.toString(10));
  -zc = za / zb;
  -ack('mpw.__div__(wa, wb).toString(10)', Math.floor(zc).toString(10));
  -zc = za % zb;
  -ack('mpw.__mod__(wa, wb).toString(10)', zc.toString(10));
  -zc = Math.pow(za, zb);
  -nack('mpw.__pow__(wa, wb).toString(10)', zc.toString(10));
  -zc = za << zb;
  -ack('mpw.__lshift__(wa, wb).toString(10)', zc.toString(10));
  -zc = za >> zb;
  -ack('mpw.__rshift__(wa, wb).toString(10)', zc.toString(10));
  -zc = za & zb;
  -ack('mpw.__and__(wa, wb).toString(10)', zc.toString(10));
  -zc = za ^ zb;
  -ack('mpw.__xor__(wa, wb).toString(10)', zc.toString(10));
  -zc = za | zb;
  -ack('mpw.__or__(wa, wb).toString(10)', zc.toString(10));
  +
  +ack('mpw(wa, wb, "+").toString(10)', (za + zb).toString(10));
  +ack('mpw(wa, wb, "-").toString(10)', (za - zb).toString(10));
  +ack('mpw(wa, wb, "*").toString(10)', (za * zb).toString(10));
  +ack('mpw(wa, wb, "/").toString(10)', Math.floor(za / zb).toString(10));
  +ack('mpw(wa, wb, "%").toString(10)', (za % zb).toString(10));
  +ack('mpw(wa, wb, "**").toString(10)', Math.pow(za, zb).toString(10));
  +ack('mpw(wa, wb, "<<").toString(10)', (za << zb).toString(10));
  +ack('mpw(wa, wb, ">>").toString(10)', (za >> zb).toString(10));
  +ack('mpw(wa, wb, "&").toString(10)', (za & zb).toString(10));
  +ack('mpw(wa, wb, "^").toString(10)', (za ^ zb).toString(10));
  +ack('mpw(wa, wb, "|").toString(10)', (za | zb).toString(10));
   
   var m = mpw(15);
   ack('m.toString(10)', '15');
  @@ -61,199 +51,101 @@
   ack('mpw.subm(x, y, m).toString(10)', '9');
   ack('mpw.mulm(x, y, m).toString(10)', '1');
   ack('mpw.powm(x, y, m).toString(10)', '7');
  -
  + 
   var zx = 2*3*5*19;
   var zy = 7*11*13*19;
  -x = mpw(zx);
  -ack('x.toString(10)', zx.toString(10));
  -y = mpw(zy);
  -ack('y.toString(10)', zy.toString(10));
  -
  -ack('mpw.gcd(x, y).toString(10)', '19');
  -
  -y = mpw();
  -ack('x.__nonzero__()', true);
  -ack('y.__nonzero__()', false);
  -x = x.__neg__();
  -zx = -zx;
  -ack('x.toString(10)', zx.toString(10));
  -x = x.__abs__();
  -zx = Math.abs(zx);
  -ack('x.toString(10)', zx.toString(10));
  -x = x.__pos__();
  -zx = +zx;
  -ack('x.toString(10)', zx.toString(10));
  -x = x.__invert__();
  -zx = ~zx;
  -ack('x.toString(10)', zx.toString(10));
  +ack('mpw.gcd(mpw(zx), mpw(zy)).toString(10)', '19');
  +
  +// y = mpw(0);
  +// ack('x.__nonzero__()', true);
  +// ack('y.__nonzero__()', false);
  +// x = x.__neg__();
  +// zx = -zx;
  +// ack('x.toString(10)', zx.toString(10));
  +// x = x.__abs__();
  +// zx = Math.abs(zx);
  +// ack('x.toString(10)', zx.toString(10));
  +// x = x.__pos__();
  +// zx = +zx;
  +// ack('x.toString(10)', zx.toString(10));
  +// x = x.__invert__();
  +// zx = ~zx;
  +// ack('x.toString(10)', zx.toString(10));
   
   // ===== Carry/borrow tests
   var a = 0x7fffffff;
  -wa = mpw(za);	wa = mpw.__add__(wa, wa);
  -var za = -a;	za = za + za;
  -wb = mpw(1);
  -wb = wb.__neg__();	
  +wa = mpw(mpw(-a), mpw(-a), "+");
  +var za = (-a) + (-a);
  +wb = mpw(-1);
   var zb = -1;
   wc = mpw(1);
   var zc = 1;
  -wd = mpw(a);	wd = mpw.__add__(wd, wd);
  -var zd = a;	zd = zd + zd;
  +wd = mpw(mpw(a), mpw(a), "+");
  +var zd = a + a;
   
  -x = mpw.__add__(wa, wa);
  -zx = za + za;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__add__(wb, wd);
  -zx = zb + zd;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__add__(wc, wa);
  -zx = zc + za;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__add__(wd, wd);
  -zx = zd + zd;
  -ack('x.toString(10)', zx.toString(10));
  -
  -x = mpw.__add__(wb, wa);
  -zx = zb - za;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__add__(wc, wd);
  -zx = zc - zd;
  -ack('x.toString(10)', zx.toString(10));
  +ack('mpw(wa, wa, "+").toString(10)', (za + za).toString(10));
  +ack('mpw(wb, wd, "+").toString(10)', (zb + zd).toString(10));
  +ack('mpw(wc, wa, "+").toString(10)', (zc + za).toString(10));
  +ack('mpw(wd, wd, "+").toString(10)', (zd + zd).toString(10));
  + 
  +ack('mpw(wb, wa, "-").toString(10)', (zb - za).toString(10));
  +ack('mpw(wc, wd, "-").toString(10)', (zc - zd).toString(10));
   
   // ===== Signs
   var wpa = mpw(13);
  -var wma = wpa.__neg__();
  -var wpb = mpw.__sub__(wpa, mpw(3));	// FIXME: coerce args
  -var wmb = wpb.__neg__();
  +var wma = mpw(-13);
  +var wpb = mpw(wpa, mpw(3), "-");	// FIXME: coerce args
  +var wmb = mpw(-10);
   var zpa = 13;
   var zma = -zpa;
   var zpb = zpa - 3;
   var zmb = -zpb;
   
  -x = mpw.__add__(wma, wmb);
  -zx = zma + zmb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__add__(wma, wpb);
  -zx = zma + zpb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__add__(wpa, wmb);
  -zx = zpa + zmb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__add__(wpa, wpb);
  -zx = zpa + zpb;
  -ack('x.toString(10)', zx.toString(10));
  -
  -x = mpw.__sub__(wma, wmb);
  -zx = zma - zmb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__sub__(wma, wpb);
  -zx = zma - zpb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__sub__(wpa, wmb);
  -zx = zpa - zmb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__sub__(wpa, wpb);
  -zx = zpa - zpb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__sub__(wmb, wma);
  -zx = zmb - zma;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__sub__(wmb, wpa);
  -zx = zmb - zpa;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__sub__(wpb, wma);
  -zx = zpb - zma;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__sub__(wpb, wpa);
  -zx = zpb - zpa;
  -ack('x.toString(10)', zx.toString(10));
  +ack('mpw(wma, wmb, "+").toString(10)', (zma + zmb).toString(10));
  +ack('mpw(wma, wpb, "+").toString(10)', (zma + zpb).toString(10));
  +ack('mpw(wpa, wmb, "+").toString(10)', (zpa + zmb).toString(10));
  +ack('mpw(wpa, wpb, "+").toString(10)', (zpa + zpb).toString(10));
  +
  +ack('mpw(wma, wmb, "-").toString(10)', (zma - zmb).toString(10));
  +ack('mpw(wma, wpb, "-").toString(10)', (zma - zpb).toString(10));
  +ack('mpw(wpa, wmb, "-").toString(10)', (zpa - zmb).toString(10));
  +ack('mpw(wpa, wpb, "-").toString(10)', (zpa - zpb).toString(10));
  +ack('mpw(wmb, wma, "-").toString(10)', (zmb - zma).toString(10));
  +ack('mpw(wmb, wpa, "-").toString(10)', (zmb - zpa).toString(10));
  +ack('mpw(wpb, wma, "-").toString(10)', (zpb - zma).toString(10));
  +ack('mpw(wpb, wpa, "-").toString(10)', (zpb - zpa).toString(10));
    
  -x = mpw.__mul__(wma, wmb);
  -zx = zma * zmb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__mul__(wma, wpb);
  -zx = zma * zpb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__mul__(wpa, wmb);
  -zx = zpa * zmb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__mul__(wpa, wpb);
  -zx = zpa * zpb;
  -ack('x.toString(10)', zx.toString(10));
  +ack('mpw(wma, wmb, "*").toString(10)', (zma * zmb).toString(10));
  +ack('mpw(wma, wpb, "*").toString(10)', (zma * zpb).toString(10));
  +ack('mpw(wpa, wmb, "*").toString(10)', (zpa * zmb).toString(10));
  +ack('mpw(wpa, wpb, "*").toString(10)', (zpa * zpb).toString(10));
    
  -x = mpw.__div__(wma, wmb);
  -zx = zma / zmb;
  -ack('x.toString(10)', Math.floor(zx).toString(10));
  -x = mpw.__div__(wma, wpb);
  -zx = zma / zpb;
  -ack('x.toString(10)', Math.floor(zx).toString(10));
  -x = mpw.__div__(wpa, wmb);
  -zx = zpa / zmb;
  -ack('x.toString(10)', Math.floor(zx).toString(10));
  -x = mpw.__div__(wpa, wpb);
  -zx = zpa / zpb;
  -ack('x.toString(10)', Math.floor(zx).toString(10));
  -x = mpw.__div__(wmb, wma);
  -zx = zmb / zma;
  -ack('x.toString(10)', Math.floor(zx).toString(10));
  -x = mpw.__div__(wmb, wpa);
  -zx = zmb / zpa;
  -ack('x.toString(10)', Math.floor(zx).toString(10));
  -x = mpw.__div__(wpb, wma);
  -zx = zpb / zma;
  -ack('x.toString(10)', Math.floor(zx).toString(10));
  -x = mpw.__div__(wpb, wpa);
  -zx = zpb / zpa;
  -ack('x.toString(10)', Math.floor(zx).toString(10));
  +ack('mpw(wma, wmb, "/").toString(10)', Math.floor(zma/zmb).toString(10));
  +ack('mpw(wma, wpb, "/").toString(10)', Math.floor(zma/zpb).toString(10));
  +ack('mpw(wpa, wmb, "/").toString(10)', Math.floor(zpa/zmb).toString(10));
  +ack('mpw(wpa, wpb, "/").toString(10)', Math.floor(zpa/zpb).toString(10));
  +ack('mpw(wmb, wma, "/").toString(10)', Math.floor(zmb/zma).toString(10));
  +ack('mpw(wmb, wpa, "/").toString(10)', Math.floor(zmb/zpa).toString(10));
  +ack('mpw(wpb, wma, "/").toString(10)', Math.floor(zpb/zma).toString(10));
  +ack('mpw(wpb, wpa, "/").toString(10)', Math.floor(zpb/zpa).toString(10));
    
  -x = mpw.__pow__(wma, wmb);
  -zx = Math.pow(zma, zmb);
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__pow__(wma, wpb);
  -zx = Math.pow(zma, zpb);
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__pow__(wpa, wmb);
  -zx = Math.pow(zpa, zmb);
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__pow__(wpa, wpb);
  -zx = Math.pow(zpa, zpb);
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__pow__(wmb, wma);
  -zx = Math.pow(zmb, zma);
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__pow__(wmb, wpa);
  -zx = Math.pow(zmb, zpa);
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__pow__(wpb, wma);
  -zx = Math.pow(zpb, zma);
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__pow__(wpb, wpa);
  -zx = Math.pow(zpb, zpa);
  -ack('x.toString(10)', zx.toString(10));
  +ack('mpw(wma, wmb, "**").toString(10)', Math.pow(zma, zmb).toString(10));
  +ack('mpw(wma, wpb, "**").toString(10)', Math.pow(zma, zpb).toString(10));
  +ack('mpw(wpa, wmb, "**").toString(10)', Math.pow(zpa, zmb).toString(10));
  +ack('mpw(wpa, wpb, "**").toString(10)', Math.pow(zpa, zpb).toString(10));
  +ack('mpw(wmb, wma, "**").toString(10)', Math.pow(zmb, zma).toString(10));
  +ack('mpw(wmb, wpa, "**").toString(10)', Math.pow(zmb, zpa).toString(10));
  +ack('mpw(wpb, wma, "**").toString(10)', Math.pow(zpb, zma).toString(10));
  +ack('mpw(wpb, wpa, "**").toString(10)', Math.pow(zpb, zpa).toString(10));
    
  -x = mpw.__mod__(wma, wmb);
  -zx = zma % zmb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__mod__(wma, wpb);
  -zx = zma % zpb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__mod__(wpa, wmb);
  -zx = zpa % zmb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__mod__(wpa, wpb);
  -zx = zpa % zpb;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__mod__(wmb, wma);
  -zx = zmb % zma;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__mod__(wmb, wpa);
  -zx = zmb % zpa;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__mod__(wpb, wma);
  -zx = zpb % zma;
  -ack('x.toString(10)', zx.toString(10));
  -x = mpw.__mod__(wpb, wpa);
  -zx = zpb % zpa;
  -ack('x.toString(10)', zx.toString(10));
  +ack('mpw(wma, wmb, "%").toString(10)', (zma % zmb).toString(10));
  +ack('mpw(wma, wpb, "%").toString(10)', (zma % zpb).toString(10));
  +ack('mpw(wpa, wmb, "%").toString(10)', (zpa % zmb).toString(10));
  +ack('mpw(wpa, wpb, "%").toString(10)', (zpa % zpb).toString(10));
  +ack('mpw(wmb, wma, "%").toString(10)', (zmb % zma).toString(10));
  +ack('mpw(wmb, wpa, "%").toString(10)', (zmb % zpa).toString(10));
  +ack('mpw(wpb, wma, "%").toString(10)', (zpb % zma).toString(10));
  +ack('mpw(wpb, wpa, "%").toString(10)', (zpb % zpa).toString(10));
   
   // ===== Knuth poly
   var w1 = mpw(1);
  @@ -272,14 +164,14 @@
       var tm2 = (t - 2);
       print("=====\t("+t+"**m - 1) * ("+t+"**n - 1), m,n in ["+lo+","+hi+")");
       for (var m = lo; m < hi; m++) {
  -        wm = mpw(m);
  -        wb = mpw.__pow__(wt, wm);
  -        wb = mpw.__sub__(wb, w1);
  +	wm = mpw(m);
  +	wb = mpw(wt, wm, "**");
  +	wb = mpw(wb, w1, "-");
   	for (var n = m+1; n < hi+1; n++) {
   	    wn = mpw(n);
  -	    wc = mpw.__pow__(wt, wn);
  -	    wc = mpw.__sub__(wc, w1);
  -	    wa = mpw.__mul__(wb, wc);
  +	    wc = mpw(wt, wn, "**");
  +	    wc = mpw(wc, w1, "-");
  +	    wa = mpw(wb, wc, "*");
   	    print(wa.toString(t));
   //	    zs = tm1 * (m - 1) + tm2 + tm1 * (n - m) + "0" * (m - 1) + "1"
   //	    if ws != zs:
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic