[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