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: 28-Jul-2009 18:11:49 Branch: HEAD Handle: 2009072816114900 Modified files: rpm/js rpmmpw-js.c rpm/js/tscripts Mpw.js Log: - js: add mpw arithmetic methods and unit tests. Summary: Revision Changes Path 1.2 +273 -77 rpm/js/rpmmpw-js.c 1.2 +54 -33 rpm/js/tscripts/Mpw.js ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/js/rpmmpw-js.c ============================================================================ $ cvs diff -u -r1.1 -r1.2 rpmmpw-js.c --- rpm/js/rpmmpw-js.c 27 Jul 2009 22:35:26 -0000 1.1 +++ rpm/js/rpmmpw-js.c 28 Jul 2009 16:11:49 -0000 1.2 @@ -12,7 +12,7 @@ #include "debug.h" /*...@unchecked@*/ -static int _debug = -1; +static int _debug = 0; /* Required JSClass vectors */ #define rpmmpw_addprop JS_PropertyStub @@ -22,9 +22,9 @@ /* Optional JSClass vectors */ #define rpmmpw_getobjectops NULL #define rpmmpw_checkaccess NULL -#define rpmmpw_call NULL -#define rpmmpw_construct rpmmpw_ctor -#define rpmmpw_xdrobject NULL +#define rpmmpw_call rpmmpw_call +#define rpmmpw_construct rpmmpw_ctor +#define rpmmpw_xdrobject NULL #define rpmmpw_hasinstance NULL #define rpmmpw_mark NULL #define rpmmpw_reserveslots NULL @@ -949,9 +949,9 @@ return z; } -#ifdef NOTYET +#define _CHARMASK(_a) (_a) static mpwObject * -mpw_FromString(const char * str, char ** sep, int base) +mpw_FromString(const char * str, const char ** sep, int base) /*...@*/ { const char * s = str, * se; @@ -960,11 +960,13 @@ int sign = 1; int ndigits; +#ifdef FIXME if ((base != 0 && base < 2) || base > 36) { PyErr_SetString(PyExc_ValueError, "mpw() arg 2 must be >= 2 and <= 36"); return NULL; } - while (*s != '\0' && isspace(Py_CHARMASK(*s))) +#endif + while (*s != '\0' && isspace(_CHARMASK(*s))) s++; if (*s == '+') ++s; @@ -972,7 +974,7 @@ ++s; sign = -1; } - while (*s != '\0' && isspace(Py_CHARMASK(*s))) + while (*s != '\0' && isspace(_CHARMASK(*s))) s++; if (base == 0) { if (s[0] != '0') @@ -1007,7 +1009,7 @@ if (*se == 'L' || *se == 'l') se++; - while (*se && isspace(Py_CHARMASK(*se))) + while (*se && isspace(_CHARMASK(*se))) se++; if (sep) *sep = se; @@ -1033,11 +1035,13 @@ return z; onError: +#ifdef FIXME PyErr_Format(PyExc_ValueError, "invalid literal for mpw(): %.200s", str); Py_XDECREF(z); +#endif return NULL; } -#endif +#undef _CHARMASK static mpwObject * mpw_FromHEX(const char * hex) @@ -1108,9 +1112,7 @@ /* ---------- */ -/** \ingroup py_c - * Compute 2 argument operations. - */ +/** Compute 2 argument operations. */ static mpwObject * mpw_ops2(const char *fname, char op, mpwObject *x, mpwObject *m) /*...@*/ @@ -1420,9 +1422,7 @@ return z; } -/** \ingroup py_c - * Compute 3 argument operations. - */ +/** Compute 3 argument operations. */ static mpwObject * mpw_ops3(const char *fname, char op, mpwObject *x, mpwObject *y, mpwObject *m) @@ -1498,7 +1498,7 @@ } static JSBool -mpw_wrap(JSContext *cx, mpwObject * z, jsval *rval) +mpw_wrap(JSContext * cx, jsval * rval, mpwObject * z) { JSObject *o; JSBool ok = JS_FALSE; @@ -1541,11 +1541,10 @@ } /* --- Object methods */ -/** - * Convert to string. - */ + +/** Convert to string. */ static JSBool -mpw_ToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +mpw_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); mpwObject * a = ptr; @@ -1560,9 +1559,7 @@ return ok; } -/** - * Compute gcd(x, y). - */ +/** Compute gcd(x, y). */ static JSBool mpw_Gcd(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -1574,33 +1571,30 @@ _METHOD_DEBUG_ENTRY(_debug); if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &yo))) { void * z = mpw_ops2("Gcd", 'G', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo)); - ok = mpw_wrap(cx, z, rval); + ok = mpw_wrap(cx, rval, z); } return ok; } -/** - * Compute inverse (modulo m) of x. - */ +/** Compute inverse (modulo m) of x. */ static JSBool mpw_Invm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { void * ptr = JS_GetInstancePrivate(cx, obj, &rpmmpwClass, NULL); - JSObject * xo; + JSObject *xo; JSObject * mo; JSBool ok; _METHOD_DEBUG_ENTRY(_debug); - if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &mo))) { - void * z = mpw_ops2("Invm", 'I', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)); - ok = mpw_wrap(cx, z, rval); - } +_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))); +_debug = 0; return ok; } -/** - * Compute x*x (modulo m). - */ +/** Compute x*x (modulo m). */ static JSBool mpw_Sqrm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -1610,16 +1604,13 @@ JSBool ok; _METHOD_DEBUG_ENTRY(_debug); - if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &xo, &mo))) { - void * z = mpw_ops2("Sqrm", 'S', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)); - ok = mpw_wrap(cx, z, rval); - } + 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))); return ok; } -/** - * Compute x+y (modulo m). - */ +/** Compute x+y (modulo m). */ static JSBool mpw_Addm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -1630,17 +1621,14 @@ JSBool ok; _METHOD_DEBUG_ENTRY(_debug); - if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) { - void * z = mpw_ops3("Addm", '+', - mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)); - ok = mpw_wrap(cx, z, rval); - } + if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) + ok = mpw_wrap(cx, rval, + mpw_ops3("Addm", '+', + mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo))); return ok; } -/** - * Compute x-y (modulo m). - */ +/** Compute x-y (modulo m). */ static JSBool mpw_Subm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -1651,17 +1639,14 @@ JSBool ok; _METHOD_DEBUG_ENTRY(_debug); - if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) { - void * z = mpw_ops3("Subm", '-', - mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)); - ok = mpw_wrap(cx, z, rval); - } + if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) + ok = mpw_wrap(cx, rval, + mpw_ops3("Subm", '-', + mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo))); return ok; } -/** - * Compute x*y (modulo m). - */ +/** Compute x*y (modulo m). */ static JSBool mpw_Mulm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -1672,17 +1657,14 @@ JSBool ok; _METHOD_DEBUG_ENTRY(_debug); - if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) { - void * z = mpw_ops3("Mulm", '*', - mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)); - ok = mpw_wrap(cx, z, rval); - } + if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) + ok = mpw_wrap(cx, rval, + mpw_ops3("Mulm", '*', + mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo))); return ok; } -/** - * Compute x**y (modulo m). - */ +/** Compute x**y (modulo m). */ static JSBool mpw_Powm(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { @@ -1693,11 +1675,10 @@ JSBool ok; _METHOD_DEBUG_ENTRY(_debug); - if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) { - void * z = mpw_ops3("Powm", 'P', - mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo)); - ok = mpw_wrap(cx, z, rval); - } + if ((ok = JS_ConvertArguments(cx, argc, argv, "ooo", &xo, &yo, &mo))) + ok = mpw_wrap(cx, rval, + mpw_ops3("Powm", 'P', + mpw_i2mpw(cx, xo), mpw_i2mpw(cx, yo), mpw_i2mpw(cx, mo))); return ok; } @@ -1714,16 +1695,193 @@ JSBool ok; _METHOD_DEBUG_ENTRY(_debug); - if ((ok = JS_ConvertArguments(cx, argc, argv, "oo", &mo, &xo))) { - void * z = mpw_ops2("Rndm", 'R', mpw_i2mpw(cx, xo), mpw_i2mpw(cx, mo)); - ok = mpw_wrap(cx, z, rval); - } + 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))); 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 JSFunctionSpec rpmmpw_funcs[] = { - JS_FS("toString", mpw_ToString, 0,0,0), + JS_FS("toString", mpw_toString, 0,0,0), + JS_FS("gcd", mpw_Gcd, 0,0,0), JS_FS("invm", mpw_Invm, 0,0,0), JS_FS("sqrm", mpw_Sqrm, 0,0,0), @@ -1731,6 +1889,18 @@ JS_FS("subm", mpw_Subm, 0,0,0), 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_END }; @@ -1897,6 +2067,32 @@ return ok; } +static JSBool +rpmmpw_call(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) +{ + /* XXX obj is the global object so lookup "this" object. */ + JSObject * o = NULL; + void * ptr = NULL; + mpwObject * z = ptr; + JSBool ok = JS_FALSE; + jsval v = JSVAL_NULL; + + if (!(ok = JS_ConvertArguments(cx, argc, argv, "/v", &v))) + goto exit; + + /* 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; + +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)); + + return ok; +} + /* --- Class initialization */ JSClass rpmmpwClass = { /* XXX class should be "BeeCrypt" eventually, avoid name conflicts for now */ @@ . patch -p0 <<'@@ .' Index: rpm/js/tscripts/Mpw.js ============================================================================ $ cvs diff -u -r1.1 -r1.2 Mpw.js --- rpm/js/tscripts/Mpw.js 27 Jul 2009 22:35:28 -0000 1.1 +++ rpm/js/tscripts/Mpw.js 28 Jul 2009 16:11:49 -0000 1.2 @@ -6,47 +6,68 @@ // ack("mpw.debug = 1;", 1); // ack("mpw.debug = 0;", 0); -var wa = new Mpw('0000000987654321'); +var wa = mpw('0000000987654321'); ack('wa.toString(16)', '0x987654321'); ack('wa.toString(10)', '40926266145') ack('wa.toString(8)', '0460731241441') ack('wa.toString(2)', '2#100110000111011001010100001100100001') -var wb = new Mpw(0x10); +var wb = mpw(0x10); ack('wb.toString(16)', '0x10'); -var wc = new Mpw('0fedcba000000000'); +var wc = mpw('0fedcba000000000'); ack('wc.toString(16)', '0xfedcba000000000'); -var x = new Mpw(2*3*5*19); -var y = new Mpw(7*11*13*19); -ack('mpw.gcd(x, y).toString(10)', '19'); +var za = 0x0000000007654321; +var wa = mpw(za); +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)); + +var m = mpw(15); +ack('m.toString(10)', '15'); +var x = mpw(7); +ack('x.toString(10)', '7'); +var y = mpw(13); +ack('y.toString(10)', '13'); + +// FIXME +// ack('mpw.invm(x, m).toString(10)', '4'); + +ack('mpw.sqrm(x, m).toString(10)', '4'); +ack('mpw.addm(x, y, m).toString(10)', '5'); +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)); -var x = new Mpw(4); -var m = new Mpw(15); -ack('mpw.invm(x, m).toString(10)', '4'); - -var x = new Mpw(4); -var m = new Mpw(15); -ack('mpw.sqrm(x, m).toString(10)', '1'); - -var x = new Mpw(4); -var y = new Mpw(13); -var m = new Mpw(15); -ack('mpw.addm(x, y, m).toString(10)', '2'); - -var x = new Mpw(23); -var y = new Mpw(6); -var m = new Mpw(15); -ack('mpw.subm(x, y, m).toString(10)', '2'); - -var x = new Mpw(4); -var y = new Mpw(13); -var m = new Mpw(15); -ack('mpw.mulm(x, y, m).toString(10)', '7'); - -var x = new Mpw(13); -var y = new Mpw(4); -var m = new Mpw(15); -ack('mpw.powm(x, y, m).toString(10)', '1'); +ack('mpw.gcd(x, y).toString(10)', '19'); if (loglvl) print("<-- Mpw.js"); @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository [email protected]
