RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: [email protected] 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 [email protected]
